2009-06-15  Adele Peterson  <adele@apple.com>

        Reviewed by Darin Adler.

        Fix for <rdar://problem/6907228> Pasting a paragraph as quotation leaves you typing in blue instead of black; repros

        * editing/InsertParagraphSeparatorCommand.cpp: (WebCore::InsertParagraphSeparatorCommand::doApply):
        When inserting a newline after the blockquote, we don't want to apply the original style after the insertion.

2009-06-15  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Remove outdated comment.

        * bindings/js/JSDOMWindowBase.h:

2009-06-15  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Bring CustomGetPropertyNames more inline with the other
        extended attributes prefixed with Custom, by making it 
        require a complete implementation.

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::getPropertyNames):
        * bindings/js/JSHistoryCustom.cpp:
        (WebCore::JSHistory::getPropertyNames):
        * bindings/js/JSLocationCustom.cpp:
        (WebCore::JSLocation::getPropertyNames):
        * bindings/js/JSStorageCustom.cpp:
        (WebCore::JSStorage::getPropertyNames):
        * bindings/scripts/CodeGeneratorJS.pm:

2009-06-15  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Remove commented out ondataunavailable attribute event listener which
        has now been removed from HTML 5.

        * page/DOMWindow.idl:

2009-06-15  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Move entire custom implementation of getOwnPropertySlot and put
        for JSDOMWindow into JSDOMWindowCustom, eliminating the bit in
        JSDOMWindowBase.

        * bindings/js/JSDOMWindowBase.cpp:
        * bindings/js/JSDOMWindowBase.h:
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::nonCachingStaticFunctionGetter):
        (WebCore::childFrameGetter):
        (WebCore::indexGetter):
        (WebCore::namedItemGetter):
        (WebCore::JSDOMWindow::getOwnPropertySlot):
        (WebCore::JSDOMWindow::put):
        (WebCore::JSDOMWindow::getPropertyAttributes):
        * bindings/js/JSDOMWindowCustom.h:
        * page/DOMWindow.idl:

2009-06-15  Jeremy Orlow (jorlow@chromium.org)

        Reviewed by Dimitri Glazkov.

        https://bugs.webkit.org/show_bug.cgi?id=26356
        Define the functions in V8CustomBindings.h.  "Forgot" this in my
        earlier patch since it wasn't fully upstreamed when I wrote the
        patch.

        * bindings/v8/custom/V8CustomBinding.h:

2009-06-15  Andre Boule  <aboule@apple.com>

        Reviewed by Cameron Zwarich and Dan Bernstein.

        - fix <rdar://problem/6967975> crash with NSString drawAtPoint

        No test possible because this crash can only occur if the client uses
        WebKit text drawing without ever using WebCore text, and DumpRenderTree
        cannot do either.

        * platform/graphics/FontCache.cpp:
        (WebCore::FontCache::purgeInactiveFontData): Null-check
            gFontPlatformDataCache.

2009-06-15  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Mark Rowe.

        <rdar://problem/6974857>
        
        Define ENABLE_3D_RENDERING when building on 10.6, and move ENABLE_3D_RENDERING
        switch from config.h to wtf/Platform.h.

        * Configurations/FeatureDefines.xcconfig:
        * config.h:

2009-06-15  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Make WebInspector's console evaluation/completion asynchronous.
        This way of evaluation allows serializing calls between 
        InspectorController and its frontend.
        
        https://bugs.webkit.org/show_bug.cgi?id=26350

        * inspector/front-end/Console.js:
        (WebInspector.Console.prototype.completions):
        (WebInspector.Console.prototype._reportCompletions):
        (WebInspector.Console.prototype._evalInInspectedWindow):
        (WebInspector.Console.prototype._enterKeyPressed.printResult):
        (WebInspector.Console.prototype._enterKeyPressed):
        * inspector/front-end/DatabaseQueryView.js:
        * inspector/front-end/ObjectPropertiesSection.js:
        (WebInspector.ObjectPropertyTreeElement.prototype.evaluateExpression):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype.evaluateInSelectedCallFrame):
        * inspector/front-end/TextPrompt.js:
        (WebInspector.TextPrompt.prototype.complete):
        (WebInspector.TextPrompt.prototype._completionsReady):

2009-06-15  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Tim Hatcher.

        Reverted previous change as the old behavior was correct for heavy view.

        * inspector/front-end/BottomUpProfileDataGridTree.js:
        (WebInspector.BottomUpProfileDataGridNode.prototype._populate):

2009-06-15  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Tim Hatcher.

        <rdar://problem/6968125> Profiler 'Call' count is incorrect in Heavy
        view (26418)

        - Removed code that copied call and time data from it's ancestor.

        * inspector/front-end/BottomUpProfileDataGridTree.js:
        (WebInspector.BottomUpProfileDataGridNode.prototype._populate):

2009-06-15  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Simon Fraser  <simon.fraser@apple.com>.

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

        Added logic to updateTransitions similar to that in updateKeyframeAnimations
        which detects and removes stale transitions.

        Test: transitions/cancel-transition.html

        * page/animation/CompositeAnimation.cpp:
        (WebCore::CompositeAnimation::updateTransitions):
        * page/animation/ImplicitAnimation.cpp:
        (WebCore::ImplicitAnimation::ImplicitAnimation):
        * page/animation/ImplicitAnimation.h:
        (WebCore::ImplicitAnimation::active):
        (WebCore::ImplicitAnimation::setActive):

2009-06-15  Dan Bernstein  <mitz@apple.com>

        Reviewed by Tim Hatcher.

        - allow the source code font in the Web Inspector to be customized

        * css/view-source.css: Use the default monospace font family and size
            for source code.
        * inspector/front-end/inspector.css: Use the default monospace font
            family and size for console I/O.

2009-06-15  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by and done with Tor Arne Vestbø.

        Fix initialization of uninitialized members in FontFallbackListQt, leading
        to random crashes when rendering text.

        * platform/graphics/qt/FontFallbackListQt.cpp:
        (WebCore::FontFallbackList::FontFallbackList):
        (WebCore::FontFallbackList::invalidate):

2009-06-15  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Holger Freyther.

        https://bugs.webkit.org/show_bug.cgi?id=25895
        [Gtk] Segfault when deleting the last/only character in an entry if a11y is enabled

        Use computeOffsetInContainerNode instead of the inline
        offsetInContainerNode to return the caret offset, since the former
        can handle all types of anchoring. Otherwise we'll hit an ASSERT
        in some situations in debug builds, and crash.

        * editing/gtk/SelectionControllerGtk.cpp:
        (WebCore::SelectionController::notifyAccessibilityForSelectionChange):

2009-06-15  Joe Ligman  <joseph.ligman@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Fix build break
        Rename JSONObject to InspectorJSONObject

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

        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * inspector/ConsoleMessage.cpp:
        (WebCore::ConsoleMessage::addToConsole):
        * inspector/InspectorDOMStorageResource.cpp:
        (WebCore::InspectorDOMStorageResource::bind):
        * inspector/InspectorDatabaseResource.cpp:
        (WebCore::InspectorDatabaseResource::bind):
        * inspector/InspectorFrontend.cpp:
        (WebCore::InspectorFrontend::newInspectorJSONObject):
        (WebCore::InspectorFrontend::addMessageToConsole):
        (WebCore::InspectorFrontend::addResource):
        (WebCore::InspectorFrontend::updateResource):
        (WebCore::InspectorFrontend::addDatabase):
        (WebCore::InspectorFrontend::addDOMStorage):
        * inspector/InspectorFrontend.h:
        * inspector/InspectorJSONObject.cpp: Copied from WebCore/inspector/JSONObject.cpp.
        (WebCore::InspectorJSONObject::InspectorJSONObject):
        (WebCore::InspectorJSONObject::set):
        (WebCore::InspectorJSONObject::scriptObject):
        (WebCore::InspectorJSONObject::createNew):
        * inspector/InspectorJSONObject.h: Copied from WebCore/inspector/JSONObject.h.
        * inspector/InspectorResource.cpp:
        (WebCore::populateHeadersObject):
        (WebCore::InspectorResource::createScriptObject):
        (WebCore::InspectorResource::updateScriptObject):
        * inspector/JSONObject.cpp: Removed.
        * inspector/JSONObject.h: Removed.

2009-06-12  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reviewed by Simon Hausmann.

        Refactor handling of options in the build-webkit script
        
        Options are now defined in one place, and then reused when creating
        the usage help text, the arguments to GetOptions(), and when passing
        the options on to the underlying port-dependent build systems.
        
        This allows the Qt port to read the defaults for the options from the
        pro file (dynamically), and to pass the options on to qmake at build.

        * WebCore.pro:

2009-06-14  chris fleizach  <cfleizach@apple.com>

        Reviewed by Darin Adler.

        Bug 26399: REGRESSION: java applet accessibility broken
        https://bugs.webkit.org/show_bug.cgi?id=26399
 
        Accessibility could not access the elements in a java applet 
        when going down the AX hierarchy.

        Test: DRT does not allow java applets so add a manual test:
              manual-tests/accessibility/java-applet.html

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::doAccessibilityHitTest):
        * accessibility/mac/AccessibilityObjectMac.mm:
        (WebCore::AccessibilityObject::accessibilityIgnoreAttachment):
        * accessibility/mac/AccessibilityObjectWrapper.mm:
        (-[AccessibilityObjectWrapper attachmentView]):
        * manual-tests/accessibility: Added.
        * manual-tests/accessibility/java-applet.html: Added.
        * manual-tests/accessibility/resources: Added.
        * manual-tests/accessibility/resources/AppletTest.class: Added.
        * manual-tests/accessibility/resources/AppletTest.java: Added.
        (AppletTest):
        (AppletTest.init):

2009-06-14  Sam Weinig  <sam@webkit.org>

        Reviewed by Cameron Zwarich.

        Rename the CustomGetOwnPropertySlot and CustomPutFunction extended attributes
        to DelegatingGetOwnPropertySlot and DelegatingPutFunction to more clearly describe
        their functionality (customGetOwnPropertySlot and customPut member functions have
        been renamed getOwnPropertySlotDelegate and putDelegate).  CustomGetOwnPropertySlot 
        and CustomPutFunction have been repurposed to mean a complete custom implementation
        of the function which is inline with other extended attributes prefixed with Custom.

        * bindings/js/JSCSSStyleDeclarationCustom.cpp:
        (WebCore::JSCSSStyleDeclaration::putDelegate):
        * bindings/js/JSDOMWindowCustom.h:
        (WebCore::JSDOMWindow::getOwnPropertySlotDelegate):
        (WebCore::JSDOMWindow::putDelegate):
        * bindings/js/JSHTMLAppletElementCustom.cpp:
        (WebCore::JSHTMLAppletElement::getOwnPropertySlotDelegate):
        (WebCore::JSHTMLAppletElement::putDelegate):
        * bindings/js/JSHTMLEmbedElementCustom.cpp:
        (WebCore::JSHTMLEmbedElement::getOwnPropertySlotDelegate):
        (WebCore::JSHTMLEmbedElement::putDelegate):
        * bindings/js/JSHTMLObjectElementCustom.cpp:
        (WebCore::JSHTMLObjectElement::getOwnPropertySlotDelegate):
        (WebCore::JSHTMLObjectElement::putDelegate):
        * bindings/js/JSHistoryCustom.cpp:
        (WebCore::JSHistory::getOwnPropertySlotDelegate):
        (WebCore::JSHistory::putDelegate):
        * bindings/js/JSLocationCustom.cpp:
        (WebCore::JSLocation::getOwnPropertySlotDelegate):
        (WebCore::JSLocation::putDelegate):
        (WebCore::JSLocationPrototype::putDelegate):
        * bindings/js/JSStorageCustom.cpp:
        (WebCore::JSStorage::putDelegate):
        * bindings/js/JSWorkerContextCustom.cpp:
        (WebCore::JSWorkerContext::getOwnPropertySlotDelegate):
        * bindings/scripts/CodeGeneratorJS.pm:
        * css/CSSStyleDeclaration.idl:
        * html/HTMLAppletElement.idl:
        * html/HTMLEmbedElement.idl:
        * html/HTMLObjectElement.idl:
        * page/DOMWindow.idl:
        * page/History.idl:
        * page/Location.idl:
        * storage/Storage.idl:
        * workers/WorkerContext.idl:

2009-06-14  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        - fix https://bugs.webkit.org/show_bug.cgi?id=26395
          <rdar://problem/6971333> REGRESSION (r40813-r40884): No caret after
          going back/forward to page with focused text field

        No test, since the back/forward cache is disabled in DumpRenderTree

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::open): Added a call to CachedPage::restore(),
        which was removed in r40870.

2009-06-14  Darin Adler  <darin@apple.com>

        * editing/TextIterator.cpp:
        (WebCore::BitStack::push): Use named constant instead of hardcoded numbers.
        (WebCore::BitStack::top): Ditto.

2009-06-14  Darin Adler  <darin@apple.com>

        Reviewed by Dan Bernstein.

        Bug 26364: Search can find text that's hidden by overflow:hidden
        https://bugs.webkit.org/show_bug.cgi?id=26364
        <rdar://problem/6952081>

        Test: fast/text/find-hidden-text.html

        * editing/TextIterator.cpp:
        (WebCore::BitStack::BitStack): Added.
        (WebCore::BitStack::push): Added.
        (WebCore::BitStack::pop): Added.
        (WebCore::BitStack::top): Added.
        (WebCore::BitStack::size): Added.
        (WebCore::parentOrShadowParent): Added. Helper function for walking up
        the parent node chain, crossing shadow tree boundaries.
        (WebCore::depthCrossingShadowBoundaries): Added for use in assertions.
        Counts the depth of a node using the parentOrShadowParent function.
        (WebCore::fullyClipsContents): Added. Returns true for an element that
        fully clips its contents, currently defined as a box that has zero width
        or height and hides overflow. We can add other cases here later.
        (WebCore::ignoresContainerClip): Added. Returns true for an element that
        ignores its container clip, currently defined as an element with absolute
        or fixed positioning.
        (WebCore::pushFullyClippedState): Added. Pushes a bit on the stack indicating
        if the node in question fully clips its contents.
        (WebCore::setUpFullyClippedStack): Added. Pushes a bit for each ancestor of
        a node. Used when creating an iterator.
        (WebCore::TextIterator::TextIterator): Removed code to initialize
        m_inShadowContent. Call setUpFullyClippedStack.
        (WebCore::TextIterator::advance): Use parentOrShadowParent. Call pop when moving
        up to a parent node, and also one extra time when moving to a sibling node.
        Call pushFullyClippedState when moving to a child node, or when moving to a
        sibling node after the aforementioned call to pop.
        (WebCore::TextIterator::handleTextNode): Return early if the node is fully clipped.
        (WebCore::TextIterator::handleReplacedElement): Ditto.
        (WebCore::SimplifiedBackwardsTextIterator::SimplifiedBackwardsTextIterator):
        Call setUpFullyClippedStack.
        (WebCore::SimplifiedBackwardsTextIterator::advance): Same changes as
        TextIterator::advance above.

        * editing/TextIterator.h: Added BitStack class and added m_fullyClippedStack to both
        TextIterator and SimplifiedBackwardsTextIterator. Removed unneeded m_inShadowContent.

2009-06-14  David Hyatt  <hyatt@apple.com>

        Reviewed by Simon Fraser.

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

        Back out Simon's fix and replace it with a better one that doesn't needlessly destroy RenderObjects.
        Use NoInherit rather than Detach for child index changes, and don't worry about other pseudo-class state
        changes, since they were handled already with setNeedsStyleRecalcs on the affected objects themselves.

        * dom/Element.cpp:
        (WebCore::Element::recalcStyle):
        * dom/Node.cpp:
        (WebCore::Node::diff):
        * rendering/style/RenderStyle.h:
        (WebCore::InheritedFlags::setChildIndex):

2009-06-14  David Hyatt  <hyatt@apple.com>

        Reviewed by Dan Bernstein.

        Move all of the mutable member variables from Font into the refcounted FontFallbackList.  This makes
        copying of Fonts more efficient and also effectively makes all of the mutations of a Font object happen
        inside the FontFallbackList.

        * WebCore.base.exp:
        * platform/graphics/Font.cpp:
        (WebCore::Font::Font):
        (WebCore::Font::operator=):
        (WebCore::Font::primaryFont):
        (WebCore::Font::update):
        * platform/graphics/Font.h:
        (WebCore::Font::setWordSpacing):
        (WebCore::Font::setLetterSpacing):
        * platform/graphics/FontFallbackList.cpp:
        (WebCore::FontFallbackList::FontFallbackList):
        (WebCore::FontFallbackList::invalidate):
        (WebCore::FontFallbackList::determinePitch):
        * platform/graphics/FontFallbackList.h:
        (WebCore::FontFallbackList::primarySimpleFontData):
        (WebCore::FontFallbackList::primaryFontData):
        * platform/graphics/FontFastPath.cpp:
        (WebCore::Font::glyphDataForCharacter):

2009-06-14  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Darin Adler
        
        https://bugs.webkit.org/show_bug.cgi?id=26362
        
        Fix an issue noted on quirksmode.com where dynamically adding siblings does not
        update :nth-child style correctly.

        Test: fast/css/nth-child-dynamic.html

        * dom/Node.h:
        Change diff() to take const RenderStyle*
        * dom/Node.cpp:
        (WebCore::Node::diff):
        When comparing styles to decide whether to detach and reattach, we
        need to look at whether the pseudoclass-related data in the style
        changed (since RenderStyle::diff doesn't check this).
        
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::getCachedPseudoStyle):
        (WebCore::RenderStyle::inheritedNotEqual):
        Make these methods const.
        * rendering/style/RenderStyle.h:
        (WebCore::InheritedFlags::styleType):
        (WebCore::InheritedFlags::pseudoClassStateEquivalent):
        Make methods const.
        Add new method that compares the pseudoclass-related members.

2009-06-13  Peter Kasting  <pkasting@google.com>

        Reviewed by Kevin Ollivier.

        https://bugs.webkit.org/show_bug.cgi?id=25709 part eleven
        Write a wx implementation so the wx port can compile.  For now this is
        mostly a copy of the Cairo port, but in the future it can be changed to
        use a wxBitmap as the storage type everywhere (just as Cairo can
        probably be changed).
        
        Also ASSERT for any other ports who call getAddr() (I don't think there
        are any, and besides, they probably won't link, but this doesn't hurt).
        
        Also fixes a dumb Cairo build bustage typo introduced in part ten.

        * platform/graphics/wx/ImageSourceWx.cpp:
        (WebCore::ImageSource::createFrameAtIndex):
        * platform/image-decoders/ImageDecoder.h:
        (WebCore::RGBA32Buffer::getAddr):
        * platform/image-decoders/cairo/ImageDecoderCairo.cpp:
        (WebCore::RGBA32Buffer::setStatus):
        * platform/image-decoders/wx: Added.
        * platform/image-decoders/wx/ImageDecoderWx.cpp: Added.
        (WebCore::RGBA32Buffer::RGBA32Buffer):
        (WebCore::RGBA32Buffer::clear):
        (WebCore::RGBA32Buffer::zeroFill):
        (WebCore::RGBA32Buffer::copyBitmapData):
        (WebCore::RGBA32Buffer::setSize):
        (WebCore::RGBA32Buffer::asNewNativeImage):
        (WebCore::RGBA32Buffer::hasAlpha):
        (WebCore::RGBA32Buffer::setHasAlpha):
        (WebCore::RGBA32Buffer::setStatus):
        (WebCore::RGBA32Buffer::operator=):
        (WebCore::RGBA32Buffer::width):
        (WebCore::RGBA32Buffer::height):
        * webcore-wx.bkl:

2009-06-13  Stephen White  <senorblanco@chromium.org>

        Reviewed by Dimitri Glazkov.  Landed by Adam Barth.

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

        Some minor code cleanup for chromium/skia port.  Removed #ifdef's
        around skia API changes, since the new version seems solid and we
        don't need to go back.  Added some comments to
        TransparencyWin.h, as requested by Brett in
        https://bugs.webkit.org/show_bug.cgi?id=24584.

        * platform/graphics/chromium/FontCacheLinux.cpp:
        (WebCore::FontCache::createFontPlatformData):
        * platform/graphics/chromium/TransparencyWin.h:
        * platform/graphics/skia/PathSkia.cpp:
        (WebCore::Path::boundingRect):
        (WebCore::boundingBoxForCurrentStroke):
        * platform/graphics/skia/SkiaUtils.cpp:
        (WebCore::SkPathContainsPoint):

2009-06-13  Adam Barth  <abarth@webkit.org>

        Reviewed by Darin Fisher.

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

        Moved registerURLSchemeAsLocal and registerURLSchemeAsNoAccess from
        FrameLoader to SecurityOrigin.

        * WebCore.base.exp:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadFrameRequest):
        (WebCore::FrameLoader::canLoad):
        * loader/FrameLoader.h:
        * page/SecurityOrigin.cpp:
        (WebCore::localSchemes):
        (WebCore::noAccessSchemes):
        (WebCore::SecurityOrigin::SecurityOrigin):
        (WebCore::SecurityOrigin::isLocal):
        (WebCore::SecurityOrigin::registerURLSchemeAsLocal):
        (WebCore::SecurityOrigin::shouldTreatURLAsLocal):
        (WebCore::SecurityOrigin::shouldTreatURLSchemeAsLocal):
        (WebCore::SecurityOrigin::registerURLSchemeAsNoAccess):
        (WebCore::SecurityOrigin::shouldTreatURLSchemeAsNoAccess):
        * page/SecurityOrigin.h:

2009-06-13  Ben Murdoch  <benm@google.com>

        Reviewed by David Kilzer.  Landed by Adam Barth.

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

        This patch changes the way PageGroups create their localStorage
        objects. Rather than creating a local storage object for the page group
        when a page is added to the group, the local storage object is now
        created lazily when the local storage object is requested by the
        DOMWindow.

        * page/PageGroup.cpp:
        (WebCore::PageGroup::closeLocalStorage): Before attempting to close a local storage object for a page group, ensure one has been created.
        (WebCore::PageGroup::addPage): Do not automatically try to create a local storage object when a page is added to the group.
        (WebCore::PageGroup::localStorage): Create a local storage object if one does not exist and return it.
        * page/PageGroup.h: Add private hasLocalStorage method to PageGroup.


2009-06-13  Ben Murdoch  <benm@google.com>

        Reviewed by Eric Seidel.  Landed by Adam Barth.

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

        Add ENABLE(DOM_STORAGE) guards to the dom storage source files.

        * storage/LocalStorage.cpp: Add ENABLE(DOM_STORAGE) guards to the file.
        * storage/LocalStorage.h: Ditto
        * storage/LocalStorageArea.cpp: Ditto
        * storage/LocalStorageArea.h: Ditto
        * storage/LocalStorageTask.cpp: Ditto
        * storage/LocalStorageTask.h: Ditto
        * storage/LocalStorageThread.cpp: Ditto
        * storage/LocalStorageThread.h: Ditto
        * storage/SessionStorage.cpp: Ditto
        * storage/SessionStorage.h: Ditto
        * storage/SessionStorageArea.cpp: Ditto
        * storage/SessionStorageArea.h: Ditto
        * storage/Storage.cpp: Ditto
        * storage/Storage.h: Ditto
        * storage/StorageArea.cpp: Ditto
        * storage/StorageArea.h: Ditto
        * storage/StorageEvent.cpp: Ditto
        * storage/StorageEvent.h: Ditto
        * storage/StorageMap.cpp: Ditto
        * storage/StorageMap.h: Ditto
        * storage/StorageEvent.idl: Add Conditional=DOM_STORAGE attribute.
        * storage/Storage.idl: Ditto

2009-06-13  Peter Kasting  <pkasting@google.com>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=25709 part ten
        Make Skia use the root directory ImageDecoder.h and factor out most
        Skia-specific bits into skia/ImageDecoderSkia.cpp.  Also fix a pair of
        style violations in ImageDecoderCairo.cpp.  This is the last patch for
        this bug, everything beyond this is an enhancement rather than
        unforking.

        * platform/image-decoders/ImageDecoder.h:
        (WebCore::RGBA32Buffer::getAddr):
        * platform/image-decoders/cairo/ImageDecoderCairo.cpp:
        (WebCore::RGBA32Buffer::hasAlpha):
        (WebCore::RGBA32Buffer::setHasAlpha):
        (WebCore::setStatus):
        * platform/image-decoders/skia/ImageDecoder.h: Removed.
        * platform/image-decoders/skia/ImageDecoderSkia.cpp: Added.
        (WebCore::RGBA32Buffer::RGBA32Buffer):
        (WebCore::RGBA32Buffer::clear):
        (WebCore::RGBA32Buffer::zeroFill):
        (WebCore::RGBA32Buffer::copyBitmapData):
        (WebCore::RGBA32Buffer::setSize):
        (WebCore::RGBA32Buffer::asNewNativeImage):
        (WebCore::RGBA32Buffer::hasAlpha):
        (WebCore::RGBA32Buffer::setHasAlpha):
        (WebCore::RGBA32Buffer::setStatus):
        (WebCore::RGBA32Buffer::operator=):
        (WebCore::RGBA32Buffer::width):
        (WebCore::RGBA32Buffer::height):

2009-06-13  Victor Wang <victorw@chromium.org>

        Reviewed by Eric Seidel.  Landed by Adam Barth.

        https://bugs.webkit.org/show_bug.cgi?id=26333
        Alert during a dragenter event handler will crash the renderer
        
        This crash is casued by calling NULL pointer m_documentUnderMouse in
        DragController::tryDocumentDrag()

        tryDHTMLDrag fires dragenter event. The event listener that listens
        to this event may create a nested message loop (open a modal dialog),
        which could process dragleave event and reset m_documentUnderMouse in
        dragExited.

        Fix the crash by checking m_documentUnderMouse after tryDHTMLDrag and
        do not continue if the pointer has been set to NULL.

        Test: DRT does not show alerts so add a manual test:
              manual-tests/drag-enter-alert.html

        * manual-tests/drag-enter-alert.html: Added.
        * manual-tests/resources/drag-image.png: Added.
        * page/DragController.cpp:
        (WebCore::DragController::tryDocumentDrag):

2009-06-13  Nate Chapin  <japhet@google.com>

        Reviewed by Dimitri Glazkov.  Landed by Adam Barth.

        Moved V8 Bindings for V8CustomXPathNSResolver to svn.webkit.org.

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

        * bindings/v8/custom/V8CustomXPathNSResolver.cpp: Added.
        (WebCore::V8CustomXPathNSResolver::V8CustomXPathNSResolver): Moved from src.chromium.org.
        (WebCore::V8CustomXPathNSResolver::~V8CustomXPathNSResolver): Moved from src.chromium.org.
        (WebCore::V8CustomXPathNSResolver::lookupNamespaceURI): Moved from src.chromium.org.
        * bindings/v8/custom/V8CustomXPathNSResolver.h: Added.
        * bindings/v8/custom/V8DocumentCustom.cpp: Updated includes.
        (WebCore::CALLBACK_FUNC_DECL): Updated class name.

2009-06-13  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Mark Rowe.  Landed by Adam Barth.

        Remove obsolete declarations for old Symbian port
        https://bugs.webkit.org/show_bug.cgi?id=26339

        * platform/graphics/FloatPoint.h: Remove declarations for native SYMBIAN adaptation.
        * platform/graphics/FloatRect.h: Ditto.
        * platform/graphics/IntPoint.h: Ditto.
        * platform/graphics/IntRect.h: Ditto.
        * platform/graphics/IntSize.h: Ditto.

2009-06-13  Dirk Schulze  <krit@webkit.org>

        Reviewed by Eric Seidel.

        Added subRegion calculation to SVG filter. Every filter effect is
        clipped to the filter region (according to the spec). This makes
        ImageBuffers for filter effects smaller and we just need to take
        care about big filter regions.
        SVGFEImage needed a correction, to avoid an ASSERT. The two filter
        effects feOffset and feFlood help to test the new subRegion code.

        Tests: svg/filters/subRegion-one-effect.svg
               svg/filters/subRegion-two-effects.svg

        * platform/graphics/filters/FEBlend.h:
        (WebCore::FEBlend::uniteChildEffectSubregions):
        * platform/graphics/filters/FEColorMatrix.h:
        (WebCore::FEColorMatrix::uniteChildEffectSubregions):
        * platform/graphics/filters/FEComponentTransfer.h:
        (WebCore::FEComponentTransfer::uniteChildEffectSubregions):
        * platform/graphics/filters/FEComposite.h:
        (WebCore::FEComposite::uniteChildEffectSubregions):
        * platform/graphics/filters/Filter.h:
        (WebCore::Filter::setSourceImage):
        (WebCore::Filter::sourceImage):
        * platform/graphics/filters/FilterEffect.cpp:
        (WebCore::FilterEffect::FilterEffect):
        (WebCore::FilterEffect::calculateUnionOfChildEffectSubregions):
        (WebCore::FilterEffect::calculateEffectRect):
        * platform/graphics/filters/FilterEffect.h:
        (WebCore::FilterEffect::setUnionOfChildEffectSubregions):
        (WebCore::FilterEffect::unionOfChildEffectSubregions):
        (WebCore::FilterEffect::hasX):
        (WebCore::FilterEffect::setHasX):
        (WebCore::FilterEffect::hasY):
        (WebCore::FilterEffect::setHasY):
        (WebCore::FilterEffect::hasWidth):
        (WebCore::FilterEffect::setHasWidth):
        (WebCore::FilterEffect::hasHeight):
        (WebCore::FilterEffect::setHasHeight):
        (WebCore::FilterEffect::setEffectBuffer):
        (WebCore::FilterEffect::uniteChildEffectSubregions):
        * platform/graphics/filters/SourceAlpha.h:
        (WebCore::SourceAlpha::calculateEffectRect):
        * platform/graphics/filters/SourceGraphic.cpp:
        (WebCore::SourceGraphic::calculateEffectRect):
        (WebCore::SourceGraphic::apply):
        * platform/graphics/filters/SourceGraphic.h:
        * rendering/SVGRenderSupport.cpp:
        (WebCore::SVGRenderBase::prepareToRenderSVGContent):
        (WebCore::SVGRenderBase::finishRenderSVGContent):
        * svg/SVGFilterPrimitiveStandardAttributes.cpp:
        (WebCore::SVGFilterPrimitiveStandardAttributes::setStandardAttributes):
        * svg/graphics/SVGResourceFilter.cpp:
        (WebCore::SVGResourceFilter::prepareFilter):
        (WebCore::SVGResourceFilter::applyFilter):
        * svg/graphics/SVGResourceFilter.h:
        * svg/graphics/filters/SVGFEConvolveMatrix.h:
        (WebCore::FEConvolveMatrix::uniteChildEffectSubregions):
        * svg/graphics/filters/SVGFEDiffuseLighting.h:
        (WebCore::FEDiffuseLighting::uniteChildEffectSubregions):
        * svg/graphics/filters/SVGFEDisplacementMap.h:
        (WebCore::FEDisplacementMap::uniteChildEffectSubregions):
        * svg/graphics/filters/SVGFEFlood.cpp:
        (WebCore::FEFlood::apply):
        * svg/graphics/filters/SVGFEGaussianBlur.h:
        (WebCore::FEGaussianBlur::uniteChildEffectSubregions):
        * svg/graphics/filters/SVGFEImage.cpp:
        (WebCore::FEImage::FEImage):
        * svg/graphics/filters/SVGFEImage.h:
        * svg/graphics/filters/SVGFEMerge.cpp:
        (WebCore::FEMerge::uniteEffectRect):
        * svg/graphics/filters/SVGFEMerge.h:
        * svg/graphics/filters/SVGFEMorphology.h:
        (WebCore::FEMorphology::uniteChildEffectSubregions):
        * svg/graphics/filters/SVGFEOffset.cpp:
        (WebCore::FEOffset::apply):
        * svg/graphics/filters/SVGFEOffset.h:
        (WebCore::FEOffset::uniteChildEffectSubregions):
        * svg/graphics/filters/SVGFESpecularLighting.h:
        (WebCore::FESpecularLighting::uniteEffectRect):
        * svg/graphics/filters/SVGFETile.cpp:
        (WebCore::FETile::uniteChildEffectSubregions):
        * svg/graphics/filters/SVGFETile.h:
        * svg/graphics/filters/SVGFilter.cpp:
        (WebCore::SVGFilter::calculateEffectSubRegion):
        * svg/graphics/filters/SVGFilter.h:
        (WebCore::SVGFilter::effectBoundingBoxMode):
        (WebCore::SVGFilter::filterRegion):
        (WebCore::SVGFilter::sourceImageRect):

2009-06-13  Peter Kasting  <pkasting@google.com>

        Bustage: Fix broken GIFs on Cairo due to subtle typo.  Fix a warning.

        * platform/image-decoders/ImageDecoder.h:
        (WebCore::RGBA32Buffer::copyRowNTimes):
        * platform/image-decoders/bmp/BMPImageReader.cpp:
        (WebCore::BMPImageReader::processBitmasks):

2009-06-13  Peter Kasting  <pkasting@google.com>

        GTK bustage fix.  "inline" is handled differently by different compilers.

        * platform/image-decoders/ImageDecoder.h:
        (WebCore::RGBA32Buffer::getAddr):
        * platform/image-decoders/cairo/ImageDecoderCairo.cpp:

2009-06-13  Peter Kasting  <pkasting@google.com>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=25709 part nine
        Factor Cairo-specific implementation out of ImageDecoder.h into
        ImageDecoderCairo.cpp.  Add some comments to functions declared
        in ImageDecoder.h.

        * GNUmakefile.am:
        * WebCore.vcproj/WebCore.vcproj:
        * platform/image-decoders/ImageDecoder.h:
        * platform/image-decoders/cairo: Added.
        * platform/image-decoders/cairo/ImageDecoderCairo.cpp: Added.
        (WebCore::RGBA32Buffer::RGBA32Buffer):
        (WebCore::RGBA32Buffer::clear):
        (WebCore::RGBA32Buffer::zeroFill):
        (WebCore::RGBA32Buffer::copyBitmapData):
        (WebCore::RGBA32Buffer::setSize):
        (WebCore::RGBA32Buffer::asNewNativeImage):
        (WebCore::RGBA32Buffer::hasAlpha):
        (WebCore::RGBA32Buffer::setHasAlpha):
        (WebCore::RGBA32Buffer::operator=):
        (WebCore::RGBA32Buffer::width):
        (WebCore::RGBA32Buffer::height):
        (WebCore::RGBA32Buffer::getAddr):

2009-06-13  David Hyatt  <hyatt@apple.com>

        Reviewed by Darin Adler.

        Cleanup of the new MidpointState class.  Turn it into a struct instead.  Fix a mistaken
        assertion removal and some unintentional whitespace changes.

        * platform/text/BidiResolver.h:
        (WebCore::MidpointState::reset):
        * rendering/RenderBlock.h:
        * rendering/bidi.cpp:
        (WebCore::BidiRun::operator delete):
        (WebCore::chopMidpointsAt):
        (WebCore::checkMidpoints):
        (WebCore::addMidpoint):
        (WebCore::appendRunsForObject):
        (WebCore::RenderBlock::findNextLineBreak):

2009-06-12  David Hyatt  <hyatt@apple.com>

        Reviewed by Dan Bernstein.

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

        Remove the global variables in bidi.cpp.  Make a new struct, MidpointState, that holds all of the
        midpoint information.  Add the remaining global variables as arguments passed down through functions
        as needed.

        * platform/text/BidiResolver.h:
        (WebCore::MidpointState::MidpointState):
        (WebCore::MidpointState::reset):
        (WebCore::BidiResolver::midpointState):
        * rendering/RenderBlock.h:
        * rendering/bidi.cpp:
        (WebCore::BidiRun::operator delete):
        (WebCore::chopMidpointsAt):
        (WebCore::checkMidpoints):
        (WebCore::addMidpoint):
        (WebCore::appendRunsForObject):
        (WebCore::RenderBlock::bidiReorderLine):
        (WebCore::RenderBlock::layoutInlineChildren):
        (WebCore::RenderBlock::determineStartPosition):
        (WebCore::skipNonBreakingSpace):
        (WebCore::shouldCollapseWhiteSpace):
        (WebCore::requiresLineBox):
        (WebCore::RenderBlock::generatesLineBoxesForInlineChild):
        (WebCore::RenderBlock::skipTrailingWhitespace):
        (WebCore::RenderBlock::skipLeadingWhitespace):
        (WebCore::shouldSkipWhitespaceAfterStartObject):
        (WebCore::RenderBlock::findNextLineBreak):

2009-06-12  Holger Hans Peter Freyther  <zecke@selfish.org>

        Build fix for Qt. After recent ImageDeocder.h changes. I want
        the original change to be backed out as the whole Skia merging
        is going in the wrong direction. The discussion will happen in
        the bugtracker.

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

        * platform/image-decoders/ImageDecoder.h:

2009-06-12  Jan Michael Alonzo  <jmalonzo@webkit.org>

        Gtk build fix: include cstdio so we can use sscanf

        Gtk/Win Cairo build fix: use isASCIISpace instead of isspace
        Suggested by Brent Fulgham

        * platform/image-decoders/xbm/XBMImageDecoder.cpp:
        (WebCore::XBMImageDecoder::decodeDatum):

2009-06-12  Peter Kasting  <pkasting@google.com>

        Yet another Skia bustage fix.

        * platform/image-decoders/skia/ImageDecoder.h:
        (WebCore::RGBA32Buffer::setSize): Avoid symbol name clash.  The better fix is to take an IntSize(); I'll do that later.

2009-06-12  Peter Kasting  <pkasting@google.com>

        Fix remaining Cairo build bustage from
        https://bugs.webkit.org/show_bug.cgi?id=25709 changes.  Use
        Vector<char> in place of std::string.

        * platform/image-decoders/xbm/XBMImageDecoder.cpp:
        (WebCore::XBMImageDecoder::setData):
        (WebCore::XBMImageDecoder::decodeHeader):
        (WebCore::XBMImageDecoder::decodeDatum):
        * platform/image-decoders/xbm/XBMImageDecoder.h:

2009-06-12  David Levin  <levin@chromium.org>

        Reviewed by Darin Adler.

        UString shouldn't create sharedBuffer for SmallStrings.
        https://bugs.webkit.org/show_bug.cgi?id=26347

        Change the call to use the method UString::Rep::sharedBuffer due
        to changes in UString.

        No noticable change in behavior, so no test.

        * platform/text/StringImpl.cpp:
        (WebCore::StringImpl::create):

2009-06-12  Peter Kasting  <pkasting@google.com>

        Fix Chromium and some of Cairo build bustage, fallout from
        https://bugs.webkit.org/show_bug.cgi?id=25709 changes.

        * WebCore.vcproj/WebCore.vcproj: Add missing XBM decoder files.
        * platform/image-decoders/skia/ImageDecoder.h:
        (WebCore::RGBA32Buffer::copyRowNTimes): Fix typo that broke Skia GIF decoding.

2009-06-12  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein

        https://bugs.webkit.org/show_bug.cgi?id=26095
        
        Fix crash when a renderer for an anonymous node is composited
        by null-checking renderer()->node().
        
        Test: compositing/generated-content.html

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::createGraphicsLayer):
        (WebCore::RenderLayerBacking::rendererHasBackground):
        (WebCore::RenderLayerBacking::rendererBackgroundColor):
        (WebCore::RenderLayerBacking::isSimpleContainerCompositingLayer):
        (WebCore::RenderLayerBacking::paintIntoLayer):

2009-06-12  Simon Fraser  <simon.fraser@apple.com>

        Fix build when ACCELERATED_COMPOSITING is defined.

        * loader/EmptyClients.h:
        (WebCore::EmptyChromeClient::attachRootGraphicsLayer):
        (WebCore::EmptyChromeClient::setNeedsOneShotDrawingSynchronization):
        (WebCore::EmptyChromeClient::scheduleViewUpdate):
        Add stubs for the compositing-related ChromeClient methods.
        
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::updateRootLayerPosition):
        (WebCore::RenderLayerCompositor::ensureRootPlatformLayer):
        docWidth()/docHeight() became private. Use overflowWidth()/overflowHeight() instead, which
        matches what is used to size the WebHTMLView.

2009-06-12  jorlow  <jorlow@chromium.org>

        Reviewed by David Levin.

        https://bugs.webkit.org/show_bug.cgi?id=26356
        http://crbug.com/14006
        Create custom bindings for v8.  The rest of these files are still
        forked (so the review is happening on the chromium review site).
        These bindings have been tested on a hacked up Chromium instance
        (also running --single-process) and Android.

        * bindings/v8/custom/V8StorageCustom.cpp: Added.

2009-06-12  Dmitry Titov  <dimich@chromium.org>

        Reviewed by David Levin.

        https://bugs.webkit.org/show_bug.cgi?id=26359
        [v8] Add XMLHttpRequest to WorkerContextExecutionProxy.

        * bindings/v8/WorkerContextExecutionProxy.cpp:
        (WebCore::WorkerContextExecutionProxy::ToV8Object): Add type == V8ClassIndex::XMLHTTPREQUEST to the convertable types.
        (WebCore::WorkerContextExecutionProxy::EventTargetToV8Object): same.
        * bindings/v8/WorkerContextExecutionProxy.h: fix typo in the comment.

2009-06-12  Peter Kasting  <pkasting@google.com>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=25709 part eight
        Replace placeholder Cairo BMP, ICO, XBM decoders with real ones.  Remove
        all the decoders from skia/ since they are now just mirrors of the Cairo
        ones.

        * GNUmakefile.am:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCoreSources.bkl:
        * platform/graphics/cairo/ImageSourceCairo.cpp:
        (WebCore::createDecoder): Pass IntSize() to ICOImageDecoder() so it will always decode the largest icon.  Enable XBM decoding on Windows.
        * platform/graphics/skia/ImageSourceSkia.cpp:
        * platform/graphics/wx/ImageSourceWx.cpp:
        (WebCore::createDecoder): Pass IntSize() to ICOImageDecoder() so it will always decode the largest icon.
        * platform/image-decoders/bmp/BMPImageDecoder.cpp: Replaced with WebCore/platform/image-decoders/skia/BMPImageDecoder.cpp.
        * platform/image-decoders/bmp/BMPImageDecoder.h: Replaced with WebCore/platform/image-decoders/skia/BMPImageDecoder.h.
        * platform/image-decoders/bmp/BMPImageReader.cpp: Copied from WebCore/platform/image-decoders/skia/BMPImageReader.cpp.
        * platform/image-decoders/bmp/BMPImageReader.h: Copied from WebCore/platform/image-decoders/skia/BMPImageReader.h.
        * platform/image-decoders/ico/ICOImageDecoder.cpp: Replaced with WebCore/platform/image-decoders/skia/ICOImageDecoder.cpp.
        * platform/image-decoders/ico/ICOImageDecoder.h: Replaced with WebCore/platform/image-decoders/skia/ICOImageDecoder.h.
        * platform/image-decoders/skia/BMPImageDecoder.cpp: Removed.
        * platform/image-decoders/skia/BMPImageDecoder.h: Removed.
        * platform/image-decoders/skia/BMPImageReader.cpp: Removed.
        * platform/image-decoders/skia/BMPImageReader.h: Removed.
        * platform/image-decoders/skia/GIFImageDecoder.cpp: Removed.
        * platform/image-decoders/skia/GIFImageDecoder.h: Removed.
        * platform/image-decoders/skia/GIFImageReader.cpp: Removed.
        * platform/image-decoders/skia/GIFImageReader.h: Removed.
        * platform/image-decoders/skia/ICOImageDecoder.cpp: Removed.
        * platform/image-decoders/skia/ICOImageDecoder.h: Removed.
        * platform/image-decoders/skia/JPEGImageDecoder.cpp: Removed.
        * platform/image-decoders/skia/JPEGImageDecoder.h: Removed.
        * platform/image-decoders/skia/PNGImageDecoder.cpp: Removed.
        * platform/image-decoders/skia/PNGImageDecoder.h: Removed.
        * platform/image-decoders/skia/XBMImageDecoder.cpp: Removed.
        * platform/image-decoders/skia/XBMImageDecoder.h: Removed.
        * platform/image-decoders/xbm/XBMImageDecoder.cpp: Replaced with WebCore/platform/image-decoders/skia/XBMImageDecoder.cpp.
        * platform/image-decoders/xbm/XBMImageDecoder.h: Replaced with WebCore/platform/image-decoders/skia/XBMImageDecoder.h.

2009-06-11  Peter Kasting  <pkasting@google.com>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=25709 part seven
        Update Skia's ImageDecoder.h with a few changes designed to reduce the
        delta between specific implementations of ImageDecoder.h.  Update
        Cairo's ImageDecoder.h to sync up with the API changes in the Skia
        version in the last two chage sets.  Update Cairo's PNG/JPEG/GIF
        decoders to use the APIs as well.  All the Cairo image decoder changes
        are direct copies of the Skia versions except ImageDecoder.h, which is
        modified in the necessary ways for the differences between Cairo and
        Skia.

        * platform/graphics/cairo/ImageSourceCairo.cpp:
        (WebCore::ImageSource::createFrameAtIndex): Use new RGBA32Buffer::asNewNativeImage() API.
        * platform/image-decoders/ImageDecoder.h: Sync up with Skia version.
        (WebCore::RGBA32Buffer::):
        (WebCore::RGBA32Buffer::RGBA32Buffer):
        (WebCore::RGBA32Buffer::clear):
        (WebCore::RGBA32Buffer::zeroFill):
        (WebCore::RGBA32Buffer::copyBitmapData):
        (WebCore::RGBA32Buffer::copyRowNTimes):
        (WebCore::RGBA32Buffer::setSize):
        (WebCore::RGBA32Buffer::asNewNativeImage):
        (WebCore::RGBA32Buffer::hasAlpha):
        (WebCore::RGBA32Buffer::disposalMethod):
        (WebCore::RGBA32Buffer::setHasAlpha):
        (WebCore::RGBA32Buffer::setDisposalMethod):
        (WebCore::RGBA32Buffer::setRGBA):
        (WebCore::RGBA32Buffer::operator=):
        (WebCore::RGBA32Buffer::width):
        (WebCore::RGBA32Buffer::height):
        (WebCore::RGBA32Buffer::getAddr):
        * platform/image-decoders/gif/GIFImageDecoder.cpp: Sync up with Skia version.
        (WebCore::GIFImageDecoder::initFrameBuffer):
        (WebCore::GIFImageDecoder::haveDecodedRow):
        * platform/image-decoders/jpeg/JPEGImageDecoder.cpp: Sync up with Skia version.
        (WebCore::JPEGImageDecoder::outputScanlines):
        * platform/image-decoders/png/PNGImageDecoder.cpp: Sync up with Skia version.
        (WebCore::PNGImageDecoder::rowAvailable):
        * platform/image-decoders/skia/ImageDecoder.h: Add various typedefs or helper functions to minimize differences with Cairo version.  Reorder functions slightly to match reordering of Cairo's m_hasAlpha variable, which I moved to increase readability.
        (WebCore::RGBA32Buffer::):
        (WebCore::RGBA32Buffer::copyRowNTimes):
        (WebCore::RGBA32Buffer::setSize):
        (WebCore::RGBA32Buffer::asNewNativeImage):
        (WebCore::RGBA32Buffer::hasAlpha):
        (WebCore::RGBA32Buffer::disposalMethod):
        (WebCore::RGBA32Buffer::setHasAlpha):
        (WebCore::RGBA32Buffer::setStatus):
        (WebCore::RGBA32Buffer::setDisposalMethod):
        (WebCore::RGBA32Buffer::setRGBA):
        (WebCore::RGBA32Buffer::operator=):
        (WebCore::RGBA32Buffer::width):
        (WebCore::RGBA32Buffer::height):
        (WebCore::RGBA32Buffer::getAddr):
        * platform/image-decoders/skia/JPEGImageDecoder.cpp: Add #include needed by JPEG headers on some platforms, plus comment.

2009-06-12  Brent Fulgham  <bfulgham@webkit.org>

        Unreviewed build correction.

        Revert accidental configuration checkin.  Was not meant to
        be part of the last changeset.

        * config.h:

2009-06-12  Brent Fulgham  <bfulgham@webkit.org>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=26353
        Corrects handling of Cairo fonts that were getting out of
        sync due to default copy construction.  Also refactors
        some incorrect platform font destruction code that belongs
        in the font object's destructor.

        * platform/graphics/win/FontPlatformData.h:
        * platform/graphics/win/FontPlatformDataCGWin.cpp:
        (WebCore::FontPlatformData::~FontPlatformData):
        * platform/graphics/win/FontPlatformDataCairoWin.cpp:
        (WebCore::FontPlatformData::platformDataInit):
        (WebCore::FontPlatformData::FontPlatformData):
        (WebCore::FontPlatformData::setFont):
        (WebCore::FontPlatformData::~FontPlatformData):
        * platform/graphics/win/FontPlatformDataWin.cpp:
        * platform/graphics/win/SimpleFontDataCGWin.cpp:
        * platform/graphics/win/SimpleFontDataCairoWin.cpp:
        (WebCore::SimpleFontData::platformInit):
        (WebCore::SimpleFontData::platformWidthForGlyph):
        * platform/graphics/win/SimpleFontDataWin.cpp:

2009-06-12  Peter Kasting  <pkasting@google.com>

        Reviewed by Eric Seidel.

        * ChangeLog-2007-10-14: Update my email address.
        * ChangeLog-2008-08-10: Update my email address.

2009-06-12  Nate Chapin  <japhet@google.com>

        Reviewed by David Levin.

        Upstream V8Helpers.

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

        * bindings/v8/V8Helpers.cpp: Added.
        (wrapNPObject): Moved from v8_helpers.cpp.
        (toV8Context): Moved from v8_helpers.cpp.
        (toV8Proxy): Moved from v8_helpers.cpp.
        * bindings/v8/V8Helpers.h: Added.

2009-06-12  Jessie Berlin  <jberlin@apple.com>

        Reviewed by Mark Rowe.

        https://bugs.webkit.org/show_bug.cgi?id=24792
        rdar://problem/6933055

        Changes the radius in which cursor movement around the 4 arrow icon
        while pan-scrolling does not cause scrolling from around 10 pixels to
        15 pixels, similar to what is found in IE and Firefox.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::setPanScrollCursor):
        Factor out the no-pan-scroll radius.
        * platform/ScrollView.h:
        Create a constant for the no-pan-scroll radius.
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::panScrollFromPoint):
        Factor out the no-pan-scroll radius.

2009-06-12  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        https://bugs.webkit.org/show_bug.cgi?id=25609
        [GTK] Implement support for get_selection and get_n_selections

        Only use the VisibleSelection object if it actually belongs to the
        object we are using.

        This is pretty hacky-ish, but I can't seem to find a direct API to
        get the VisibleSelection for a given object, only the global one.

        * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
        (selectionBelongsToObject):
        (webkit_accessible_text_get_n_selections):
        (webkit_accessible_text_get_selection):

2009-06-03  Eric Seidel  <eric@webkit.org>

        Reviewed by Darin Adler.

        Crash at Node::nodeIndex()
        https://bugs.webkit.org/show_bug.cgi?id=26044

        This crash seems to be caused by calling nodeIndex() on
        and invalid Node pointer.  As far as I can tell, the most likely
        explanation is that the Range holding the node is actually
        deleted already (thus the memory is junk).  Looking at the code
        Range changes m_start.container() in its destructor to tell if
        the range is detached or not.  If somehow m_start.container() was
        cleared, the range will never be detached and the Document will end
        up with pointers to deleted ranges.  I don't know how to reproduce this
        any reproduction I could think of would hit ASSERTS in Debug mode.
        One reproduction I tried, did not crash in Release mode, even though it
        did in Debug mode.

        I'm making a speculative fix by always detaching the Range from the document
        during ~Range.  This is safer, and all we lose is an ASSERT to prevent double-detach.
        
        Another solution would be to instead store an m_attached bool on the Range object, or
        expose a Document::isRangeAttached(range) call.  Either of those solutions
        could affect performance, so I went with this solution for now.

        I also removed the RangeBoundaryPoint default constructor
        as it is not used anywhere (and is more likely to cause confusion).

        Since I can't reproduce the crash, no test.

        * dom/Document.cpp:
        (WebCore::Document::detachRange):
        * dom/Range.cpp:
        (WebCore::Range::~Range):
        (WebCore::Range::detach):
        * dom/RangeBoundaryPoint.h:
        (WebCore::RangeBoundaryPoint::RangeBoundaryPoint):
          RangeBoundaryPoints always have an m_containerNode, ASSERT that.
        (WebCore::RangeBoundaryPoint::set):
          ASSERT(container) to match all the other functions.
          All callers already ASSERT(container).  Since we only
          have reports if this crash from Release mode, I can only
          assume that those ASSERTs would have been hit in a Debug reproduction.

2009-06-11  Shinichiro Hamaji  <hamaji@chromium.org>

        Reviewed by Adam Barth.

        https://bugs.webkit.org/show_bug.cgi?id=25512
        Handle texts after unfinished special tags (i.e., script, style, textarea,
        title, xmp, and iframe) as the text node under the tags in view-source mode.
        Before this change, all texts in unfinished special tags cannot be seen even in view-source mode.

        This was already done only for title. This change allows other special tags to be handled as well.

        Test: fast/frames/viewsource-unfinished-tags.html

        * html/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::parseNonHTMLText):
        (WebCore::HTMLTokenizer::parseTag):
        (WebCore::HTMLTokenizer::write):
        * html/HTMLTokenizer.h:
        (WebCore::HTMLTokenizer::State::inAnyNonHTMLText):

2009-06-11  Yongjun Zhang  <yongjun.zhang@nokia.com>

        Reviewed by Ariya Hidayat.

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

        [Qt] build break in ImageDecoderQt.cpp.

        * platform/graphics/qt/ImageDecoderQt.cpp:
        (WebCore::ImageDecoderQt::reset):
        (WebCore::ImageDecoderQt::setData):
        (WebCore::ImageDecoderQt::isSizeAvailable):
        * platform/image-decoders/ImageDecoder.h:
        (WebCore::ImageDecoder::setSize):

2009-06-11  Simon Hausmann  <simon.hausmann@nokia.com>

        Rubber-stamped by Ariya Hidayat.

        Removed obsolete and unmaintained files from the old Symbian port.

        * platform/symbian/FloatPointSymbian.cpp: Removed.
        * platform/symbian/FloatRectSymbian.cpp: Removed.
        * platform/symbian/IntPointSymbian.cpp: Removed.
        * platform/symbian/IntRectSymbian.cpp: Removed.
        * platform/symbian/IntSizeSymbian.cpp: Removed.
        * platform/text/symbian/StringImplSymbian.cpp: Removed.
        * platform/text/symbian/StringSymbian.cpp: Removed.

2009-06-10  Peter Kasting  <pkasting@google.com>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=25709 part six
        Miscellaneous tiny changes.  The important bits here are the ANSI C++
        compliance fix in skia/ImageDecoders.h (needed to compile this file on
        non-MSVC) and some behavioral fixes for the XBM decoder that Chromium
        unit tests partly exposed.  Other changes are mostly cosmetic.

        * platform/image-decoders/ImageDecoder.h: Make some variables private again.  This will break QTWebKit but those guys have agreed to wait on my finishing the ImageDecoder changes.
        * platform/image-decoders/gif/GIFImageDecoder.cpp:
        (WebCore::GIFImageDecoder::initFrameBuffer): Use IntPoint() instead of the redundant IntPoint(0, 0).
        (WebCore::GIFImageDecoder::frameComplete): Use IntPoint() instead of the redundant IntPoint(0, 0).
        * platform/image-decoders/jpeg/JPEGImageDecoder.cpp:
        (WebCore::JPEGImageDecoder::outputScanlines): Remove obvious comments.
        * platform/image-decoders/png/PNGImageDecoder.cpp:
        (WebCore::PNGImageDecoder::rowAvailable): Remove obvious comments.
        * platform/image-decoders/skia/BMPImageReader.cpp:
        (WebCore::BMPImageReader::decodeBMP): Make more in line with other decoders' comments and structure, use a ref to decrease verbosity.
        (WebCore::BMPImageReader::processRLEData): Use a ref to decrease verbosity.
        (WebCore::BMPImageReader::processNonRLEData): Use a ref to decrease verbosity.
        * platform/image-decoders/skia/GIFImageDecoder.cpp: Use IntPoint() instead of the redundant IntPoint(0, 0).
        (WebCore::GIFImageDecoder::initFrameBuffer): Use IntPoint() instead of the redundant IntPoint(0, 0).
        (WebCore::GIFImageDecoder::frameComplete): Use IntPoint() instead of the redundant IntPoint(0, 0).
        * platform/image-decoders/skia/ImageDecoder.h:
        (WebCore::RGBA32Buffer::copyRowNTimes): Fix ANSI violation that MSVC let me compile (!).
        * platform/image-decoders/skia/JPEGImageDecoder.cpp:
        (WebCore::JPEGImageDecoder::outputScanlines): Remove obvious comments.
        * platform/image-decoders/skia/PNGImageDecoder.cpp:
        (WebCore::PNGImageDecoder::rowAvailable): Remove obvious comments.
        * platform/image-decoders/skia/XBMImageDecoder.cpp:
        (WebCore::XBMImageDecoder::frameBufferAtIndex): Return 0 for non-zero indexes, don't try to decode unnecessarily after failure or when the size couldn't be computed, make more in line with other decoders' comments and structure, call RGBA32Buffer::setRect() appropriately.

2009-06-10  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Eric Seidel.

        The shadow node inside empty textareas gets collapsed in disabled
        textareas. This is a regression from moving the overflow from
        the shadow node to it's parent. The fix is to return true in
        RenderBlock::hasLineIfEmpty for textarea shadow nodes as we 
        currently do for input shadow nodes.
        
        https://bugs.webkit.org/show_bug.cgi?id=26296
        
        Test: fast/forms/empty-textarea-toggle-disabled.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::hasLineIfEmpty):

2009-06-10  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        https://bugs.webkit.org/show_bug.cgi?id=25609
        [GTK] Implement support for get_selection and get_n_selections

        Implement atk_text_get_n_selections.

        * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
        (webkit_accessible_text_get_n_selections):

2009-06-10  Dan Bernstein  <mitz@apple.com>

        Reviewed by Anders Carlsson.

        - fix <rdar://problem/6958664> REGRESSION (r42665): When I drag to pan a
          Google map in iPhoto Places, it drags a map tile instead

        Calling stopLoadRequest() from notifyFinished() removed the
        ScriptElementData from the CachedScript's client set, which could make
        it eligible for purging. The fix is to call removeClient() only after
        executing the script, which protects it from being purged while it is
        in the document's queue of scripts to execute soon.

        * dom/ScriptElement.cpp:
        (WebCore::ScriptElementData::execute): Call removeClient() here.
        (WebCore::ScriptElementData::notifyFinished): Instead of calling
        stopLoadRequest(), which calls removeClient(), just reset
        m_cachedScript.

2009-06-10  Jan Michael Alonzo  <jmalonzo@webkit.org>

        Reviewed by Mark Rowe and Eric Seidel.

        Update WebInspector localizedStrings.js with new resource tracking strings
        https://bugs.webkit.org/show_bug.cgi?id=26247

        * English.lproj/localizedStrings.js:

2009-06-10  Feng Qian  <feng@chromium.org>

        Reviewed by Eric Seidel.

        Add Android specific files.
        https://bugs.webkit.org/show_bug.cgi?id=26280

        * platform/text/android: Added.
        * platform/text/android/TextBreakIteratorInternalICU.cpp: Added.

2009-06-10  Feng Qian  <feng@chromium.org>

        Reviewed by Eric Seidel.

        Add Android specific file to WebCore/platform/android (part 9).
        https://bugs.webkit.org/show_bug.cgi?id=26266

        * platform/android/TemporaryLinkStubs.cpp: Added.

2009-06-10  Feng Qian  <feng@chromium.org>

        Reviewed by Eric Seidel.

        Add Android platform specific files.
        https://bugs.webkit/org/show_bug.cgi?id=26265 (part 8).

        * platform/android/SystemTimeAndroid.cpp: Added.
        * platform/android/WidgetAndroid.cpp: Added.

2009-06-10  Feng Qian  <feng@chromium.org>

        Reviewed by Eric Seidel.

        Add Android port files to WebCore/platform. (part 6).
        https://bugs.webkit.org/show_bug.cgi?id=26264

        * platform/android/RenderThemeAndroid.cpp: Added.
        * platform/android/RenderThemeAndroid.h: Added.

2009-06-10  Feng Qian  <feng@chromium.org>

        Reviewed by Eric Seidel.

        Add Android port files to WebCore/platform (part 7).
        https://bugs.webkit.org/show_bug.cgi?id=23296

        * platform/android/ScreenAndroid.cpp: Added.
        * platform/android/ScrollViewAndroid.cpp: Added.
        * platform/android/SearchPopupMenuAndroid.cpp: Added.

2009-06-10  Feng Qian  <feng@chromium.org>

        Reviewed by Eric Seidel.

        Add Android port files to WebCore/platform (part 5).
        https://bugs.webkit.org/show_bug.cgi?id=23296

        * platform/android/LocalizedStringsAndroid.cpp: Added.
        * platform/android/PopupMenuAndroid.cpp: Added.

2009-06-10  Feng Qian  <feng@chromium.org>

        Reviewed by Eric Seidel.

        Add Android port files to WebCore/platform (part 4).
        https://bugs.webkit.org/show_bug.cgi?id=23296

        * platform/android/KeyEventAndroid.cpp: Added.
        * platform/android/KeyboardCodes.h: Added.

2009-06-10  Feng Qian  <feng@chromium.org>

        Reviewed by Eric Seidel.

        Add Android port files to WebCore/platform (part 3).
        https://bugs.webkit.org/show_bug.cgi?id=23296

        * platform/android/FileChooserAndroid.cpp: Added.
        * platform/android/FileSystemAndroid.cpp: Added.

2009-06-10  Feng Qian  <feng@chromium.org>

        Reviewed by Eric Seidel.

        Add Android port files to WebCore/platform (part 2).
        https://bugs.webkit.org/show_bug.cgi?id=23296

        * platform/android/CursorAndroid.cpp: Added.
        * platform/android/DragDataAndroid.cpp: Added.
        * platform/android/EventLoopAndroid.cpp: Added.

2009-06-10  Nate Chapin  <japhet@google.com>

        Reviewed by David Levin.

        Finish moving V8Custom from src.chromium.org to svn.webkit.org.

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

        * bindings/v8/custom/V8CustomBinding.cpp: Finished upstreaming.
        (WebCore::ACCESSOR_GETTER): Moved from v8_custom.cpp.
        (WebCore::INDEXED_ACCESS_CHECK): Moved from v8_custom.cpp.
        (WebCore::NAMED_ACCESS_CHECK): Moved from v8_custom.cpp.
        (WebCore::V8Custom::GetTargetFrame): Moved from v8_custom.cpp.
        (WebCore::V8Custom::DowncastSVGPathSeg): Moved from v8_custom.cpp.
        * bindings/v8/custom/V8CustomBinding.h: Finished upstreaming.
        * bindings/v8/custom/V8DatabaseCustom.cpp: Updated includes.
        * bindings/v8/custom/V8SQLResultSetRowListCustom.cpp: Updated includes.
        * bindings/v8/custom/V8SQLTransactionCustom.cpp: Updated includes.
        * bindings/v8/custom/V8WebKitPointConstructor.cpp: Added.
        (WebCore::CALLBACK_FUNC_DECL): Moved from v8_custom.cpp.

2009-06-10  Takeshi Yoshino  <tyoshino@google.com>

        Reviewed by Justin Garcia.

        Bug 26214: RenderTextControl: Remove ASSERT for checking that visiblePositionForIndex()'s return is not null.
        https://bugs.webkit.org/show_bug.cgi?id=26214

        visiblePositionForIndex can return an instance that returns true for
        isNotNull(). One of common case is when the corresponding input element has
        "-webkit-user-select: none" style attribute. We should allow the case instead
        of putting ASSERT.

        Test: fast/forms/input-select-webkit-user-select-none.html

        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::setSelectionRange):

2009-06-10  Roland Steiner <rolandsteiner@google.com>

        Reviewed by Eric Seidel.

        Bug 26197: Incorrect variable initialization in PlatformContextSkia.cpp
        https://bugs.webkit.org/show_bug.cgi?id=26197

        The PlatformContextSkia constructor does a (very likely) wrong size
        initialization for its m_stateStack member:

            m_stateStack(sizeof(State))

        The intended initialization is probably rather

            m_stateStack(1)

        However, since this doesn't buy much (see also comment #4),
        I removed the initialization completely.

        * platform/graphics/skia/PlatformContextSkia.cpp:
        (PlatformContextSkia::PlatformContextSkia): remove member initialization

2009-06-10  Dean McNamee  <deanm@chromium.org>

        Reviewed by Eric Seidel.

        When there is no backing bitmap, return a transparent pattern.
        https://bugs.webkit.org/show_bug.cgi?id=26061

        Test: fast/canvas/canvas-empty-image-pattern.html

        * platform/graphics/skia/PatternSkia.cpp:
        (WebCore::Pattern::createPlatformPattern):

2009-06-10  Dean McNamee  <deanm@chromium.org>

        Reviewed by Eric Seidel.

        Fix a crash for radial gradients with a zero radius.
        https://bugs.webkit.org/show_bug.cgi?id=26059

        Test: fast/gradients/crash-on-zero-radius.html

        * platform/graphics/skia/GradientSkia.cpp:
        (WebCore::Gradient::platformGradient):

2009-06-10  Peter Kasting  <pkasting@google.com>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=25709 part five
        Rewrite users of ImageDecoder.h to use "safe" API calls, Skia side.
        This tweaks the RGBA32Buffer interfaces to be implementable by Cairo as
        well and modifies Skia's usage of those interfaces accordingly.  Once a
        similar change lands on the Cairo side, the Skia and Cairo decoders
        should be identical except for the implementation of RGBA32Buffer.

        * platform/graphics/skia/ImageSourceSkia.cpp:
        (WebCore::ImageSource::createFrameAtIndex): Use new RGBA32Buffer::asNewNativeImage() function.
        * platform/image-decoders/skia/BMPImageReader.cpp:
        (WebCore::BMPImageReader::processNonRLEData): Use new RGBA32Buffer::zeroFill() function.
        * platform/image-decoders/skia/GIFImageDecoder.cpp:
        (WebCore::GIFImageDecoder::haveDecodedRow): Rewrite to use RGBA32Buffer::setRGBA(x, y, ...) calls as well as other RGBA32Buffer interface calls instead of knowing the underlying types inside the buffer; also try and add clarity.
        * platform/image-decoders/skia/ImageDecoder.h: Removed bitmap(), width(), and height().
        (WebCore::RGBA32Buffer::zeroFill): Added.
        (WebCore::RGBA32Buffer::copyBitmapData): Avoid using bitmap(), which is going away.
        (WebCore::RGBA32Buffer::copyRowNTimes): Added.
        (WebCore::RGBA32Buffer::setSize): Use new zeroFill() function.
        (WebCore::RGBA32Buffer::asNewNativeImage): Added.
        (WebCore::RGBA32Buffer::setRGBA): Condensed two versions into one that takes coordinates instead of a raw pointer.

2009-06-10  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        https://bugs.webkit.org/show_bug.cgi?id=25671
        [GTK] Implement support for set_caret_offset

        Make an implementation that actually works.

        * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
        (webkit_accessible_text_set_caret_offset):

2009-06-10  Darin Fisher  <darin@chromium.org>

        Reviewed by Dimitri Glazkov.

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

        Make sure all member variables are initialized so that the default
        assignment operator and copy constructors do not read uninitialized
        memory.

        * platform/network/ResourceResponseBase.cpp:

2009-06-10  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Timothy Hatcher.

        Update main resource meta-data when resource tracking is disabled.

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

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::getTrackedResource):
        (WebCore::InspectorController::willSendRequest):
        (WebCore::InspectorController::didReceiveResponse):
        (WebCore::InspectorController::didReceiveContentLength):
        (WebCore::InspectorController::didFinishLoading):
        (WebCore::InspectorController::didFailLoading):
        * inspector/InspectorController.h:

2009-06-10  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        https://bugs.webkit.org/show_bug.cgi?id=25609
        [GTK] Implement support for get_selection and get_n_selections

        Implement atk_text_get_selection.

        * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
        (webkit_accessible_text_get_selection):

2009-06-10  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        Do not check if our parent class has the finalize method, it's
        guaranteed to be there.

        * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
        (webkit_accessible_finalize):

2009-06-10  Brent Fulgham  <bfulgham@webkit.org>

        Build correct for Windows Cairo targets.

        * WebCore.vcproj/WebCore.vcproj: Disable warning 4611 (interaction
          between '_setjmp' and C++ object destruction is non-portable) for
          the two Cairo targets.  This used to be disabled in a #pragma,
          but recent refactoring removed these lines.

2009-06-10  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reviewed by Simon Hausmann.

        Fix the build of PluginView on Qt with 64-bit where we disable plugins
        at compile time.

        Use the FooNone.cpp files at compile-time.

        * plugins/PluginPackageNone.cpp:
        * plugins/mac/PluginPackageMac.cpp:
        * plugins/mac/PluginViewMac.cpp:

2009-06-10  Simon Hausmann  <simon.hausmann@nokia.com>

        Fix the Qt build.

        ImageDecoderQt needs m_size and m_sizeAvailable to be protected.

        * platform/image-decoders/ImageDecoder.h:

2009-06-10  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Use absolute path for install_name on Mac

        * WebCore.pro:

2009-06-10  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Jan Alonzo.

        https://bugs.webkit.org/show_bug.cgi?id=25415
        [GTK][ATK] Please implement support for get_text_at_offset

        Reduce duplicated code to access the text of a AtkText
        object. doAXStringForRange calls text() internally, so we are
        doing exactly the same after the change.

        * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
        (getGailTextUtilForAtk):
        (getPangoLayoutForAtk):

2009-06-10  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Jan Alonzo.

        https://bugs.webkit.org/show_bug.cgi?id=25415
        [GTK][ATK] Please implement support for get_text_at_offset

        Pass a PangoLayout to the GailTextUtil function calls.

        It's needed for LINE boundary calls to work correctly.

        * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
        (updateLayout):
        (getPangoLayoutForAtk):
        (webkit_accessible_text_get_text_after_offset):
        (webkit_accessible_text_get_text_at_offset):

2009-06-10  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Jan Alonzo.

        https://bugs.webkit.org/show_bug.cgi?id=25415
        [GTK][ATK] Please implement support for get_text_at_offset

        Use GailUtilText instead of my crappy partial reimplementation of
        it. This should add support for LINE boundaries too, although it's
        mostly untested for now.

        * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
        (getGailTextUtilForAtk):
        (webkit_accessible_text_get_text_after_offset):
        (webkit_accessible_text_get_text_at_offset):

2009-06-10  Jan Michael Alonzo  <jmalonzo@webkit.org>

        Gtk build fix: include <stdio.h> as it is required in jpeglib.h

        * platform/image-decoders/jpeg/JPEGImageDecoder.cpp:

2009-06-09  Peter Kasting  <pkasting@google.com>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=25709 part four
        Most of the remaining Cairo changes needed before merging Skia/Cairo
        image decoders.  Most of these involve plumbing more error detection and
        handling (or, in some cases, merely the capability to detect errors, as
        e.g. Skia detects and handles image allocation failure while Cairo
        currently doesn't).  There is also some general cleanup and
        simplification; RGBA32Buffer::m_height and all associated functions have
        been removed (set but never used) and some places now rely on superclass
        implementations.

        * platform/image-decoders/ImageDecoder.h:
        (WebCore::RGBA32Buffer::RGBA32Buffer): Remove m_height, ensureHeight() and associated stuff
        (WebCore::RGBA32Buffer::copyBitmapData): Add API function so refcounted backing stores (like Skia uses) can be used with GIFs
        (WebCore::RGBA32Buffer::setSize): Zero-fill image to avoid garbage
        (WebCore::RGBA32Buffer::height): Remove
        (WebCore::RGBA32Buffer::ensureHeight): Remove
        (WebCore::ImageDecoder::ImageDecoder): Keep member initialization in order, force subclasses to go through size() instead of accessing m_size directly
        (WebCore::ImageDecoder::isSizeAvailable): Check that decoding hasn't failed
        (WebCore::ImageDecoder::size): Check that decoding hasn't failed
        (WebCore::ImageDecoder::setSize): Protect against integer overflow
        (WebCore::ImageDecoder::isOverSize): Protect against integer overflow
        * platform/image-decoders/gif/GIFImageDecoder.cpp: Remove prepEmptyFrameBuffer()
        (WebCore::GIFImageDecoder::isSizeAvailable): Rely on superclass isSizeAvailable() for better failure handling
        (WebCore::GIFImageDecoder::sizeNowAvailable): Add return values for better failure handling, rely on superclass setSize() for overflow protection
        (WebCore::GIFImageDecoder::initFrameBuffer): Add return values for better failure handling, remove prepEmptyFrameBuffer(), use RGBA32Buffer::setSize() to handle potential allocation failures (won't happen with Cairo port, can in Skia), use RGBA32Buffer::copyBitmapData() so backing store can be refcounted internally (Cairo won't be, Skia is), rely on superclass size() for better failure handling
        (WebCore::GIFImageDecoder::haveDecodedRow): Fix style violation, remove RGBA32Buffer::ensureHeight()
        (WebCore::GIFImageDecoder::frameComplete): Remove RGBA32Buffer::ensureHeight()
        * platform/image-decoders/gif/GIFImageDecoder.h: Remove prepEmptyFrameBuffer(), add return values for better failure handling
        * platform/image-decoders/gif/GIFImageReader.cpp:
        (GIFImageReader::do_lzw): Protect against array overflow, add comments
        (GIFImageReader::read): Protect against array overflow, be more tolerant of bad data, better failure handling
        * platform/image-decoders/jpeg/JPEGImageDecoder.cpp: Remove MSVC-specific warning disable (bfulgham will move into build files)
        (WebCore::JPEGImageReader::decode): Better failure handling
        (WebCore::JPEGImageDecoder::isSizeAvailable): Rely on superclass isSizeAvailable() for better failure handling
        (WebCore::JPEGImageDecoder::outputScanlines): Use RGBA32Buffer::setSize() to handle potential allocation failures (won't happen with Cairo port, can in Skia), rely on superclass size() for better failure handling, remove RGBA32Buffer::ensureHeight()
        * platform/image-decoders/jpeg/JPEGImageDecoder.h: Rely on superclass setSize() for overflow protection
        * platform/image-decoders/png/PNGImageDecoder.cpp: Remove MSVC-specific warning disable (bfulgham will move into build files)
        (WebCore::PNGImageDecoder::PNGImageDecoder): Don't allocate a slot in the framebuffer cache until it's needed
        (WebCore::PNGImageDecoder::isSizeAvailable): Rely on superclass isSizeAvailable() for better failure handling
        (WebCore::PNGImageDecoder::frameBufferAtIndex): Don't allocate a slot in the framebuffer cache until it's needed
        (WebCore::PNGImageDecoder::decode): Don't allocate a slot in the framebuffer cache until it's needed
        (WebCore::PNGImageDecoder::decodingFailed): Fix style violation
        (WebCore::PNGImageDecoder::headerAvailable): Rely on superclass isSizeAvailable() and setSize() for overflow protection and better failure handling
        (WebCore::PNGImageDecoder::rowAvailable): Don't allocate a slot in the framebuffer cache until it's needed, use RGBA32Buffer::setSize() to handle potential allocation failures (won't happen with Cairo port, can in Skia), remove RGBA32Buffer::ensureHeight()
        (WebCore::PNGImageDecoder::pngComplete): Don't allocate a slot in the framebuffer cache until it's needed

2009-06-09  Kevin Ollivier  <kevino@theolliviers.com>

        wx build fix, adding JSCore/assembler to the list of include dirs, and
        adding editing/ReplaceNodeSpanCommand.cpp to the build.
        
        * WebCoreSources.bkl:
        * webcore-base.bkl:

2009-06-09  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Timothy Hatcher.

        When checking if the loader is the main resource loader make sure that the loader's frame is the main frame. 

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

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::didLoadResourceFromMemoryCache):
        (WebCore::InspectorController::identifierForInitialRequest):
        (WebCore::InspectorController::isMainResourceLoader):
        * inspector/InspectorController.h:

2009-06-09  Pierre d'Herbemont  <pdherbemont@apple.com>

        Reviewed by Eric Seidel.

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

        Test: media/controls-css-overload.html

        * rendering/RenderMedia.cpp:
        (WebCore::RenderMedia::updateControls): Prevent NULL dereference in case containers gets hidden.

2009-06-08  Peter Kasting  <pkasting@google.com>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=25709 part three
        Various minor cleanups to the Skia files.  Mostly non-functional, except
        for two specific changes:
        * JPEGs and PNGs were always marked as transparent; now they are only
          marked as transparent when they actually are.  I doubt this has much
          of an effect but in theory it could be used to optimize their display.
        * Instead of arbitrarily disallowing images over 32 * 1024 * 1024 px^2,
          only disallow images which are so large they will cause overflow in
          other parts of the code.  This should fix the testcase on
          http://code.google.com/p/chromium/issues/detail?id=3643.

        * platform/image-decoders/skia/BMPImageReader.h:
        (WebCore::BMPImageReader::setRGBA): Use simpler non-static setRGBA() form
        * platform/image-decoders/skia/GIFImageDecoder.cpp:
        (WebCore::GIFImageDecoder::initFrameBuffer): Remove unneeded code, use more readable setRGBA() form
        (WebCore::GIFImageDecoder::haveDecodedRow): Fix style violation
        * platform/image-decoders/skia/GIFImageDecoder.h: Remove unneeded code
        * platform/image-decoders/skia/ImageDecoder.h:
        (WebCore::RGBA32Buffer::setSize): setSize() should just setStatus() when it fails since all callers were doing it
        (WebCore::ImageDecoder::isOverSize): Ease "oversized" image constraints to allow any image that won't overflow
        * platform/image-decoders/skia/JPEGImageDecoder.cpp:
        (WebCore::JPEGImageDecoder::outputScanlines): Remove unneeded code, mark JPEGs as non-transparent
        * platform/image-decoders/skia/PNGImageDecoder.cpp:
        (WebCore::PNGImageDecoder::decodingFailed): Fix style violation
        (WebCore::PNGImageDecoder::rowAvailable): Mark un-decoded PNGs as non-transparent (this will get reset later as needed)
        * platform/image-decoders/skia/XBMImageDecoder.cpp:
        (WebCore::XBMImageDecoder::frameBufferAtIndex): Remove unneeded code

2009-06-09  Darin Fisher  <darin@chromium.org>

        Fix Chromium build bustage.
        
        CachedResource.cpp no longer compiles if USE(JSC) is not defined.  The
        problem is that this file is using a macro from StdLibExtras.h without
        including that file.  It just happenes to get that file via a JSC
        specific include.

        * loader/CachedResource.cpp:

2009-06-09  Dean McNamee  <deanm@chromium.org>

        Reviewed by Oliver Hunt.

        Make sure the graphics backends are in sync with the canvas lineWidth state.
        https://bugs.webkit.org/show_bug.cgi?id=26187

        Test: fast/canvas/canvas-line-width.html

        * html/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::CanvasRenderingContext2D):

2009-06-09  Michael Nordman  <michaeln@google.com>

        Reviewed by Eric Seidel.

        Proactively cancel pending requests at DocLoader dtor time,
        otherwise crashes can occur. 

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

        Test: fast/frames/javascript-url-as-framesrc-crash.html

        * loader/DocLoader.cpp:
        (WebCore::DocLoader::~DocLoader):

2009-06-09  Eric Seidel  <eric@webkit.org>

        Reviewed by Darin Adler.

        Fix ASSERT seen in shadow tree testing
        https://bugs.webkit.org/show_bug.cgi?id=25092

        Test: svg/custom/use-mutation-event-crash.svg

        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::instanceForShadowTreeElement):

2009-06-09  Brent Fulgham  <bfulgham@webkit.org>

        Reviewed by Eric Seidel.

        Fixes https://bugs.webkit.org/show_bug.cgi?id=22891
        Scrolling in Windows Cairo Broken if no background color set.

        * platform/graphics/cairo/GradientCairo.cpp:
        (WebCore::Gradient::fill):  Use the GraphicsContext save and restore
          methods (rather than the Cairo-only functions) so that the Windows
          device context is kept in sync.
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::GraphicsContext): Add new constructor call
          to sync Windows HDC with Cairo surface.
        * platform/graphics/cairo/GraphicsContextPlatformPrivateCairo.h:
        (WebCore::GraphicsContextPlatformPrivate::syncContext): Provide
          declaration for Windows HDC sync method (and stub for non-Windows
          Cairo implementations).
        * platform/graphics/cairo/ImageCairo.cpp:
        (WebCore::BitmapImage::draw): Use GraphicsContext save and restore
          methods (rather than the Cairo-only functions) so that the Windows
          device context is kept in sync.
        * platform/graphics/win/GraphicsContextCairoWin.cpp:
        (WebCore::CairoContextWithHDC): New method to create a valid Cairo
          context for a given HDC.
        (WebCore::GraphicsContext::GraphicsContext): Modify constructor to
          use new CairoContextWithHDC call.
        (WebCore::GraphicsContext::getWindowsContext): Revise to match
          behavior of CG implementation.
        (WebCore::GraphicsContext::releaseWindowsContext): Revise to match
          behavior of CG implementation.
        (WebCore::GraphicsContextPlatformPrivate::concatCTM): Get rid of
          incorrect new HDC, and use object's HDC member for dealing with
          concatCTM operations.
        (WebCore::GraphicsContextPlatformPrivate::syncContext): New method
          to sync Windows HDC with Cairo context.
        * platform/graphics/win/ImageCairoWin.cpp:
        (WebCore::BitmapImage::getHBITMAPOfSize): Revise implementation to
          match CG behavior.

2009-06-09  Jian Li  <jianli@chromium.org>

        Reviewed by David Levin.

        Bug 26196: Fix the problem that worker's importScripts fails if the
        script URL is redirected from different origin.
        https://bugs.webkit.org/show_bug.cgi?id=26196

        Test: http/tests/workers/worker-importScripts.html

        The fix is to pass an additional enum parameter to the loader in
        order to tell it to perform the redirect origin check or not.

        * loader/DocumentThreadableLoader.cpp:
        (WebCore::DocumentThreadableLoader::create):
        (WebCore::DocumentThreadableLoader::DocumentThreadableLoader):
        (WebCore::DocumentThreadableLoader::willSendRequest):
        * loader/DocumentThreadableLoader.h:
        * loader/ThreadableLoader.cpp:
        (WebCore::ThreadableLoader::create):
        (WebCore::ThreadableLoader::loadResourceSynchronously):
        * loader/ThreadableLoader.h:
        (WebCore::):
        * loader/WorkerThreadableLoader.cpp:
        (WebCore::WorkerThreadableLoader::WorkerThreadableLoader):
        (WebCore::WorkerThreadableLoader::loadResourceSynchronously):
        (WebCore::WorkerThreadableLoader::MainThreadBridge::MainThreadBridge):
        (WebCore::WorkerThreadableLoader::MainThreadBridge::mainThreadCreateLoader):
        * loader/WorkerThreadableLoader.h:
        (WebCore::WorkerThreadableLoader::create):
        * workers/WorkerContext.cpp:
        (WebCore::WorkerContext::importScripts):
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::loadRequestAsynchronously):

2009-06-09  Anand K. Mistry  <amistry@google.com>

        Reviewed by Dimitri Glazkov.

        Paint bitmaps with the alpha channel in Skia.
        https://bugs.webkit.org/show_bug.cgi?id=26037

        Test: fast/canvas/drawImage-with-globalAlpha.html

        * platform/graphics/skia/ImageSkia.cpp:
        (WebCore::paintSkBitmap):
        * platform/graphics/skia/PlatformContextSkia.cpp:
        (PlatformContextSkia::getAlpha):
        * platform/graphics/skia/PlatformContextSkia.h:

2009-06-09  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Xan Lopez.

        https://bugs.webkit.org/show_bug.cgi?id=26104
        [GTK] Make NetworkRequest a proper GObject and expose SoupMessage

        Refactor how SoupMessage is handled, so that our ResourceRequest
        object doesn't have to store it as a member, which complicates
        managing ResourceRequest's lifetime.

        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::ResourceHandle::startHttp):
        * platform/network/soup/ResourceRequest.h:
        (WebCore::ResourceRequest::ResourceRequest):
        (WebCore::ResourceRequest::doUpdatePlatformRequest):
        (WebCore::ResourceRequest::doUpdateResourceRequest):
        * platform/network/soup/ResourceRequestSoup.cpp:
        (WebCore::ResourceRequest::toSoupMessage):
        (WebCore::ResourceRequest::updateFromSoupMessage):

2009-06-09  Simon Hausmann  <simon.hausmann@nokia.com>

        Fix the Qt build, the time functions moved into the WTF namespace.

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

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

        Reviewed by Antti Koivisto

        <rdar://problem/6727495> Repro crash in WebCore::Loader::Host::servePendingRequests() and dupes.

        Test: http/tests/loading/deleted-host-in-resource-load-delegate-callback.html

        Loader::Host objects were manually managed via new/delete.
        There's a variety of circumstances where a Host might've been deleted while it was still in the middle
        of a resource load delegate callback.
        Changing them to be RefCounted then adding protectors in the callbacks makes this possibility disappear.

        At the same time, remove ProcessingResource which was an earlier fix for this same problem that wasn't
        fully implemented.

        * loader/loader.cpp:
        (WebCore::Loader::Loader):
        (WebCore::Loader::load):
        (WebCore::Loader::servePendingRequests):
        (WebCore::Loader::resumePendingRequests):
        (WebCore::Loader::cancelRequests):
        (WebCore::Loader::Host::didFinishLoading):
        (WebCore::Loader::Host::didFail):
        (WebCore::Loader::Host::didReceiveResponse):
        (WebCore::Loader::Host::didReceiveData):
        * loader/loader.h:
        (WebCore::Loader::Host::create):

2009-06-08  Dmitry Titov  <dimich@chromium.org>

        Reviewed by David Levin.

        https://bugs.webkit.org/show_bug.cgi?id=26126
        Refactor methods of WorkerMessagingProxy used to talk to main-thread loader into new interface.

        Split a couple of methods used to schedule cross-thread tasks between worker thread and loader thread
        implemented on WorkerMessagingProxy into a separate interface so the loading can be implemented in
        Chromium's workers.

        No changes in functionality so no tests added.

        * GNUmakefile.am:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        Added WorkerLoaderProxy.h to the bulid.

        * bindings/js/WorkerScriptController.cpp:
        (WebCore::WorkerScriptController::evaluate): WorkerThread::workerObjectProxy() now returns & instead of *
        * bindings/v8/WorkerScriptController.cpp:
        (WebCore::WorkerScriptController::evaluate): same.
        * workers/WorkerContext.cpp:
        (WebCore::WorkerContext::~WorkerContext): same.
        (WebCore::WorkerContext::reportException): same.
        (WebCore::WorkerContext::addMessage): same.
        (WebCore::WorkerContext::postMessage): same.

        * loader/WorkerThreadableLoader.cpp:
        (WebCore::WorkerThreadableLoader::WorkerThreadableLoader):
        (WebCore::WorkerThreadableLoader::MainThreadBridge::MainThreadBridge):
        (WebCore::WorkerThreadableLoader::MainThreadBridge::destroy):
        (WebCore::WorkerThreadableLoader::MainThreadBridge::cancel):
        (WebCore::WorkerThreadableLoader::MainThreadBridge::didSendData):
        (WebCore::WorkerThreadableLoader::MainThreadBridge::didReceiveResponse):
        (WebCore::WorkerThreadableLoader::MainThreadBridge::didReceiveData):
        (WebCore::WorkerThreadableLoader::MainThreadBridge::didFinishLoading):
        (WebCore::WorkerThreadableLoader::MainThreadBridge::didFail):
        (WebCore::WorkerThreadableLoader::MainThreadBridge::didFailRedirectCheck):
        (WebCore::WorkerThreadableLoader::MainThreadBridge::didReceiveAuthenticationCancellation):
        Use WorkerLoaderProxy instead of WorkerMessagingProxy for the MainThreadBridge.
        Mostly rename.

        (WebCore::WorkerThreadableLoader::MainThreadBridge::mainThreadCreateLoader):
        In addition to using WorkerLoaderProxy instead of WorkerMessagingProxy, the check for
        AskedToTerminate is removed. It seems to be an optimization for a very small number of cases
        when worker termination is requested a very short time before the request to load something
        (XHR or importScript) was dispatched on the main thread.

        * loader/WorkerThreadableLoader.h:
        Now keeps a pointer to WorkerLoaderProxy rather then to a WorkerMessagingProxy. This allows
        to implement WorkerThreadableLoader for Chromium.

        * workers/WorkerLoaderProxy.h: Added.
        (WebCore::WorkerLoaderProxy::~WorkerLoaderProxy):

        * workers/WorkerMessagingProxy.cpp:
        (WebCore::WorkerMessagingProxy::startWorkerContext):
        (WebCore::WorkerMessagingProxy::postTaskToLoader): Added ASSERT since this needs to be implemented for nested workers.
        * workers/WorkerMessagingProxy.h:
        Derived from WorkerLoaderProxy, the methods for posting tasks cross-thread are now virtual.
        Removed unused postTaskToWorkerContext() method.

        * workers/WorkerThread.cpp:
        (WebCore::WorkerThread::create):
        (WebCore::WorkerThread::WorkerThread):
        * workers/WorkerThread.h:
        (WebCore::WorkerThread::workerLoaderProxy):
        * workers/WorkerThread.cpp:
        (WebCore::WorkerThread::create):
        (WebCore::WorkerThread::WorkerThread):
        (WebCore::WorkerThread::workerThread):
        * workers/WorkerThread.h:
        (WebCore::WorkerThread::workerLoaderProxy):
        (WebCore::WorkerThread::workerObjectProxy):
        WorkerThread gets a new member of type WorkerLoaderProxy&, and accessor.
        Also, existing WorkerObjectProxy* member is now WorkerObjectProxy& because it can't be null.

2009-06-08  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=26238
        Add parseDate helper to HTTPParsers, which uses WTF::parseDateFromNullTerminatedCharacters.

        * ForwardingHeaders/runtime/DateMath.h: Removed.
        * ForwardingHeaders/wtf/DateMath.h: Copied from WebCore/ForwardingHeaders/runtime/DateMath.h.
        * platform/network/HTTPParsers.cpp:
        (WebCore::parseDate): Added.
        * platform/network/HTTPParsers.h:
        * platform/network/ResourceResponseBase.cpp:
        (WebCore::parseDateValueInHeader): Changed to use the new helper.

2009-06-08  Adam Langley  <agl@google.com>

        Reviewed by Eric Siedel.

        Chromium Linux ignored the background color on <select>s. Rather
        than encode magic colours, we start with a base color (specified
        via CSS) and derive the other colors from it. Thus, setting the
        CSS background-color now correctly changes the colour of the
        control.

        This should not change the appearence controls without
        background-colors. However, <select>s with a background-color
        will now renderer correctly, which may require rebaselining
        pixel tests in the Chromium tree.

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

        * platform/graphics/Color.cpp:
        (WebCore::Color::getHSL): new member
        * platform/graphics/Color.h:
        * rendering/RenderThemeChromiumLinux.cpp:
        (WebCore::RenderThemeChromiumLinux::systemColor):
        (WebCore::brightenColor):
        (WebCore::paintButtonLike):

2009-06-08  Victor Wang <victorw@chromium.org>

        Reviewed by Dimitri Glazkov.

        https://bugs.webkit.org/show_bug.cgi?id=26087
        Bug 26087: Removing element in JS crashes Chrome tab if it fired the change event

        Fix tab crash caused by destroying the popup list that fired the change event on abandon.

        If a popup list is abandoned (press a key to jump to an item
        and then use tab or mouse to get away from the select box),
        the current code fires a change event in PopupListBox::updateFromElemt().
        The JS that listens to this event may destroy the object and cause the
        rest of popup list code crashes.

        The updateFromElement() is called before abandon() and this causes
        the selected index to be discarded after updateFromElement(). From
        the code comments, this appears to be the reason why valueChanged is
        called in updateFromElement.

        Fix the issue by removing the valueChanged call in updateFromElement,
        saving the selected index that we should accept on abandon and pass
        it to the valueChange in abandon().

        A manual test has been added.

        * manual-tests/chromium: Added.
        * manual-tests/chromium/onchange-reload-popup.html: Added.
        * platform/chromium/PopupMenuChromium.cpp:
        (WebCore::PopupListBox::PopupListBox):
        (WebCore::PopupListBox::handleKeyEvent):
        (WebCore::PopupListBox::abandon):
        (WebCore::PopupListBox::updateFromElement):

2009-06-08  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Disable a few warnings on Windows

        * WebCore.pro:

2009-06-08  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Don't enable ENABLE_PLUGIN_PACKAGE_SIMPLE_HASH on Windows
        
        This define was brought in after refactoring some code from
        PluginPackage(Qt|Gtk).cpp into the shared PluginPackage.cpp.

        * WebCore.pro:

2009-06-08  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Use $QMAKE_PATH_SEP instead of hardcoded / to fix Windows build

        * WebCore.pro:

2009-06-08  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Ariya Hidayat.

        [Qt] Build fix when NETSCAPE_PLUGIN_API support is turned off
        https://bugs.webkit.org/show_bug.cgi?id=26244

        * WebCore.pro: Define PLUGIN_PACKAGE_SIMPLE_HASH only if
        NETSCAPE_PLUGIN_API is turned on
        * plugins/PluginPackage.cpp: Guard initializeBrowserFuncs()
        * plugins/PluginViewNone.cpp: Match guards with PluginView.h

2009-06-07  Dan Bernstein  <mitz@apple.com>

        Reviewed by Sam Weinig.

        - fix <rdar://problem/6931661> -[WebView _selectionIsAll] returns YES
          when the selection is inside a text field.

        * editing/VisibleSelection.cpp:
        (WebCore::VisibleSelection::isAll): Return false if the selection is in
        a shadow tree.

2009-06-07  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Holger Freyther.

        https://bugs.webkit.org/show_bug.cgi?id=26106
        [GTK] Crashes when you keep a combo open during a page transition, then close it

        Hide the combo popup and disconnect from its signals during
        PopupMenu destruction to handle this exceptional case with no
        crash.

        * platform/gtk/PopupMenuGtk.cpp:
        (WebCore::PopupMenu::~PopupMenu):
        (WebCore::PopupMenu::menuUnmapped):

2009-06-06  Sam Weinig  <sam@webkit.org>

        Reviewed by Dan Bernstein.

        Fix for <rdar://problem/6930540>
        REGRESSION (r43797): Serif and fantasy font-family names are wrong in result of getComputedStyle

        Test: fast/css/font-family-builtins.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::identifierForFamily): Fix typo. Fantasy family should be
        -webkit-fantasy not, -webkit-serif.

2009-06-06  Sam Weinig  <sam@webkit.org>

        Reviewed by Brady Eidson.

        Fix for <rdar://problem/6936235>
        Need to support StorageEvent.storageArea to meet the Web Storage spec

        * storage/LocalStorageArea.cpp:
        (WebCore::LocalStorageArea::dispatchStorageEvent): Pass the localStorage for
        the frame being dispatched to.
        * storage/SessionStorageArea.cpp:
        (WebCore::SessionStorageArea::dispatchStorageEvent): Ditto, only for sessionStorage.

        * storage/StorageEvent.cpp:
        (WebCore::StorageEvent::StorageEvent):
        (WebCore::StorageEvent::initStorageEvent):
        * storage/StorageEvent.h:
        (WebCore::StorageEvent::create):
        (WebCore::StorageEvent::storageArea):
        * storage/StorageEvent.idl:
        Add storageArea member.

2009-06-05  Nikolas Zimmermann  <nikolas.zimmermann@torchmobile.com>

        Reviewed by Anders Carlsson.

        Fix WMLInputElement initialization code. Don't call initialize() on attach(), let
        WMLCardElement handle initialization once, after the document has been parsed.

        To keep layout tests working introduce a new function in Document.idl: initializeWMLPageState().
        WMLTestCase.js (the wml/ layout test framework) will use it to simulate a regular WML document,
        whose variable state gets initialized on WMLDocument::finishedParsing(). Force initialization
        of the WML variable state, right after the dynamically created elements have been inserted into the tree.

        * dom/Document.cpp:
        (WebCore::Document::initializeWMLPageState):
        * dom/Document.h:
        * dom/Document.idl:
        * wml/WMLCardElement.cpp:
        (WebCore::WMLCardElement::handleIntrinsicEventIfNeeded):
        * wml/WMLDocument.cpp:
        (WebCore::WMLDocument::finishedParsing):
        (WebCore::WMLDocument::initialize):
        * wml/WMLDocument.h:
        * wml/WMLInputElement.cpp:
        (WebCore::WMLInputElement::initialize):
        * wml/WMLInputElement.h:

2009-06-05  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Add ononline and onoffline attributes for the <body> element. 

        * html/HTMLAttributeNames.in: Added ononlineAttr and onofflineAttr.
        * html/HTMLBodyElement.cpp:
        (WebCore::HTMLBodyElement::parseMappedAttribute): Map ononlineAttr
        and onofflineAttr to window event listeners.

2009-06-05  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Add missing includes of config.h

        * platform/qt/QWebPopup.cpp:
        * platform/text/qt/TextBreakIteratorQt.cpp:

2009-06-05  Fumitoshi Ukai  <ukai@google.com>

        Reviewed by Dimitri Glazkov.

        https://bugs.webkit.org/show_bug.cgi?id=26215
        Try to fix the Chromium build.

        * platform/graphics/chromium/GlyphPageTreeNodeChromiumWin.cpp:
        (WebCore::fillBMPGlyphs):
        (WebCore::fillNonBMPGlyphs):

2009-06-05  Shinichiro Hamaji  <hamaji@chromium.org>

        Bug 26160: Compile fails in MacOSX when GNU fileutils are installed

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

        Reviewed by Alexey Proskuryakov.

        Use /bin/ln instead of ln for cases where this command is used with -h option.
        As this option is not supported by GNU fileutils, this change helps users 
        who have GNU fileutils in their PATH.

        * WebCore.xcodeproj/project.pbxproj:

2009-06-03  Ben Murdoch  <benm@google.com>

        <https://bugs.webkit.org/show_bug.cgi?id=25710> HTML5 Database stops executing transactions if the URL hash changes while a transaction is open and an XHR is in progress.

        Reviewed by Alexey Proskuryakov.

        Fix a bug that causes database transactions to fail if a history navigation to a hash fragment of the same document is made while resources (e.g. an XHR) are loading

        Test: storage/hash-change-with-xhr.html

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::stopLoading):
        * loader/DocumentLoader.h:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::stopLoading):
        (WebCore::FrameLoader::stopAllLoaders):
        * loader/FrameLoader.h:
        * loader/FrameLoaderTypes.h:
        (WebCore::):
        * page/Page.cpp:
        (WebCore::Page::goToItem):
        * WebCore.base.exp:

2009-06-03  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Make sure the correct config.h is included when shadowbuilding

        * WebCore.pro:

2009-06-05  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reviewed by Simon Hausmann.

        Fix Qt build after r44452

        * platform/network/qt/QNetworkReplyHandler.cpp:
        (WebCore::QNetworkReplyHandler::sendResponseIfNeeded):

2009-06-05  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Remove some dead code (MenuEventProxy)

        * WebCore.pro:
        * platform/ContextMenu.h:
        * platform/qt/ContextMenuQt.cpp:
        * platform/qt/MenuEventProxy.h: Removed.

2009-06-05  Xan Lopez  <xlopez@igalia.com>

        More build fixes.

        * platform/graphics/gtk/GlyphPageTreeNodePango.cpp:
        (WebCore::GlyphPage::fill):

2009-06-05  Xan Lopez  <xlopez@igalia.com>

        Fix the GTK+ build.

        * GNUmakefile.am:
        * platform/graphics/gtk/FontCacheGtk.cpp:
        (WebCore::FontCache::getFontDataForCharacters):
        * platform/graphics/gtk/GlyphPageTreeNodeGtk.cpp:
        (WebCore::GlyphPage::fill):

2009-06-05  Antti Koivisto  <antti@apple.com>

        Try to fix Windows (and possibly other platforms) build.

        Restore ResourceResponseBase::lastModifiedDate() and setLastModifiedDate() removed in previous commit.
        for now since PluginStream used on some platforms expects them and calculations differ from plain 
        Last-modified header value.
        
        Also include <wtf/MathExtras.h> to get isfinite().

        * platform/network/ResourceResponseBase.cpp:
        (WebCore::ResourceResponseBase::adopt):
        (WebCore::ResourceResponseBase::copyData):
        (WebCore::ResourceResponseBase::setLastModifiedDate):
        (WebCore::ResourceResponseBase::lastModifiedDate):
        * platform/network/ResourceResponseBase.h:
        * platform/network/cf/ResourceResponseCFNet.cpp:
        (WebCore::ResourceResponse::platformLazyInit):

2009-06-03  Antti Koivisto  <antti@apple.com>

        Reviewed by Dave Kilzer.

        https://bugs.webkit.org/show_bug.cgi?id=13128
        Safari not obeying cache header
        
        Implement RFC 2616 cache expiration calculations in WebKit instead of
        relying on the networking layer.

        * ForwardingHeaders/runtime/DateMath.h: Added.
        * WebCore.base.exp:
        * loader/Cache.cpp:
        (WebCore::Cache::revalidationSucceeded):
        * loader/CachedResource.cpp:
        (WebCore::CachedResource::CachedResource):
        (WebCore::CachedResource::isExpired):
        (WebCore::CachedResource::currentAge):
        (WebCore::CachedResource::freshnessLifetime):
        (WebCore::CachedResource::setResponse):
        (WebCore::CachedResource::updateResponseAfterRevalidation):
        (WebCore::CachedResource::mustRevalidate):
        * loader/CachedResource.h:
        * platform/network/ResourceResponseBase.cpp:
        (WebCore::ResourceResponseBase::ResourceResponseBase):
        (WebCore::ResourceResponseBase::adopt):
        (WebCore::ResourceResponseBase::copyData):
        (WebCore::ResourceResponseBase::setHTTPHeaderField):
        (WebCore::ResourceResponseBase::parseCacheControlDirectives):
        (WebCore::ResourceResponseBase::cacheControlContainsNoCache):
        (WebCore::ResourceResponseBase::cacheControlContainsMustRevalidate):
        (WebCore::ResourceResponseBase::cacheControlMaxAge):
        (WebCore::parseDateValueInHeader):
        (WebCore::ResourceResponseBase::date):
        (WebCore::ResourceResponseBase::age):
        (WebCore::ResourceResponseBase::expires):
        (WebCore::ResourceResponseBase::lastModified):
        (WebCore::ResourceResponseBase::isAttachment):
        (WebCore::ResourceResponseBase::compare):
        * platform/network/ResourceResponseBase.h:
        * platform/network/cf/ResourceResponseCFNet.cpp:
        (WebCore::ResourceResponse::platformLazyInit):
        * platform/network/mac/ResourceResponseMac.mm:
        (WebCore::ResourceResponse::platformLazyInit):

2009-06-04  Roland Steiner <rolandsteiner@google.com>

        Reviewed by Eric Seidel.

        Bug 26201: Remove superfluous 'if' statements in RenderTable::addChild
        https://bugs.webkit.org/show_bug.cgi?id=26201

        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::addChild): remove superfluous 'if' statements
       

2009-06-04  Roland Steiner <rolandsteiner@google.com>

        Reviewed by Eric Seidel.

        Bug 26202: add macros for primitive values to simplify CSSStyleSelector::applyProperty
        https://bugs.webkit.org/show_bug.cgi?id=26202

        * css/CSSStyleSelector.cpp: add HANDLE_INHERIT_AND_INITIAL_AND_PRIMITIVE[_WITH_VALUE] macros
        (WebCore::CSSStyleSelector::applyProperty): use new macros

2009-06-04  Roland Steiner <rolandsteiner@google.com>

        Reviewed by Eric Seidel

        Bug 26203: Move parsing of 'attr(X)' values to own method
        https://bugs.webkit.org/show_bug.cgi?id=26203

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseAttr): new method
        (WebCore::CSSParser::parseContent): use new parseAttr method
        * css/CSSParser.h:
        (WebCore::CSSParser::parseAttr): new method

2009-06-04  Roland Steiner <rolandsteiner@google.com>

        Reviewed by Eric Seidel.

        Bug 26205: RenderTableSection::addChild : correct comment
        https://bugs.webkit.org/show_bug.cgi?id=26205

        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::addChild): correct comment

2009-06-04  Roland Steiner <rolandsteiner@google.com>

        Reviewed by Eric Seidel.

        Bug 26204: RenderBlock : simplify handleSpecialChild, comment correction
        https://bugs.webkit.org/show_bug.cgi?id=26204

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::handleSpecialChild): simplify usage
        (WebCore::RenderBlock::handlePositionedChild): simplify usage
        (WebCore::RenderBlock::handleFloatingChild): simplify usage
        (WebCore::RenderBlock::handleRunInChild): simplify usage
        (WebCore::RenderBlock::layoutBlock): correct comment
        (WebCore::RenderBlock::layoutBlockChildren): simplify loop, change call to handleSpecialChild
        * rendering/RenderBlock.h: 
        (WebCore::RenderBlock::handleSpecialChild): change signature
        (WebCore::RenderBlock::handlePositionedChild): change signature
        (WebCore::RenderBlock::handleFloatingChild): change signature
        (WebCore::RenderBlock::handleRunInChild): change signature

2009-06-04  Dan Bernstein  <mitz@apple.com>

        - retry to fix the Tiger build

        * platform/graphics/mac/SimpleFontDataMac.mm:
        (WebCore::initFontData):

2009-06-04  Dan Bernstein  <mitz@apple.com>

        - try to fix the Tiger build

        * platform/graphics/SimpleFontData.h:

2009-06-04  Dan Bernstein  <mitz@apple.com>

        - try to fix the Leopard and Tiger builds

        * platform/graphics/SimpleFontData.h:

2009-06-04  Dan Bernstein  <mitz@apple.com>

        - try to fix the Windows build

        * platform/graphics/win/UniscribeController.cpp:
        (WebCore::UniscribeController::shapeAndPlaceItem):

2009-06-04  Dan Bernstein  <mitz@apple.com>

        Reviewed by Sam Weinig.

        - make SimpleFontData's data members private
        - rename SimpleFontData's m_font member to m_platformData

        * platform/graphics/Font.h:
        (WebCore::Font::spaceWidth):
        * platform/graphics/SimpleFontData.cpp:
        (WebCore::SimpleFontData::SimpleFontData):
        * platform/graphics/SimpleFontData.h:
        (WebCore::SimpleFontData::platformData):
        (WebCore::SimpleFontData::spaceWidth):
        (WebCore::SimpleFontData::adjustedSpaceWidth):
        (WebCore::SimpleFontData::syntheticBoldOffset):
        (WebCore::SimpleFontData::spaceGlyph):
        (WebCore::SimpleFontData::getNSFont):
        (WebCore::SimpleFontData::getQtFont):
        (WebCore::SimpleFontData::getWxFont):
        * platform/graphics/WidthIterator.cpp:
        (WebCore::WidthIterator::advance):
        * platform/graphics/cairo/FontCairo.cpp:
        (WebCore::Font::drawGlyphs):
        * platform/graphics/chromium/SimpleFontDataChromiumWin.cpp:
        (WebCore::SimpleFontData::platformInit):
        (WebCore::SimpleFontData::smallCapsFontData):
        (WebCore::SimpleFontData::determinePitch):
        (WebCore::SimpleFontData::platformWidthForGlyph):
        * platform/graphics/chromium/SimpleFontDataLinux.cpp:
        (WebCore::SimpleFontData::platformInit):
        (WebCore::SimpleFontData::smallCapsFontData):
        (WebCore::SimpleFontData::containsCharacters):
        (WebCore::SimpleFontData::platformWidthForGlyph):
        * platform/graphics/gtk/FontGtk.cpp:
        (WebCore::setPangoAttributes):
        * platform/graphics/gtk/SimpleFontDataGtk.cpp:
        (WebCore::SimpleFontData::platformInit):
        (WebCore::SimpleFontData::containsCharacters):
        (WebCore::SimpleFontData::determinePitch):
        (WebCore::SimpleFontData::platformWidthForGlyph):
        (WebCore::SimpleFontData::setFont):
        * platform/graphics/gtk/SimpleFontDataPango.cpp:
        (WebCore::SimpleFontData::platformInit):
        (WebCore::SimpleFontData::containsCharacters):
        (WebCore::SimpleFontData::determinePitch):
        (WebCore::SimpleFontData::platformWidthForGlyph):
        (WebCore::SimpleFontData::setFont):
        * platform/graphics/mac/CoreTextController.cpp:
        (WebCore::CoreTextController::adjustGlyphsAndAdvances):
        * platform/graphics/mac/FontMac.mm:
        (WebCore::Font::drawGlyphs):
        * platform/graphics/mac/FontMacATSUI.mm:
        (WebCore::initializeATSUStyle):
        (WebCore::overrideLayoutOperation):
        (WebCore::ATSULayoutParameters::initialize):
        * platform/graphics/mac/SimpleFontDataMac.mm:
        (WebCore::initFontData):
        (WebCore::SimpleFontData::platformInit):
        (WebCore::SimpleFontData::platformCharWidthInit):
        (WebCore::SimpleFontData::smallCapsFontData):
        (WebCore::SimpleFontData::containsCharacters):
        (WebCore::SimpleFontData::determinePitch):
        (WebCore::SimpleFontData::platformWidthForGlyph):
        (WebCore::SimpleFontData::checkShapesArabic):
        (WebCore::SimpleFontData::getCTFont):
        * platform/graphics/qt/SimpleFontDataQt.cpp:
        (WebCore::SimpleFontData::determinePitch):
        (WebCore::SimpleFontData::platformInit):
        (WebCore::SimpleFontData::platformCharWidthInit):
        * platform/graphics/win/FontCGWin.cpp:
        (WebCore::drawGDIGlyphs):
        (WebCore::Font::drawGlyphs):
        * platform/graphics/win/SimpleFontDataCGWin.cpp:
        (WebCore::SimpleFontData::platformInit):
        (WebCore::SimpleFontData::platformCharWidthInit):
        (WebCore::SimpleFontData::platformWidthForGlyph):
        * platform/graphics/win/SimpleFontDataCairoWin.cpp:
        (WebCore::SimpleFontData::platformInit):
        (WebCore::SimpleFontData::platformDestroy):
        (WebCore::SimpleFontData::platformWidthForGlyph):
        (WebCore::SimpleFontData::setFont):
        * platform/graphics/win/SimpleFontDataWin.cpp:
        (WebCore::SimpleFontData::initGDIFont):
        (WebCore::SimpleFontData::smallCapsFontData):
        (WebCore::SimpleFontData::containsCharacters):
        (WebCore::SimpleFontData::determinePitch):
        (WebCore::SimpleFontData::widthForGDIGlyph):
        (WebCore::SimpleFontData::scriptFontProperties):
        * platform/graphics/wx/SimpleFontDataWx.cpp:
        (WebCore::SimpleFontData::platformInit):
        (WebCore::SimpleFontData::determinePitch):
        (WebCore::SimpleFontData::platformWidthForGlyph):

2009-06-04  Paul Godavari  <paul@chromium.org>

        Reviewed by Eric Seidel.

        Initialize the width of PopupMenuListBox properly for Mac Chromium.

        Added a test that works only with this patch applied. The test is
        a manual one, since the hit testing infrastructure in the layout
        tests sends keyboard and mouse events to the main window and not
        the cocoa control that implements the popup up, which means we can't
        select items from the popup up.

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


        * manual-tests/select-narrow-width.html: Added.
        * platform/chromium/PopupMenuChromium.cpp:
        (WebCore::PopupListBox::PopupListBox):
        (WebCore::PopupContainer::showExternal):

2009-06-04  Brent Fulgham  <bfulgham@webkit.org>

        Unreviewed Windows build correction.

        * WebCore.vcproj/WebCore.vcproj: Add missing 'ReplaceNodeWithSpanCommand.cpp'
          and 'ReplaceNodeWithSpanCommand.h'

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

        Reviewed by Justin Garcia.

        Make sure execCommand("bold") on <b style="text-decoration: underline">test</b>
        only removes the bold and not the underline.
        https://bugs.webkit.org/show_bug.cgi?id=23496

        Test: editing/execCommand/convert-style-elements-to-spans.html

        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSStyleDeclaration.h:
        (WebCore::CSSStyleDeclaration::isEmpty):
        * dom/NamedAttrMap.h:
        (WebCore::NamedAttrMap::isEmpty):
        * editing/ApplyStyleCommand.cpp:
        (WebCore::isUnstyledStyleSpan):
        (WebCore::isSpanWithoutAttributesOrUnstyleStyleSpan):
        (WebCore::ApplyStyleCommand::applyBlockStyle):
        (WebCore::ApplyStyleCommand::applyRelativeFontStyleChange):
        (WebCore::ApplyStyleCommand::implicitlyStyledElementShouldBeRemovedWhenApplyingStyle):
        (WebCore::ApplyStyleCommand::replaceWithSpanOrRemoveIfWithoutAttributes):
        (WebCore::ApplyStyleCommand::removeCSSStyle):
        (WebCore::ApplyStyleCommand::applyTextDecorationStyle):
        (WebCore::ApplyStyleCommand::removeInlineStyle):
        (WebCore::ApplyStyleCommand::addInlineStyleIfNeeded):
        * editing/ApplyStyleCommand.h:
        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::replaceNodeWithSpanPreservingChildrenAndAttributes):
        * editing/CompositeEditCommand.h:
        * editing/RemoveNodePreservingChildrenCommand.cpp:
        (WebCore::RemoveNodePreservingChildrenCommand::RemoveNodePreservingChildrenCommand):
        * editing/ReplaceNodeWithSpanCommand.cpp: Added.
        (WebCore::ReplaceNodeWithSpanCommand::ReplaceNodeWithSpanCommand):
        (WebCore::swapInNodePreservingAttributesAndChildren):
        (WebCore::ReplaceNodeWithSpanCommand::doApply):
        (WebCore::ReplaceNodeWithSpanCommand::doUnapply):
        * editing/ReplaceNodeWithSpanCommand.h: Added.
        (WebCore::ReplaceNodeWithSpanCommand::create):

2009-06-04  Brent Fulgham  <bfulgham@webkit.org>

        Unreviewed build fix for Windows Cairo target.

        Add missing post-build command to copy history/cf contents
        to output directory.

        * WebCore.vcproj/WebCore.vcproj: Update Debug_Cairo and Release_Cairo
          target post-build steps with copy commands.

2009-06-04  Pierre d'Herbemont  <pdherbemont@apple.com>

        Reviewed by Simon Fraser.

        <rdar://problem/6854695> Movie controller thumb fails to scale with full page zoom
        
        Account for zoom level when drawing media controller thumb on Windows.

        * rendering/RenderMediaControls.cpp:
        (WebCore::RenderMediaControls::adjustMediaSliderThumbSize):

2009-06-04  David Hyatt  <hyatt@apple.com>

        Reviewed by Sam Weinig.

        Move DOM window focus/blur out of SelectionController and into FocusController.  Make sure it
        fires on the focused frame when the page activation state changes also.  This is covered by an existing
        layout test (albeit badly).  I have modified the test to be correct.

        * editing/SelectionController.cpp:
        (WebCore::SelectionController::setFocused):
        * page/FocusController.cpp:
        (WebCore::FocusController::setFocusedFrame):
        (WebCore::FocusController::setActive):

2009-06-04  Albert J. Wong  <ajwong@chromium.org>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=26148
        Adding in empty files to stage the extract of RenderThemeChromiumSkia
        from RenderThemeChromiumLinux and RenderThemeChromiumWindows.

        * rendering/RenderThemeChromiumSkia.cpp: Added.
        * rendering/RenderThemeChromiumSkia.h: Added.

2009-06-04  Andrei Popescu <andreip@google.com>

        Reviewed by Alexey Proskuryakov.

        https://bugs.webkit.org/show_bug.cgi?id=25562
        Potential crash after ApplicationCacheStorage::storeNewestCache() fails

              Fix the crash by checking the return value of cacheStorage().storeNewestCache(this)
              in WebCore::ApplicationCacheGroup::checkIfLoadIsComplete. If storeNewestCache failed,
              we run the cache failure steps:

        1. Fire the error events to all pending master entries, as well any other cache hosts
           currently associated with a cache in this group.
        2. Disassociate the pending master entries from the failed new cache.
        3. Reinstate the old "newest cache", if there was one.

        We also introduce two other changes:

        1. a mechanism to rollback storageID changes to the in-memory resource
           objects when the storing of an ApplicationCache object fails.

        2. defer removing the pending master entries from the list of pending master entries
           until the entire load is complete. This matches the HTML 5 spec better. To track
           if the load is complete we now introduce a counter for those pending master entries
           that haven't yet finshed downloading.

        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::ApplicationCacheGroup::ApplicationCacheGroup): initializes the new counter to 0
        (WebCore::ApplicationCacheGroup::selectCache): increments the counter when a new pending
        master entry is added.
        (WebCore::ApplicationCacheGroup::finishedLoadingMainResource): decrements the counter
        instead of removing the pending master entry.
        (WebCore::ApplicationCacheGroup::failedLoadingMainResource): decrements the counter
        instead of removing the pending master entry.
        (WebCore::ApplicationCacheGroup::setNewestCache): removes an assertion that no longer
        holds true. In particular, the newest cache is not necessarily new anymore. We can
        set an old cache as the new cache. This can happen if we failed to store a newly
        downloaded cache to the database and we are now reinstating the former newest cache.
        (WebCore::ApplicationCacheGroup::manifestNotFound): resets the counter to 0.
        (WebCore::ApplicationCacheGroup::checkIfLoadIsComplete): check if the loading is complete
        based on the counter instead of the list of pending master entries. Empty the list of
        master entries if the load is complete.
        * loader/appcache/ApplicationCacheGroup.h: add the new counter.
        * loader/appcache/ApplicationCacheStorage.cpp: introduce the journaling mechanism for
        in-memory resource objects.
        (WebCore::ResourceStorageIDJournal::~ResourceStorageIDJournal):
        (WebCore::ResourceStorageIDJournal::add):
        (WebCore::ResourceStorageIDJournal::commit):
        (WebCore::ResourceStorageIDJournal::Record::Record):
        (WebCore::ResourceStorageIDJournal::Record::restore):
        (WebCore::ApplicationCacheStorage::store): log the changes to the in-memory resource
        objects.
        (WebCore::ApplicationCacheStorage::storeNewestCache): create the journal object.
        * loader/appcache/ApplicationCacheStorage.h:  modify the signature of
        bool store(ApplicationCache*) to add a pointer to the logger object used to
        trace the changes to the storageID of the resource objects.

2009-06-04  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=26154
        Allow underscores in the hostnames we parse out of databaseIdentifiers.
        This code is used for HTML 5 database support.

        * page/SecurityOrigin.cpp:
        (WebCore::SecurityOrigin::createFromDatabaseIdentifier):

2009-06-04  Mihnea Ovidenie  <mihnea@adobe.com>

        Reviewed by Darin Adler.

        Bug 26084: Multiple missing images in webkit-mask-image prevent rendering
        https://bugs.webkit.org/show_bug.cgi?id=26084

        When painting multiple images, make sure that at least one image is valid before pushing a transparency layer.

        Added a manual test.

        * manual-tests/mask-composite-missing-images.html: Added.
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::paintMaskImages):

2009-06-04  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=26180
        Add a fast path for SecurityOrigin::equal. If "other == this" (where
        other is the other security origin), then we really don't need to do
        all the other (expensive) comparisons. We know it's equal.

        * page/SecurityOrigin.cpp:
        (WebCore::SecurityOrigin::equal):

2009-06-03  David Hyatt  <hyatt@apple.com>

        Reviewed by Sam Weinig.

        Improvements in how selection behaves with focus/activation and a reversion back to using isActive
        in the scrollbar theme code to remove a Chromium ifdef.

        * editing/SelectionController.cpp:
        (WebCore::SelectionController::SelectionController):
        Make the controller set its focused state correctly upon initial creation.

        (WebCore::SelectionController::setSelection):
        Make selection willing to shift the focus node if the selection is focused even if the
        selection is not active.  Whether or not the Page is active is irrelevant to focus changes.

        (WebCore::SelectionController::setFocused):
        * editing/SelectionController.h:
        (WebCore::SelectionController::isFocused):
        Add a new isFocused() method so that code can check if the Selection is focused without caring
        about the active state.

        * page/Frame.cpp:
        (WebCore::Frame::setFocusedNodeIfNeeded):
        Allow focus shifts even when the selection is not active.

        * platform/mac/ScrollbarThemeMac.mm:
        (WebCore::ScrollbarThemeMac::paint):
        Revert Dan's change to directly talk to AppKit for checking active state.  Now that the WebCore isActive
        method works, ditch the Chromium-specific #ifdef and go back to the original code.

2009-06-04  Pierre d'Herbemont  <pdherbemont@apple.com>

        Reviewed by Darin Adler.

        Test: media/before-load-member-access.html
        
        https://bugs.webkit.org/show_bug.cgi?id=26081

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::played): Ensure that if m_playedTimeRanges,
        is not initialized we return a valid range, and don't attempt to use it.

2009-06-03  Kenneth Rohde Christiansen  <kenneth.christiansen@openbossa.org>

        Reviewed by Simon Hausmann.

        Implement a way to invalidate the FontCache used by the Qt port.

        * platform/graphics/qt/FontCacheQt.cpp:
        (WebCore::FontCache::invalidate):

2009-06-04  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Ariya Hidayat.

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

        [Qt] Single-threaded QtWebKit configuration

        Turn off Database, DOM storage, icon database and Web Workers support
        when ENABLE_SINGLE_THREADED is turned on.

        Set SQLITE_THREADSAFE to false to turn off SQLite mutexes
        when ENABLE_SINGLE_THREADED is turned on.

        * WebCore.pro:

2009-06-03  Dan Bernstein  <mitz@apple.com>

        Reviewed by Sam Weinig.

        - add some assertions that Font methods are used on the main thread

        * platform/graphics/Font.cpp:
        (WebCore::Font::setShouldUseSmoothing):
        * platform/graphics/Font.h:
        (WebCore::Font::primaryFont):
        * platform/graphics/FontFastPath.cpp:
        (WebCore::Font::glyphDataForCharacter):

2009-06-03  Dan Bernstein  <mitz@apple.com>

        - Windows build fix

        Rolled out apparently-accidental changes to config.h from r44398. These
        were not part of the patch as reviewed.

        * config.h:

2009-06-03  Dmitry Titov  <dimich@chromium.org>

        Not reviewed, Chromium build fix.

        https://bugs.webkit.org/show_bug.cgi?id=26177
        Reverting 'private' to 'protected' on 2 classes.
        Chromium glue layer (not yet in Webkit tree) relies on ability to derive
        Chromium-specific platform classes and access the data members.
        See bug for more details.

        * platform/PlatformMouseEvent.h:
        * platform/PlatformWheelEvent.h:

2009-06-03  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Simon Fraser <simonfr@apple.com>.

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

        This corrects an error when destroying an animation
        or transition where endAnimation was never getting
        called and therefore the hardware animation was never
        getting removed.

        This includes a manual-test since it's really impossible
        to make a meaningful automatic test for an animation
        bug like this.

        This has no effect unless accelerated compositing is 
        enabled.

        * manual-tests/interrupted-compound-transform.html: Added.
        * page/animation/ImplicitAnimation.cpp:
        (WebCore::ImplicitAnimation::~ImplicitAnimation):
        * page/animation/KeyframeAnimation.cpp:
        (WebCore::KeyframeAnimation::~KeyframeAnimation):

2009-06-03  Adam Langley  <agl@google.com>

        Reviewed by Eric Seidel.

        Make the scrollbar thumb size twice the width for Chromium Linux. This
        matches Firefox on Linux.

        This will need layout test pixel results to be rebaselined in the
        Chromium tree.

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

        * platform/chromium/ScrollbarThemeChromiumLinux.cpp:
        (WebCore::ScrollbarThemeChromiumLinux::minimumThumbLength):
        * platform/chromium/ScrollbarThemeChromiumLinux.h:

2009-06-03  Adam Langley  <agl@google.com>

        Reviewed by Eric Seidel.

        Change Chromium scrollbar theme code to use different classes on
        Windows and Linux rather than suppling symbols. The ScrollbarTheme
        class is already using virtual dispatch, so there's no reason not to.

        This should not affect any layout tests.

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

        * platform/chromium/ScrollbarThemeChromium.cpp:
        * platform/chromium/ScrollbarThemeChromium.h:
        * platform/chromium/ScrollbarThemeChromiumLinux.cpp:
        (WebCore::ScrollbarTheme::nativeTheme):
        (WebCore::ScrollbarThemeChromiumLinux::scrollbarThickness):
        (WebCore::ScrollbarThemeChromiumLinux::paintTrackPiece):
        (WebCore::ScrollbarThemeChromiumLinux::paintButton):
        (WebCore::ScrollbarThemeChromiumLinux::paintThumb):
        (WebCore::ScrollbarThemeChromiumLinux::buttonSize):
        * platform/chromium/ScrollbarThemeChromiumLinux.h: Added.
        * platform/chromium/ScrollbarThemeChromiumWin.cpp:
        (WebCore::ScrollbarTheme::nativeTheme):
        (WebCore::ScrollbarThemeChromiumWin::scrollbarThickness):
        (WebCore::ScrollbarThemeChromiumWin::invalidateOnMouseEnterExit):
        (WebCore::ScrollbarThemeChromiumWin::shouldSnapBackToDragOrigin):
        (WebCore::ScrollbarThemeChromiumWin::paintTrackPiece):
        (WebCore::ScrollbarThemeChromiumWin::paintButton):
        (WebCore::ScrollbarThemeChromiumWin::paintThumb):
        (WebCore::ScrollbarThemeChromiumWin::getThemeState):
        (WebCore::ScrollbarThemeChromiumWin::getThemeArrowState):
        (WebCore::ScrollbarThemeChromiumWin::getClassicThemeState):
        (WebCore::ScrollbarThemeChromiumWin::buttonSize):
        * platform/chromium/ScrollbarThemeChromiumWin.h: Added.

2009-06-03  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Enabling debugger requires that Scripts panel is already attached to the
        render tree. The reason is that recompile events result in script sources
        being added into the source frames. Prior to the global options introduced,
        debugger was enabled from the Scripts panel, so that it was guaranteed to
        exist. The InspectorController::enableDebugger API calls with no inspector
        frontend showing were failing though.

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

        * WebCore.base.exp:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::setWindowVisible):
        (WebCore::InspectorController::scriptObjectReady):
        (WebCore::InspectorController::enableDebuggerFromFrontend):
        (WebCore::InspectorController::enableDebugger):
        * inspector/InspectorController.h:
        * inspector/InspectorController.idl:
        * inspector/InspectorFrontend.cpp:
        (WebCore::InspectorFrontend::attachDebuggerWhenShown):
        * inspector/InspectorFrontend.h:
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype.show):
        (WebInspector.ScriptsPanel.prototype.attachDebuggerWhenShown):
        * inspector/front-end/inspector.js:
        (WebInspector.attachDebuggerWhenShown):

2009-06-03  Dan Bernstein  <mitz@apple.com>

        Reviewed by Anders Carlsson.

        - fix a regression from the previous patch

        * platform/graphics/Font.cpp: Initialize shouldUseFontSmoothing to true.

2009-06-03  Dan Bernstein  <mitz@apple.com>

        Reviewed by Anders Carlsson.

        - eliminate WebCoreTextRenderer

        * WebCore.base.exp: Updated.
        * WebCore.xcodeproj/project.pbxproj: Removed WebCoreTextRenderer.{h,mm}
            and promoted WebFontCache.h to private.
        * platform/graphics/Font.cpp:
        (WebCore::Font::setShouldUseSmoothing): Added this static setter for
            a new file-static boolean.
        (WebCore::Font::shouldUseSmoothing): Added this static getter.
        * platform/graphics/Font.h: Decleared setShouldUseSmoothing() and
            shouldUseSmoothing().
        * platform/graphics/mac/FontMac.mm:
        (WebCore::Font::drawGlyphs): Use Font::shouldUseSmoothing() instead of
        WebCoreShouldUseFontSmoothing().
        * platform/graphics/mac/WebLayer.mm: Removed unneeded #import.
        * platform/mac/WebCoreTextRenderer.h: Removed.
        * platform/mac/WebCoreTextRenderer.mm: Removed.

2009-06-03  David Levin  <levin@chromium.org>

        Reviewed by Dimitri Glazkov.

        v8's ScriptController::evaluate should protect the Frame like the jsc version.
        https://bugs.webkit.org/show_bug.cgi?id=26172

        This change is simply copying protections done for Frame in the method
        WebCore::ScriptController::evaluate in the file js/ScriptController.cpp.

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

2009-06-03  Dan Bernstein  <mitz@apple.com>

        Reviewed by John Sullivan.

        - fix <rdar://problem/6841120> Use CTFontManager notifications instead
          of ATS notifications

        * platform/graphics/FontCache.h: Made it an error to destroy a
        FontCache instance.
        * platform/graphics/mac/FontCacheMac.mm:
        (WebCore::fontCacheRegisteredFontsChangedNotificationCallback): Added
        this notification callback for the
        kCTFontManagerRegisteredFontsChangedNotification, which calls
        invalidate().
        (WebCore::FontCache::platformInit): Register for
        kCTFontManagerRegisteredFontsChangedNotification.

2009-06-03  Kevin Watters  <kevinwatters@gmail.com>

        Reviewed by Kevin Ollivier.

        Use CGContextShowGlyphsWithAdvances to get more accurate text rendering on Mac.
        
        https://bugs.webkit.org/show_bug.cgi?id=26161

        * platform/wx/wxcode/mac/carbon/non-kerned-drawing.cpp:
        (WebCore::drawTextWithSpacing):

2009-06-03  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Reorder ResourcesPanel components initialization to unfreeze resource list scroller.

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

        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourcesPanel):

2009-06-03  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        - Fix for crash (preceded by assertion) in InspectorController::didCommitLoad
          when reloading or navigating with the Inspector open.
        - Fix for Inspector's Elements panel being empty when Inspector first appears.

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

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::scriptObjectReady):
        (WebCore::InspectorController::didLoadResourceFromMemoryCache):
        (WebCore::InspectorController::identifierForInitialRequest):
        (WebCore::InspectorController::ensureResourceTrackingSettingsLoaded):
        * inspector/InspectorController.h:

2009-06-03  Adam Roben  <aroben@apple.com>

        Windows build fix after r44379

        * svg/graphics/SVGImage.cpp: Move EmptyClients.h back down below the
        other #includes to fix a compiler warning on Windows.

2009-06-02  Kenneth Rohde Christiansen  <kenneth.christiansen@openbossa.org>

        Reviewed by Simon Hausmann.

        Add workaround for crash in Linux Flash Player when hosted by
        another toolkit than GTK+. Bug fixed at the Flash Player bugzilla,
        issue (FP-2140).

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

2009-06-01  Kenneth Rohde Christiansen  <kenneth.christiansen@openbossa.org>

        Reviewed by Simon Hausmann.

        Refactor the Qt plugin code to use NPP_SetWindow correctly,
        to make resizing of plugins work.

        Attention was paid to make sure that the windowed plugins scroll
        synchronized with the page view. A manual test has been added.

        * manual-tests/qt/plugin-iframe.html: Added.
        * plugins/PluginView.cpp:
        (WebCore::PluginView::setFrameRect):
        (WebCore::PluginView::frameRectsChanged):
        * plugins/PluginView.h:
        * plugins/qt/PluginContainerQt.cpp:
        (PluginContainerQt::PluginContainerQt):
        * plugins/qt/PluginContainerQt.h:
        * plugins/qt/PluginPackageQt.cpp:
        (WebCore::PluginPackage::load):
        * plugins/qt/PluginViewQt.cpp:
        (WebCore::PluginView::updatePluginWidget):
        (WebCore::PluginView::paint):
        (WebCore::PluginView::setParent):
        (WebCore::PluginView::setNPWindowRect):
        (WebCore::PluginView::setNPWindowIfNeeded):
        (WebCore::PluginView::handlePostReadFile):
        (WebCore::PluginView::getValue):
        (WebCore::PluginView::invalidateRect):
        (WebCore::PluginView::init):

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

        Reviewed by David Hyatt.

        Bug 26112: viewless WebKit -- make events work
        https://bugs.webkit.org/show_bug.cgi?id=26112

        The main fix here is to make mouse and wheel event coordinates in the coordinate
        system of the top level NSView rather than the NSWindow when in the viewless mode.
        This is the design Hyatt chose, but the event part of it wasn't done yet.

        Also fix FrameView to do normal reference counting instead of a strange model with
        an explicit deref near creation time.

        * WebCore.base.exp: Updated.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::eventLoopHandleMouseUp): Moved this function into the file
        to reduce conditionals in the header.
        (WebCore::EventHandler::eventLoopHandleMouseDragged): Ditto.

        * page/EventHandler.h: Reduced includes. Fixed formatting of Objective-C types.
        Made currentNSEvent a static member function. Added sendContextMenuEvent and
        eventMayStartDrag functions that takes NSEvent * so the conversion to PlatformMouseEvent
        can be done here rather than in WebKit. Reduced #if by making eventLoopHandleMouseUp and
        eventLoopHandleMouseDragged unconditional.

        * page/Frame.cpp:
        (WebCore::Frame::setView): Made this take a PassRefPtr since it takes ownership.
        (WebCore::Frame::createView): Changed to use RefPtr and FrameView::create and remove
        the explicit deref.

        * page/Frame.h: Changed setView to take a PassRefPtr.

        * page/FrameTree.cpp: Added newly-needed include.

        * page/FrameView.cpp:
        (WebCore::FrameView::FrameView): Got rid of one of the two constructors, and removed
        the initialization of m_refCount and call to show from the reamining one.
        (WebCore::FrameView::create): Added two create functions that do what the two
        constructors did before, except that they return a PassRefPtr to make sure the
        reference counting is handled correctly.
        (WebCore::FrameView::~FrameView): Removed assertion from when FrameView implemented
        its own reference counting.

        * page/FrameView.h: Inherit from RefCounted for reference counting. Made the
        constructor private and added create functions. Got rid of the hand-implemented
        reference counting in this class.

        * page/mac/EventHandlerMac.mm:
        (WebCore::currentNSEventSlot): Renamed currentEvent to currentNSEventSlot to
        make it more clear how it relates to currentNSEvent.
        (WebCore::EventHandler::currentNSEvent): Updated.
        (WebCore::CurrentEventScope::CurrentEventScope): Added. Use to set/reset the
        current event in a foolproof way.
        (WebCore::CurrentEventScope::~CurrentEventScope): Ditto.
        (WebCore::EventHandler::wheelEvent): Use CurrentEventScope. Pass the platform
        window in when constructing the PlatformWheelEvent.
        (WebCore::EventHandler::keyEvent): Use CurrentEventScope.
        (WebCore::lastEventIsMouseUp): Use currentNSEvent.
        (WebCore::EventHandler::passMouseDownEventToWidget): Ditto.
        (WebCore::EventHandler::eventLoopHandleMouseDragged): Ditto.
        (WebCore::EventHandler::eventLoopHandleMouseUp): Ditto.
        (WebCore::EventHandler::passSubframeEventToSubframe): Use
        currentPlatformMouseEvent to get a mouse event that has the appropriate
        platform window passed to create it.
        (WebCore::EventHandler::passWheelEventToWidget): Ditto.
        (WebCore::EventHandler::mouseDown): Ditto.
        (WebCore::EventHandler::mouseDragged): Ditto.
        (WebCore::EventHandler::mouseUp): Ditto.
        (WebCore::EventHandler::mouseMoved): Ditto.
        (WebCore::EventHandler::currentPlatformMouseEvent): Added. Passes the
        platform window that's now needed to create a PlatformMouseEvent.
        (WebCore::EventHandler::sendContextMenuEvent): Added.
        (WebCore::EventHandler::eventMayStartDrag): Added.

        * platform/HostWindow.h: Removed unneeded includes and constructor definition.

        * platform/PlatformMouseEvent.h: Sorted things in alphabetical order.
        Changed Mac constructor to take a windowView as well as the event. This is
        needed in viewless mode, since the "window" is actually an NSView, so the
        event has to know which view to compute the coordinates with. Made the
        same change to pointForEvent.
        * platform/PlatformWheelEvent.h: Ditto.

        * platform/mac/PlatformMouseEventMac.mm:
        (WebCore::pointForEvent): Convert point from window coordinates to view
        coordinates if a windowView is passed in. This is used in viewless mode.
        (WebCore::PlatformMouseEvent::PlatformMouseEvent): Ditto.
        * platform/mac/WheelEventMac.mm:
        (WebCore::PlatformWheelEvent::PlatformWheelEvent): Ditto.

        * platform/mac/WidgetMac.mm:
        (WebCore::Widget::convertFromContainingWindow): Fixed case where there
        is no platform widget and no parent. Before it would yield unpredictable
        results because of dispatching to a nil object and returning a structure.
        Now it returns the point without changing coordinates at all, which is what
        we need for this case in viewless mode.

        * rendering/RenderApplet.cpp: Removed unneeded includes.
        (WebCore::RenderApplet::intrinsicSize): Use widget function.
        (WebCore::RenderApplet::createWidgetIfNecessary): Ditto.

        * rendering/RenderApplet.h: Make more things private. Get rid of unneeded
        explicit destructor.

        * rendering/RenderFrame.cpp: Removed unneeded includes.
        (WebCore::RenderFrame::edgeInfo): Updated to use node function so header
        doesn't have to define element function.
        (WebCore::RenderFrame::viewCleared): Ditto. Also changed to use widget
        function.

        * rendering/RenderFrame.h: Removed unneeded includes. Made some things
        private. Got rid of element function.

        * rendering/RenderPart.cpp: Removed unneeded includes.
        (WebCore::RenderPart::~RenderPart): Changed to use clearWidget function.
        (WebCore::RenderPart::setWidget): Changed to use widget function.
        (WebCore::RenderPart::deleteWidget): Changed to use passed-in widget.
        This is now only called by the clearWidget function.

        * rendering/RenderPart.h: Removed unneeded forward declarations.
        Made more functions private. Updated deleteWidget to take widget argument.

        * rendering/RenderPartObject.cpp:
        (WebCore::RenderPartObject::~RenderPartObject): use frameView function
        instead of getting at m_view directly.
        (WebCore::RenderPartObject::updateWidget): Ditto.
        (WebCore::RenderPartObject::layout): Ditto. Same for widget and m_widget.
        (WebCore::RenderPartObject::viewCleared): Ditto.

        * rendering/RenderPartObject.h: Made some functions private.

        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::RenderWidget): Initialize m_frameView with
        construction syntax instead of assignment.
        (WebCore::RenderWidget::destroy): Updated for name change of m_view
        to m_frameView.
        (WebCore::RenderWidget::~RenderWidget): Use clearWidget to delete
        the widget.
        (WebCore::RenderWidget::setWidget): Use clearWidget.
        (WebCore::RenderWidget::paint): Updated for name change of m_view
        to m_frameView.
        (WebCore::RenderWidget::deleteWidget): Changed to use passed-in widget.

        * rendering/RenderWidget.h: Made many functions protected, others
        private and made all data members private.

        * svg/animation/SMILTime.h: Removed unhelpful max and min functions. These
        just do what std::max and std::min will already do automatically for this
        type, so they are not helpful.

        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::SVGImage): Removed unneeded initial values for types
        that initialize to zero without anything explicit.
        (WebCore::SVGImage::~SVGImage): Update since m_frame and m_frameView are
        no longer stored.
        (WebCore::SVGImage::setContainerSize): Ditto.
        (WebCore::SVGImage::usesContainerSize): Ditto.
        (WebCore::SVGImage::size): Ditto.
        (WebCore::SVGImage::hasRelativeWidth): Ditto.
        (WebCore::SVGImage::hasRelativeHeight): Ditto.
        (WebCore::SVGImage::draw): Ditto.
        (WebCore::SVGImage::nativeImageForCurrentFrame): Ditto.
        (WebCore::SVGImage::dataChanged): Ditto.

        * svg/graphics/SVGImage.h: Removed unneeded includes and unneeded data
        members m_document, m_frame, m_frameView, and m_minSize.

2009-06-02  Adam Langley  <agl@google.com>

        Reviewed by Eric Seidel.

        The previous code was assuming that we'll be painting buttons on the scrollbar
        which isn't true on Linux. To reproduce, resize a page with scrollbars until
        they are less than two widths high.

        This will need pixel test baselines to be updated in the Chromium tree.

        * platform/chromium/ScrollbarThemeChromium.cpp: move this function...
        * platform/chromium/ScrollbarThemeChromiumWin.cpp:
        (WebCore::ScrollbarThemeChromium::trackRect): ... to here
        * platform/chromium/ScrollbarThemeChromiumLinux.cpp:
        (WebCore::ScrollbarThemeChromium::trackRect): add an alternative which
        doesn't remove the track when the scrollbar is less than two widths
        high.

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

        Reviewed by Anders Carlsson.

        Remove workaround that was added to address <rdar://problem/5488678> as it no longer affects our Tiger builds.

        * Configurations/Base.xcconfig:

2009-06-02  Eric Seidel  <eric@webkit.org>

        Reviewed by Maciej Stachowiak.

        Insert*List on an stand-alone image in a content editable region ASSERTS
        ASSERTION FAILED: isStartOfParagraph(startOfParagraphToMove)
        https://bugs.webkit.org/show_bug.cgi?id=19066

        Attempt to fix this by noticing that we inserted the list inside
        the selection which includes the image, and re-adjust the selection
        to not include the list before trying to move the image into
        the list item.
        
        Test: editing/execCommand/list-wrapping-image-crash.html

        * editing/InsertListCommand.cpp:
        (WebCore::InsertListCommand::doApply):

2009-06-02  Eric Seidel  <eric@webkit.org>

        Reviewed by Darin Adler.

        Rename PositionIterator members in hope of further clarity
        https://bugs.webkit.org/show_bug.cgi?id=24854

        Rename m_parent to m_anchorNode (since although it's always the parent
        of the previous m_child member, it is not always the parent of the effective position)
        Rename m_child to m_nodeAfterPositionInAnchor to make clear that it's the node
        directly following the position.  This member is often NULL, but is always
        a child of m_parent, now m_anchorNode if set.
        Rename m_offset to m_offsetInAnchor (since it's interpreted relative to m_anchorNode)

        * dom/PositionIterator.cpp:
        (WebCore::PositionIterator::operator Position):
        (WebCore::PositionIterator::increment):
        (WebCore::PositionIterator::decrement):
        (WebCore::PositionIterator::atStart):
        (WebCore::PositionIterator::atEnd):
        (WebCore::PositionIterator::atStartOfNode):
        (WebCore::PositionIterator::atEndOfNode):
        (WebCore::PositionIterator::isCandidate):
        * dom/PositionIterator.h:
        (WebCore::PositionIterator::PositionIterator):
        (WebCore::PositionIterator::node):
        (WebCore::PositionIterator::offsetInLeafNode):

2009-06-02  Julien Chaffraix  <jchaffraix@webkit.org>

        Reviewed by Eric Seidel.

        Bug 17167: Failures in fast/dom/Node/initial-values.html

        This partly solve a compatibility issue with other browsers. It will also
        make us more consistent while handling XHTML element.

        The issue is that when we create an XHTML element inside an HTML document
        (as it is the case when calling createElementNS), we default to the HTML
        behaviour in nodeName. As we cannot test if an HTMLElement is an XHTML
        element, our fix is to check whether it has a prefix and then default
        to XML behaviour for nodeName.

        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::nodeName): Add a prefix check before
        returning the uppercase tagName (HTML behaviour).

2009-06-02  Eric Seidel  <eric@webkit.org>

        Reviewed by Maciej Stachowiak.

        Add a compareBoundaryPoints which takes RangeBoundaryPoints
        https://bugs.webkit.org/show_bug.cgi?id=25500

        I noticed the need for this function when removing compareBoundaryPoints(Position, Position)
        This patch is almost entirely minus lines.

        No functional changes, thus no tests.

        * dom/Range.cpp:
        (WebCore::Range::setStart):
        (WebCore::Range::setEnd):
        (WebCore::Range::compareBoundaryPoints):
        (WebCore::Range::boundaryPointsValid):
        * dom/Range.h:

2009-06-02  Eric Seidel  <eric@webkit.org>

        Reviewed by Maciej Stachowiak.

        Remove Range::compareBoundaryPoints(Position, Position) per Darin's suggestion in bug 25056
        https://bugs.webkit.org/show_bug.cgi?id=25500

        Darin indicated the Range should deal only with primitive DOM node/offset
        pairs, and that Position (which is a more robust editing construct) should have
        its own comparison functions and that Range.h should not mention Position at all.

        Turns out that Position already has a comparePositions() function (which knows
        how to additionally handled positions in shadow trees).  So I've just changed
        all callers of compareBoundaryPoints(Position, Position) to use the existing
        comparePositions() function.  I've also added a comparePositions which takes
        VisiblePositions for convenience.

        * dom/Range.cpp:
        * dom/Range.h:
        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::updateStartEnd):
        (WebCore::ApplyStyleCommand::applyBlockStyle):
        (WebCore::ApplyStyleCommand::applyRelativeFontStyleChange):
        (WebCore::ApplyStyleCommand::applyInlineStyle):
        (WebCore::ApplyStyleCommand::applyInlineStyleToRange):
        (WebCore::ApplyStyleCommand::removeInlineStyle):
        (WebCore::ApplyStyleCommand::nodeFullySelected):
        (WebCore::ApplyStyleCommand::nodeFullyUnselected):
        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::deleteInsignificantText):
        (WebCore::CompositeEditCommand::moveParagraphContentsToNewBlockIfNecessary):
        (WebCore::CompositeEditCommand::moveParagraphs):
        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::initializeStartEnd):
        (WebCore::DeleteSelectionCommand::handleGeneralDelete):
        (WebCore::DeleteSelectionCommand::mergeParagraphs):
        * editing/SelectionController.cpp:
        (WebCore::SelectionController::nodeWillBeRemoved):
        * editing/VisibleSelection.cpp:
        (WebCore::VisibleSelection::toNormalizedRange):
        * editing/htmlediting.cpp:
        (WebCore::comparePositions):
        * editing/htmlediting.h:
        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleMousePressEventSingleClick):

2009-06-02  Albert J. Wong  <ajwong@chromium.org>

        Reviewed by Dimitri Glazkov.

        https://bugs.webkit.org/show_bug.cgi?id=26122
        Upstream v8_utility.h functions into V8Utilities.h.  This patch has
        some transitional code to make upstreaming easier.  This code will
        be deleted in a few days.

        * bindings/v8/ScriptFunctionCall.cpp:
        (WebCore::ScriptFunctionCall::construct): NewInstance -> newInstance.
        * bindings/v8/V8Utilities.h:
        (WebCore::AllowAllocation::AllowAllocation): Function added.
        (WebCore::AllowAllocation::~AllowAllocation): Function added.
        (WebCore::SafeAllocation::NewInstance): Function added.
        * bindings/v8/WorkerContextExecutionProxy.cpp:
        (WebCore::WorkerContextExecutionProxy::initContextIfNeeded):
        NewInstance -> newInstance.
        (WebCore::WorkerContextExecutionProxy::toV8): NewInstance ->
        newInstance.

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

        Reviewed by John Sullivan.

        - fix <rdar://problem/6940747> Search field’s focus ring is outset

        * rendering/RenderThemeWin.cpp:
        (WebCore::RenderThemeWin::adjustSearchFieldStyle): Set the focused
        search field outline offset to -2.

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

        Reviewed by Alexey Proskuryakov.

        Add list of unimplemented event handlers to DOMWindow.

        * page/DOMWindow.idl:

2009-06-02  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=26133
        Adapt and import py-dom-xpath tests

        Tests: fast/xpath/py-dom-xpath/abbreviations.html
               fast/xpath/py-dom-xpath/axes.html
               fast/xpath/py-dom-xpath/data.html
               fast/xpath/py-dom-xpath/expressions.html
               fast/xpath/py-dom-xpath/functions.html
               fast/xpath/py-dom-xpath/nodetests.html
               fast/xpath/py-dom-xpath/paths.html
               fast/xpath/py-dom-xpath/predicates.html

        Fix bugs found with this test suite:
        - name and local-name were incorrect for processing instructions (XPath expanded-name
        doesn't match DOM exactly);
        - name, local-name and namespace functions should crash on attribute nodes;
        - attemps to make node sets from other types were not detected as errors.

        No performance impact.

        * xml/XPathExpressionNode.h: Track type conversion errors that happen during evaluation.
        An error won't stop evaluation, but an exception will be raised afterwards. We could also
        detect conversion errors at compile time, but not if we're going to support XPath variables
        (which is unnecessary for XPathEvaluator, but will be necessary if we decide to make our own
        XSLT one day).

        * xml/XPathExpression.cpp: (WebCore::XPathExpression::evaluate): Check whether a type
        conversion exception occurred during evaluation, and raise an excpetion if it did.

        * xml/XPathFunctions.cpp:
        (WebCore::XPath::expandedNameLocalPart):
        (WebCore::XPath::expandedName):
        XPath name(), local-name() and namespace-uri() functions are defined in terms of expanded-name,
        which doesn't match anything available via DOM exactly. Calculate the expanded name properly.
        (WebCore::XPath::FunNamespaceURI::evaluate): This function could crash if used with an
        attribute node, because it released what was possibly the only reference to attribute node
        before using it. Changed the function to avoid such situation.
        (WebCore::XPath::FunLocalName::evaluate): Ditto. Also, used the new expandedNameLocalPart()
        to work properly with processing instruction nodes.
        (WebCore::XPath::FunName::evaluate): Ditto (using expandedName()).
        (WebCore::XPath::FunCount::evaluate): Signal an error if the argument is not a node-set
        (by using toNodeSet unconditionally, which will raise an error, and return an empty set).

        * xml/XPathPath.cpp: (WebCore::XPath::Filter::evaluate): Signal an error if the expression
        evaluation result is not a node-set.

        * xml/XPathPath.h: (WebCore::XPath::Filter::resultType): A Filter's result is actually
        always a node-set (this is not so for FilterExpr production in the spec, but is for us,
        because we don't naively map BNF productions to classes).

        * xml/XPathPredicate.cpp: (WebCore::XPath::Union::evaluate): Signal an error if either side
        is not a node-set.

        * xml/XPathStep.cpp: Removed an unnecesary include.

        * xml/XPathValue.cpp:
        (WebCore::XPath::Value::toNodeSet): Signal an error if conversion fails.
        (WebCore::XPath::Value::modifiableNodeSet): Ditto.
        (WebCore::XPath::Value::toNumber): Don't allow inputs that don't match XPath Number production
        (in particular, those using exponential notation).

2009-06-01  Sam Weinig  <sam@webkit.org>

        Reviewed by Brady Eidson.

        Part of https://bugs.webkit.org/show_bug.cgi?id=26100
        Add missing event handler properties to the DOMWindow

        Added oncontextmenu, oninput, and onmessage event handlers to
        the DOMWindow. Aditionally, the onloadstart, onprogress, onstalled,
        and onsuspend event handlers were implemented but not added to
        DOMWindow.idl.

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::oninput):
        (WebCore::DOMWindow::setOninput):
        (WebCore::DOMWindow::onmessage):
        (WebCore::DOMWindow::setOnmessage):
        (WebCore::DOMWindow::oncontextmenu):
        (WebCore::DOMWindow::setOncontextmenu):
        * page/DOMWindow.h:
        * page/DOMWindow.idl:

2009-06-01  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Darin Adler.  Landed by Adam Barth.

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

        Remove a redundant checkEncodedString call when constructing a
        KURL object from a string.

        * platform/KURL.cpp:
        (WebCore::KURL::KURL):

2009-06-01  Dimitri Glazkov  <dglazkov@chromium.org>

        Unreviewed, build fix.

        Reposition platform guard, improperly placed by http://trac.webkit.org/changeset/44340
        Bad Dimitri.

        * platform/KeyboardCodes.h: Repositioned the guard to avoid nested
            WebCore namespace declarations.

2009-06-01  Dimitri Glazkov  <dglazkov@chromium.org>

        Unreviewed, build fix.

        * platform/KeyboardCodes.h: Integrated contents of platform/chromium/KeyboardCodes.h
            with a stern FIXME.
        * platform/chromium/KeyboardCodes.h: Removed.

2009-06-01  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Eric Seidel.

        Fix assertion error in --filters enabled debug builds.
        Instead of using RefPtr<AtomicStringImpl> as keys for the hash maps in SVGFilterBuilder, just use AtomicString objects.

        * svg/graphics/filters/SVGFilterBuilder.cpp:
        (WebCore::SVGFilterBuilder::SVGFilterBuilder):
        (WebCore::SVGFilterBuilder::add):
        (WebCore::SVGFilterBuilder::getEffectById):
        * svg/graphics/filters/SVGFilterBuilder.h:

2009-06-01  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Eric Seidel.

        Fix --filters enabled build on Mac.
        Remove unnecessary 'boundingBox' parameter from finishRenderSVGContent() method.
        Kill several warnings, to make build pass.

        * rendering/RenderPath.cpp:
        (WebCore::RenderPath::paint):
        * rendering/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::paint):
        * rendering/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::paint):
        * rendering/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::paint):
        * rendering/SVGRenderSupport.cpp:
        (WebCore::SVGRenderBase::finishRenderSVGContent):
        * rendering/SVGRenderSupport.h:
        * rendering/SVGRootInlineBox.cpp:
        (WebCore::SVGRootInlineBoxPaintWalker::chunkEndCallback):
        * svg/SVGFEGaussianBlurElement.cpp:
        (WebCore::SVGFEGaussianBlurElement::setStdDeviation):
        * svg/graphics/filters/SVGFEFlood.cpp:
        (WebCore::FEFlood::FEFlood):

2009-06-01  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Dave Hyatt.

        Fix Chromium build by adding an #ifdef, restoring the code path to that
        before http://trac.webkit.org/changeset/44287.

        * platform/mac/ScrollbarThemeMac.mm:
        (WebCore::ScrollbarThemeMac::paint): Added an #ifdef.

2009-06-01  Dirk Schulze  <krit@webkit.org>

        Reviewed by Nikolas Zimmermann.

        Remove last pieces of the old SVG filter system. They are not
        usable with our current filter system. The new filter effects
        will replace the functionality step by step.

        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * svg/graphics/cairo: Removed.
        * svg/graphics/cairo/SVGResourceFilterCairo.cpp: Removed.
        * svg/graphics/cg: Removed.
        * svg/graphics/cg/SVGResourceFilterCg.cpp: Removed.
        * svg/graphics/cg/SVGResourceFilterCg.mm: Removed.
        * svg/graphics/filters/SVGFilterEffect.cpp: Removed.
        * svg/graphics/filters/SVGFilterEffect.h: Removed.
        * svg/graphics/filters/cg: Removed.
        * svg/graphics/filters/cg/SVGFEHelpersCg.h: Removed.
        * svg/graphics/filters/cg/SVGFEHelpersCg.mm: Removed.
        * svg/graphics/filters/cg/SVGFilterEffectCg.mm: Removed.
        * svg/graphics/filters/cg/WKArithmeticFilter.cikernel: Removed.
        * svg/graphics/filters/cg/WKArithmeticFilter.h: Removed.
        * svg/graphics/filters/cg/WKArithmeticFilter.m: Removed.
        * svg/graphics/filters/cg/WKComponentMergeFilter.cikernel: Removed.
        * svg/graphics/filters/cg/WKComponentMergeFilter.h: Removed.
        * svg/graphics/filters/cg/WKComponentMergeFilter.m: Removed.
        * svg/graphics/filters/cg/WKDiffuseLightingFilter.cikernel: Removed.
        * svg/graphics/filters/cg/WKDiffuseLightingFilter.h: Removed.
        * svg/graphics/filters/cg/WKDiffuseLightingFilter.m: Removed.
        * svg/graphics/filters/cg/WKDiscreteTransferFilter.cikernel: Removed.
        * svg/graphics/filters/cg/WKDiscreteTransferFilter.h: Removed.
        * svg/graphics/filters/cg/WKDiscreteTransferFilter.m: Removed.
        * svg/graphics/filters/cg/WKDisplacementMapFilter.cikernel: Removed.
        * svg/graphics/filters/cg/WKDisplacementMapFilter.h: Removed.
        * svg/graphics/filters/cg/WKDisplacementMapFilter.m: Removed.
        * svg/graphics/filters/cg/WKDistantLightFilter.cikernel: Removed.
        * svg/graphics/filters/cg/WKDistantLightFilter.h: Removed.
        * svg/graphics/filters/cg/WKDistantLightFilter.m: Removed.
        * svg/graphics/filters/cg/WKGammaTransferFilter.cikernel: Removed.
        * svg/graphics/filters/cg/WKGammaTransferFilter.h: Removed.
        * svg/graphics/filters/cg/WKGammaTransferFilter.m: Removed.
        * svg/graphics/filters/cg/WKIdentityTransferFilter.h: Removed.
        * svg/graphics/filters/cg/WKIdentityTransferFilter.m: Removed.
        * svg/graphics/filters/cg/WKLinearTransferFilter.cikernel: Removed.
        * svg/graphics/filters/cg/WKLinearTransferFilter.h: Removed.
        * svg/graphics/filters/cg/WKLinearTransferFilter.m: Removed.
        * svg/graphics/filters/cg/WKNormalMapFilter.cikernel: Removed.
        * svg/graphics/filters/cg/WKNormalMapFilter.h: Removed.
        * svg/graphics/filters/cg/WKNormalMapFilter.m: Removed.
        * svg/graphics/filters/cg/WKPointLightFilter.cikernel: Removed.
        * svg/graphics/filters/cg/WKPointLightFilter.h: Removed.
        * svg/graphics/filters/cg/WKPointLightFilter.m: Removed.
        * svg/graphics/filters/cg/WKSpecularLightingFilter.cikernel: Removed.
        * svg/graphics/filters/cg/WKSpecularLightingFilter.h: Removed.
        * svg/graphics/filters/cg/WKSpecularLightingFilter.m: Removed.
        * svg/graphics/filters/cg/WKSpotLightFilter.cikernel: Removed.
        * svg/graphics/filters/cg/WKSpotLightFilter.h: Removed.
        * svg/graphics/filters/cg/WKSpotLightFilter.m: Removed.
        * svg/graphics/filters/cg/WKTableTransferFilter.cikernel: Removed.
        * svg/graphics/filters/cg/WKTableTransferFilter.h: Removed.
        * svg/graphics/filters/cg/WKTableTransferFilter.m: Removed.
        * svg/graphics/mac: Removed.
        * svg/graphics/mac/SVGResourceFilterPlatformDataMac.h: Removed.
        * svg/graphics/mac/SVGResourceFilterPlatformDataMac.mm: Removed.
        * svg/graphics/qt: Removed.
        * svg/graphics/qt/SVGResourceFilterQt.cpp: Removed.
        * svg/graphics/skia: Removed.
        * svg/graphics/skia/SVGResourceFilterSkia.cpp: Removed.

2009-06-01  Dmitry Titov  <dimich@chromium.org>

        Fix the previous checkin (ttp://trac.webkit.org/changeset/44327).
        This adds a comment suggested during review.

        * platform/ThreadGlobalData.cpp:
        (WebCore::ThreadGlobalData::~ThreadGlobalData): Add comment clarifying the change.

2009-06-01  Dmitry Titov  <dimich@chromium.org>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=25973
        Avoid calling CurrentThread() in thread-specific destructors in OSX Chromium.
        Pthreads invoke thread-specific destructors after WTF::detachThread() is called and ThreadIdentifier
        for the thread removed from the WTF thread map. Calling CurrentThread() in such destructor causes
        the ThreadIdentifier to be re-created and inserted into the map again. Since Pthreads on OSX reuse
        the pthread_t between threads, the next created thread will have the same pthread_t and cause an assert
        in establishIdentifierForPthreadHandle() since the id is already in the map.

        The behavior is covered by existing test LayoutTests/fast/workers/worker-terminate.html, which currently fails
        on OSX Chromium and will stop failing after this change.

        * platform/ThreadGlobalData.h:
        * platform/ThreadGlobalData.cpp:
        (WebCore::ThreadGlobalData::~ThreadGlobalData):
        Store the result of "isMainThread()" in a member variable during construction of thread-specific data
        to avoid calling IsMainThread() in destructor, since the latter calls CurrentThread() in OSX Chromium.

2009-06-01  David Levin  <levin@chromium.org>

        Reviewed by Darin Alder and Maciej Stachowiak.

        Bug 26057: StringImpl should share buffers with UString.
        https://bugs.webkit.org/show_bug.cgi?id=26057

        This change results in the following performance improvements:
        On http://www.hixie.ch/tests/adhoc/perf/dom/artificial/core/001.html
        the time went from 78ms to 40ms for append (other times remained constant).

        On http://www.hixie.ch/tests/adhoc/perf/dom/artificial/core/002.html,
        the time went from 3900ms to 2600ms.

        For http://dromaeo.com/?dom, the time for DomModification improved by ~6%.
        Other tests in dom seemed to be faster across several runs but within the
        margin of error (except DOM Attributes which was slightly ~1.5% worse).

        Existing tests cover this code and there is no new functionality
        that is exposed to test.

        * platform/text/AtomicString.cpp:
        (WebCore::AtomicString::add):
        * platform/text/String.cpp:
        (WebCore::String::String):
        (WebCore::String::operator UString):
        * platform/text/StringImpl.cpp:
        (WebCore::StringImpl::StringImpl):
        (WebCore::StringImpl::~StringImpl):
        (WebCore::StringImpl::create): Consumes a shared buffer.
        (WebCore::StringImpl::ustring): Shares the StringImpl's buffer with the UString.
        (WebCore::StringImpl::sharedBuffer): Exposes the buffer that may be shared.
        * platform/text/StringImpl.h:
        (WebCore::StringImpl::hasTerminatingNullCharacter):
        (WebCore::StringImpl::inTable):
        (WebCore::StringImpl::setInTable): Converted the bools to be inside of PtrAndFlags
        to avoid growing StringImpl in size.

2009-06-01  Dimitri Glazkov  <dglazkov@chromium.org>

        Unreviewed, build fix.

        V8 bindings follow-up to to DOMWindow-related cleanup:
        http://trac.webkit.org/changeset/44215

        * bindings/v8/ScriptController.cpp: Removed disconnectFrame(), relocated
            its body to destructor.
        * bindings/v8/ScriptController.h: Removed disconnectFrame() decl.

2009-05-28  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        - Add panel enabler to the resources panel.
        - Add session / always options into the panel enabler.
        - Make enabled status for three panels sticky (globally).
        - Persist enabled status using InspectorController::Settings
        - Make InspectorController produce no network-related overhead when
          resources panel is not enabled.

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

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        (WebCore::InspectorController::setWindowVisible):
        (WebCore::InspectorController::populateScriptObjects):
        (WebCore::InspectorController::identifierForInitialRequest):
        (WebCore::InspectorController::willSendRequest):
        (WebCore::InspectorController::didReceiveResponse):
        (WebCore::InspectorController::didReceiveContentLength):
        (WebCore::InspectorController::didFinishLoading):
        (WebCore::InspectorController::didFailLoading):
        (WebCore::InspectorController::resourceRetrievedByXMLHttpRequest):
        (WebCore::InspectorController::scriptImported):
        (WebCore::InspectorController::enableResourceTracking):
        (WebCore::InspectorController::disableResourceTracking):
        (WebCore::InspectorController::startUserInitiatedProfiling):
        (WebCore::InspectorController::enableProfiler):
        (WebCore::InspectorController::disableProfiler):
        (WebCore::InspectorController::enableDebugger):
        (WebCore::InspectorController::disableDebugger):
        * inspector/InspectorController.h:
        (WebCore::InspectorController::Setting::Setting):
        (WebCore::InspectorController::resourceTrackingEnabled):
        * inspector/InspectorController.idl:
        * inspector/InspectorFrontend.cpp:
        (WebCore::InspectorFrontend::resourceTrackingWasEnabled):
        (WebCore::InspectorFrontend::resourceTrackingWasDisabled):
        * inspector/InspectorFrontend.h:
        * inspector/front-end/PanelEnablerView.js:
        (WebInspector.PanelEnablerView.enableOption):
        (WebInspector.PanelEnablerView):
        (WebInspector.PanelEnablerView.prototype._windowResized):
        (WebInspector.PanelEnablerView.prototype.alwaysWasChosen):
        * inspector/front-end/ProfilesPanel.js:
        (WebInspector.ProfilesPanel.prototype._enableProfiling):
        (WebInspector.ProfilesPanel.prototype._toggleProfiling):
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourcesPanel):
        (WebInspector.ResourcesPanel.prototype.get statusBarItems):
        (WebInspector.ResourcesPanel.prototype.resourceTrackingWasEnabled):
        (WebInspector.ResourcesPanel.prototype.resourceTrackingWasDisabled):
        (WebInspector.ResourcesPanel.prototype.reset):
        (WebInspector.ResourcesPanel.prototype._updateSidebarWidth):
        (WebInspector.ResourcesPanel.prototype._enableResourceTracking):
        (WebInspector.ResourcesPanel.prototype._toggleResourceTracking):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype._enableDebugging):
        (WebInspector.ScriptsPanel.prototype._toggleDebugging):
        * inspector/front-end/inspector.css:
        * inspector/front-end/inspector.js:
        (WebInspector.resourceTrackingWasEnabled):
        (WebInspector.resourceTrackingWasDisabled):

2009-06-01  Drew Wilson  <atwilson@google.com>

        Reviewed by Darin Adler.  Landed (and tweaked) by Adam Barth.

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

        Added WorkerContext.close()

        Test: fast/workers/worker-close.html

        * workers/WorkerContext.cpp:
        (WebCore::WorkerContext::close):
        * workers/WorkerContext.h:
        * workers/WorkerContext.idl:
        * workers/WorkerMessagingProxy.cpp:
        (WebCore::WorkerMessagingProxy::workerContextDestroyedInternal):

2009-06-01  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=12471
        XPathResult not invalidated for documents retrieved via XMLHttpRequest

        Test: fast/xpath/detached-subtree-invalidate-iterator.html and existing tests in dom/svg/level3/xpath.

        Use DOM tree version instead of DOMSubtreeModified events to invalidate, which is more
        reliable and much faster.

        * xml/XPathExpression.cpp:
        (WebCore::XPathExpression::evaluate):
        * xml/XPathResult.cpp:
        (WebCore::XPathResult::XPathResult):
        (WebCore::XPathResult::~XPathResult):
        (WebCore::XPathResult::invalidIteratorState):
        (WebCore::XPathResult::iterateNext):
        * xml/XPathResult.h:
        (WebCore::XPathResult::create):

2009-06-01  Brett Wilson  <brettw@chromium.org>

        Reviewed by Darin Adler.  Landed by Adam Barth.

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

        Test: fast/transforms/bounding-rect-zoom.html

        Make getClientRects and getBoundingClientRect account for ther zoom
        factor.

        * dom/Element.cpp:
        (WebCore::adjustFloatPointForAbsoluteZoom):
        (WebCore::adjustFloatQuadForAbsoluteZoom):
        (WebCore::adjustIntRectForAbsoluteZoom):
        (WebCore::Element::getClientRects):
        (WebCore::Element::getBoundingClientRect):

2009-06-01  Tony Chang  <tony@chromium.org>

        Reviewed by Dimitri Glazkov.  Landed by Adam Barth.

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

        Fix an infinite loop when using the keyboard in Chromium select
        popups.

        Not testable since it involves sending a keyboard event to
        the popup, which is not possible (eventSender sends the key
        events through webview, we want to go through the webwidget).

        * platform/chromium/PopupMenuChromium.cpp:

2009-06-01  Nate Chapin  <japhet@google.com>

        Reviewed by Dimitri Glazkov.  Landed by Adam Barth.

        If a url with an anchor is being loaded, ensure that the anchor remains locked in view until the page
        has finished loading compeltely or the user has manually scrolled.  Refreshing an anchor url after
        scrolling to a new location on the page will still result in jumping to the new location.
        
        https://bugs.webkit.org/show_bug.cgi?id=26034

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::gotoAnchor): Set anchor lock after navigating to anchor.
        (WebCore::FrameLoader::completed): Release anchor lock.
        * page/FrameView.cpp:
        (WebCore::FrameView::FrameView): Ensure anchor lock starts unset.
        (WebCore::FrameView::reset): Ensure anchor lock starts unset.
        (WebCore::FrameView::layout): If anchor lock is set, force a gotoAnchor() after layout.
        (WebCore::FrameView::scrollRectIntoViewRecursively): Release anchor lock if a programmatic scroll begins.
        (WebCore::FrameView::setWasScrolledByUser): Release anchor lock if user manually scrolls.
        (WebCore::FrameView::setScrollPosition): Release anchor lock if a programmatic scroll begins.
        * page/FrameView.h:
        (WebCore::FrameView::lockedToAnchor): Added.
        (WebCore::FrameView::setLockedToAnchor): Added.

2009-05-31  Dirk Schulze  <krit@webkit.org>

        Reviewed by Nikolas Zimmermann.

        WebKit needs cross-platform filter system
        [https://bugs.webkit.org/show_bug.cgi?id=19991]

        A short clean-up. FilterBuilder is SVG specific. Move it
        to svg/graphics/filters and rename it to SVGFilterBuilder. 

        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.xcodeproj/project.pbxproj:
        * svg/FilterBuilder.cpp: Removed.
        * svg/FilterBuilder.h: Removed.
        * svg/SVGFilterElement.cpp:
        * svg/SVGFilterPrimitiveStandardAttributes.h:
        * svg/graphics/SVGResourceFilter.cpp:
        (WebCore::SVGResourceFilter::SVGResourceFilter):
        * svg/graphics/SVGResourceFilter.h:
        (WebCore::SVGResourceFilter::builder):
        * svg/graphics/filters/SVGFilterBuilder.cpp: Added.
        (WebCore::SVGFilterBuilder::SVGFilterBuilder):
        (WebCore::SVGFilterBuilder::add):
        (WebCore::SVGFilterBuilder::getEffectById):
        (WebCore::SVGFilterBuilder::clearEffects):
        * svg/graphics/filters/SVGFilterBuilder.h: Added.
        (WebCore::SVGFilterBuilder::lastEffect):

2009-05-31  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=13233
        Need to implement an optimizing XPath evaluator

        Avoid sorting results of hierarchical paths that are naturally sorted. On a flat data structure
        with 128K nodes and a simple XPath expression, this changes evaluation time from 1.5 minutes
        to 33 ms.

        * xml/XPathNodeSet.h: Keep track of whether subtrees rooted at nodes in set are disjoint,
        which is useful for optimization.
        (WebCore::XPath::NodeSet::NodeSet): Removed, it was identical to compiler generated one.
        (WebCore::XPath::NodeSet::operator=): Ditto.
        (WebCore::XPath::NodeSet::swap): Ditto.
        (WebCore::XPath::NodeSet::isSorted): Single element sets are always sorted, even if sort()
        was never called.
        (WebCore::XPath::NodeSet::markSubtreesDisjoint): Just like being sorted, the new flag is
        maintained by callers.
        (WebCore::XPath::NodeSet::subtreesAreDisjoint): A single element set only has one subtree.
        Currently, the only way for a set to gain this flag is to be produced from a single element
        set with a hierarchical location path.

        * xml/XPathPath.cpp: (WebCore::XPath::LocationPath::evaluate): Use the new flag to avoid
        maintaining a set of unique nodes, and to avoid sorting the result.

2009-05-31  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=13233
        Need to implement an optimizing XPath evaluator

        This patch adds some infrastructure and simple optimizations. Namely,
        - we now avoid building a full NodeSet just to evaluate a predicate in some cases;
        - "/descendant-or-self::node()/child::" is optimized to iterate the tree once when possible;

        * xml/XPathExpressionNode.cpp:
        (WebCore::XPath::Expression::Expression):
        * xml/XPathExpressionNode.h:
        (WebCore::XPath::Expression::addSubExpression):
        (WebCore::XPath::Expression::isContextNodeSensitive):
        (WebCore::XPath::Expression::isContextPositionSensitive):
        (WebCore::XPath::Expression::isContextSizeSensitive):
        (WebCore::XPath::Expression::setIsContextNodeSensitive):
        (WebCore::XPath::Expression::setIsContextPositionSensitive):
        (WebCore::XPath::Expression::setIsContextSizeSensitive):
        XPath expression now knows its result type, and whether evaluation depends on context.

        * xml/XPathFunctions.cpp:
        (WebCore::XPath::FunLast::resultType):
        (WebCore::XPath::FunLast::FunLast):
        (WebCore::XPath::FunPosition::resultType):
        (WebCore::XPath::FunPosition::FunPosition):
        (WebCore::XPath::FunCount::resultType):
        (WebCore::XPath::FunId::resultType):
        (WebCore::XPath::FunLocalName::resultType):
        (WebCore::XPath::FunLocalName::FunLocalName):
        (WebCore::XPath::FunNamespaceURI::resultType):
        (WebCore::XPath::FunNamespaceURI::FunNamespaceURI):
        (WebCore::XPath::FunName::resultType):
        (WebCore::XPath::FunName::FunName):
        (WebCore::XPath::FunString::resultType):
        (WebCore::XPath::FunString::FunString):
        (WebCore::XPath::FunConcat::resultType):
        (WebCore::XPath::FunStartsWith::resultType):
        (WebCore::XPath::FunContains::resultType):
        (WebCore::XPath::FunSubstringBefore::resultType):
        (WebCore::XPath::FunSubstringAfter::resultType):
        (WebCore::XPath::FunSubstring::resultType):
        (WebCore::XPath::FunStringLength::resultType):
        (WebCore::XPath::FunStringLength::FunStringLength):
        (WebCore::XPath::FunNormalizeSpace::resultType):
        (WebCore::XPath::FunNormalizeSpace::FunNormalizeSpace):
        (WebCore::XPath::FunTranslate::resultType):
        (WebCore::XPath::FunBoolean::resultType):
        (WebCore::XPath::FunNot::resultType):
        (WebCore::XPath::FunTrue::resultType):
        (WebCore::XPath::FunFalse::resultType):
        (WebCore::XPath::FunLang::resultType):
        (WebCore::XPath::FunLang::FunLang):
        (WebCore::XPath::FunNumber::resultType):
        (WebCore::XPath::FunNumber::FunNumber):
        (WebCore::XPath::FunSum::resultType):
        (WebCore::XPath::FunFloor::resultType):
        (WebCore::XPath::FunCeiling::resultType):
        (WebCore::XPath::FunRound::resultType):
        (WebCore::XPath::Function::setArguments):
        Set optimization details for the expression. Normally, a function does not introduce context
        node set dependency, but some use context node as default argument, or otherwise use the context.

        * xml/XPathFunctions.h: Tweaked style.

        * xml/XPathPath.cpp:
        (WebCore::XPath::Filter::Filter): A filter is as context node set sensitive as its expression is.
        (WebCore::XPath::LocationPath::LocationPath): A location path can only be context node sensitive,
        and only if the path relative.
        (WebCore::XPath::LocationPath::appendStep): Invoke compile-time Step optimizations.
        (WebCore::XPath::LocationPath::insertFirstStep): Ditto.
        (WebCore::XPath::Path::Path): A path is as context node set sensitive as its filter is.

        * xml/XPathPath.h:
        (WebCore::XPath::Filter::resultType): Result type of a filter is the same as of its expression
        (useful filters return NodeSets, of course).
        (WebCore::XPath::LocationPath::setAbsolute): An absolute location path if context node set
        insensitive.
        (WebCore::XPath::LocationPath::resultType): A path's result is always a node set.
        (WebCore::XPath::Path::resultType): Ditto.

        * xml/XPathPredicate.h:
        (WebCore::XPath::Number::resultType): Return a proper result type.
        (WebCore::XPath::StringExpression::resultType): Ditto.
        (WebCore::XPath::Negative::resultType): Ditto.
        (WebCore::XPath::NumericOp::resultType): Ditto.
        (WebCore::XPath::EqTestOp::resultType): Ditto.
        (WebCore::XPath::LogicalOp::resultType): Ditto.
        (WebCore::XPath::Union::resultType): Ditto.
        (WebCore::XPath::Predicate::isContextPositionSensitive): A predicate can be context position
        sensitive even if its expression is not, because e.g. [5] is a shortcut for [position()=5].
        (WebCore::XPath::Predicate::isContextSizeSensitive): This matches expression result.

        * xml/XPathStep.h:
        (WebCore::XPath::Step::NodeTest::Kind): Removed unused ElementNodeTest, which was previously
        borrowed from XPath 2.0 to express some optimizations.
        (WebCore::XPath::Step::NodeTest::mergedPredicates): To avoid building a huge node set and
        filtering it with predicates, we now try to apply predicates while enumerating an axis.
        (WebCore::XPath::Step::nodeTest): Expose m_nodeTest.

        * xml/XPathStep.cpp:
        (WebCore::XPath::Step::~Step): The step owns NodeTest merged predicates, so it is still
        possible to copy NodeTests.
        (WebCore::XPath::Step::optimize): Merge predicates into NodeTest if possible.
        (WebCore::XPath::optimizeStepPair): Optimize some expressions containing "//".
        (WebCore::XPath::Step::predicatesAreContextListInsensitive): The above optimization is only
        possible if there are no context sensitive predicates for "//".
        (WebCore::XPath::Step::evaluate): Track context position for the first merged predicate.
        (WebCore::XPath::nodeMatchesBasicTest): Check whether the node matches node test, ignoring
        merged predicates.
        (WebCore::XPath::nodeMatches): Additionally check merged predicates, and update position.
        (WebCore::XPath::Step::nodesInAxis): Check merged predicates in optimized attribute code
        path.

        * xml/XPathVariableReference.h: (WebCore::XPath::VariableReference::resultType): Variable
        references are not used with XPathEvaluator, so we'll only need them if we decide to
        reimplement XSLT. The type of variable reference is not known at compile time.

2009-05-31  Sam Weinig  <sam@webkit.org>

        Rubber-stamped by Dan Bernstein.

        Remove unused JSEventTargetBase.h

        * GNUmakefile.am:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSEventTargetBase.h: Removed.

2009-05-31  Sam Weinig  <sam@webkit.org>

        Reviewed by Dan Bernstein.

        Part of https://bugs.webkit.org/show_bug.cgi?id=26100
        Add missing event handler properties to the DOMWindow

        Add missing oncanplay, oncanplaythrough, ondurationchange, onemptied,
        onended, onloadeddata, onloadedmetadata, onpause, onplay, onplaying,
        onratechange, onseeked, onseeking, ontimeupdate, onvolumechange,
        onwaiting, onloadstart, onprogress, onstalled, onsuspend, ondrag,
        ondragend, ondragenter, ondragleave, ondragover, ondragstart and 
        ondrop event handlers to the DOMWindow.

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::ondrag):
        (WebCore::DOMWindow::setOndrag):
        (WebCore::DOMWindow::ondragend):
        (WebCore::DOMWindow::setOndragend):
        (WebCore::DOMWindow::ondragenter):
        (WebCore::DOMWindow::setOndragenter):
        (WebCore::DOMWindow::ondragleave):
        (WebCore::DOMWindow::setOndragleave):
        (WebCore::DOMWindow::ondragover):
        (WebCore::DOMWindow::setOndragover):
        (WebCore::DOMWindow::ondragstart):
        (WebCore::DOMWindow::setOndragstart):
        (WebCore::DOMWindow::ondrop):
        (WebCore::DOMWindow::setOndrop):
        (WebCore::DOMWindow::oncanplay):
        (WebCore::DOMWindow::setOncanplay):
        (WebCore::DOMWindow::oncanplaythrough):
        (WebCore::DOMWindow::setOncanplaythrough):
        (WebCore::DOMWindow::ondurationchange):
        (WebCore::DOMWindow::setOndurationchange):
        (WebCore::DOMWindow::onemptied):
        (WebCore::DOMWindow::setOnemptied):
        (WebCore::DOMWindow::onended):
        (WebCore::DOMWindow::setOnended):
        (WebCore::DOMWindow::onloadeddata):
        (WebCore::DOMWindow::setOnloadeddata):
        (WebCore::DOMWindow::onloadedmetadata):
        (WebCore::DOMWindow::setOnloadedmetadata):
        (WebCore::DOMWindow::onpause):
        (WebCore::DOMWindow::setOnpause):
        (WebCore::DOMWindow::onplay):
        (WebCore::DOMWindow::setOnplay):
        (WebCore::DOMWindow::onplaying):
        (WebCore::DOMWindow::setOnplaying):
        (WebCore::DOMWindow::onratechange):
        (WebCore::DOMWindow::setOnratechange):
        (WebCore::DOMWindow::onseeked):
        (WebCore::DOMWindow::setOnseeked):
        (WebCore::DOMWindow::onseeking):
        (WebCore::DOMWindow::setOnseeking):
        (WebCore::DOMWindow::ontimeupdate):
        (WebCore::DOMWindow::setOntimeupdate):
        (WebCore::DOMWindow::onvolumechange):
        (WebCore::DOMWindow::setOnvolumechange):
        (WebCore::DOMWindow::onwaiting):
        (WebCore::DOMWindow::setOnwaiting):
        (WebCore::DOMWindow::onloadstart):
        (WebCore::DOMWindow::setOnloadstart):
        (WebCore::DOMWindow::onprogress):
        (WebCore::DOMWindow::setOnprogress):
        (WebCore::DOMWindow::onstalled):
        (WebCore::DOMWindow::setOnstalled):
        (WebCore::DOMWindow::onsuspend):
        (WebCore::DOMWindow::setOnsuspend):
        * page/DOMWindow.h:
        * page/DOMWindow.idl:

2009-05-31  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Part of https://bugs.webkit.org/show_bug.cgi?id=26100
        Add missing event handler properties to the DOMWindow

        Add missing onstorage event handler to the DOMWindow.

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::onstorage):
        (WebCore::DOMWindow::setOnstorage):
        * page/DOMWindow.h:
        * page/DOMWindow.idl:

2009-05-30  Sam Weinig  <sam@webkit.org>

        Reviewed by Mark Rowe.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=26110
        Update online/offline events to match the current spec.
        - Also adds window.ononline and window.onoffline event handler
          properties.

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::onoffline):
        (WebCore::DOMWindow::setOnoffline):
        (WebCore::DOMWindow::ononline):
        (WebCore::DOMWindow::setOnonline):
        * page/DOMWindow.h:
        * page/DOMWindow.idl:
        * page/Page.cpp:
        (WebCore::networkStateChanged):

2009-05-31  Dirk Schulze  <krit@webkit.org>

        Reviewed by Nikolas Zimmermann.

        WebKit needs cross-platform filter system
        [https://bugs.webkit.org/show_bug.cgi?id=19991]

        Make use of the new filter system in WebCore for SVG. Deleted Mac bindings
        and replace it by a platform independent code. Calculation of subRegions
        is missing but needed for a first filter effect.

        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/filters/Filter.h:
        (WebCore::Filter::~Filter):
        (WebCore::Filter::setSourceImage):
        * rendering/SVGRenderSupport.cpp:
        (WebCore::SVGRenderBase::prepareToRenderSVGContent):
        (WebCore::SVGRenderBase::finishRenderSVGContent):
        * svg/FilterBuilder.h:
        (WebCore::FilterBuilder::lastEffect):
        * svg/SVGFEBlendElement.cpp:
        (WebCore::SVGFEBlendElement::SVGFEBlendElement):
        (WebCore::SVGFEBlendElement::build):
        * svg/SVGFEBlendElement.h:
        * svg/SVGFEColorMatrixElement.cpp:
        (WebCore::SVGFEColorMatrixElement::SVGFEColorMatrixElement):
        (WebCore::SVGFEColorMatrixElement::build):
        * svg/SVGFEColorMatrixElement.h:
        * svg/SVGFEComponentTransferElement.cpp:
        (WebCore::SVGFEComponentTransferElement::SVGFEComponentTransferElement):
        (WebCore::SVGFEComponentTransferElement::build):
        * svg/SVGFEComponentTransferElement.h:
        * svg/SVGFECompositeElement.cpp:
        (WebCore::SVGFECompositeElement::SVGFECompositeElement):
        (WebCore::SVGFECompositeElement::build):
        * svg/SVGFECompositeElement.h:
        * svg/SVGFEDiffuseLightingElement.cpp:
        (WebCore::SVGFEDiffuseLightingElement::SVGFEDiffuseLightingElement):
        (WebCore::SVGFEDiffuseLightingElement::build):
        * svg/SVGFEDiffuseLightingElement.h:
        * svg/SVGFEDisplacementMapElement.cpp:
        (WebCore::SVGFEDisplacementMapElement::SVGFEDisplacementMapElement):
        (WebCore::SVGFEDisplacementMapElement::build):
        * svg/SVGFEDisplacementMapElement.h:
        * svg/SVGFEFloodElement.cpp:
        (WebCore::SVGFEFloodElement::SVGFEFloodElement):
        (WebCore::SVGFEFloodElement::build):
        * svg/SVGFEFloodElement.h:
        * svg/SVGFEGaussianBlurElement.cpp:
        (WebCore::SVGFEGaussianBlurElement::SVGFEGaussianBlurElement):
        (WebCore::SVGFEGaussianBlurElement::build):
        * svg/SVGFEGaussianBlurElement.h:
        * svg/SVGFEImageElement.cpp:
        (WebCore::SVGFEImageElement::SVGFEImageElement):
        (WebCore::SVGFEImageElement::notifyFinished):
        (WebCore::SVGFEImageElement::build):
        * svg/SVGFEImageElement.h:
        * svg/SVGFEMergeElement.cpp:
        (WebCore::SVGFEMergeElement::SVGFEMergeElement):
        (WebCore::SVGFEMergeElement::build):
        * svg/SVGFEMergeElement.h:
        * svg/SVGFEOffsetElement.cpp:
        (WebCore::SVGFEOffsetElement::SVGFEOffsetElement):
        (WebCore::SVGFEOffsetElement::build):
        * svg/SVGFEOffsetElement.h:
        * svg/SVGFESpecularLightingElement.cpp:
        (WebCore::SVGFESpecularLightingElement::SVGFESpecularLightingElement):
        (WebCore::SVGFESpecularLightingElement::build):
        * svg/SVGFESpecularLightingElement.h:
        * svg/SVGFETileElement.cpp:
        (WebCore::SVGFETileElement::SVGFETileElement):
        (WebCore::SVGFETileElement::build):
        * svg/SVGFETileElement.h:
        * svg/SVGFETurbulenceElement.cpp:
        (WebCore::SVGFETurbulenceElement::SVGFETurbulenceElement):
        (WebCore::SVGFETurbulenceElement::build):
        * svg/SVGFETurbulenceElement.h:
        * svg/SVGFilterElement.cpp:
        (WebCore::SVGFilterElement::canvasResource):
        * svg/SVGFilterPrimitiveStandardAttributes.cpp:
        (WebCore::SVGFilterPrimitiveStandardAttributes::setStandardAttributes):
        * svg/SVGFilterPrimitiveStandardAttributes.h:
        (WebCore::SVGFilterPrimitiveStandardAttributes::contextElement):
        * svg/graphics/SVGResourceFilter.cpp:
        (WebCore::SVGResourceFilter::SVGResourceFilter):
        (WebCore::SVGResourceFilter::addFilterEffect):
        (WebCore::SVGResourceFilter::filterBBoxForItemBBox):
        (WebCore::SVGResourceFilter::prepareFilter):
        (WebCore::SVGResourceFilter::applyFilter):
        (WebCore::SVGResourceFilter::externalRepresentation):
        * svg/graphics/SVGResourceFilter.h:
        (WebCore::SVGResourceFilter::filterBoundingBox):
        (WebCore::SVGResourceFilter::setFilterBoundingBox):
        (WebCore::SVGResourceFilter::itemBoundingBox):
        (WebCore::SVGResourceFilter::setItemBoundingBox):
        (WebCore::SVGResourceFilter::builder):

2009-05-31  Dirk Schulze  <krit@webkit.org>

        Reviewed by Nikolas Zimmermann.

        WebKit needs cross-platform filter system
        [https://bugs.webkit.org/show_bug.cgi?id=19991]

        Adding 'in1' attribute support for <feFlood>, as specified in SVG 1.1.
        This change helps creating test cases, once filters are activated.

        * svg/SVGFEFloodElement.cpp:
        (WebCore::SVGFEFloodElement::SVGFEFloodElement):
        (WebCore::SVGFEFloodElement::parseMappedAttribute):
        (WebCore::SVGFEFloodElement::build):
        * svg/SVGFEFloodElement.h:
        * svg/SVGFEFloodElement.idl:
        * svg/graphics/filters/SVGFEFlood.cpp:
        (WebCore::FEFlood::FEFlood):
        (WebCore::FEFlood::create):
        * svg/graphics/filters/SVGFEFlood.h:

2009-05-31  Dirk Schulze  <krit@webkit.org>

        Reviewed by Nikolas Zimmermann.

        WebKit needs cross-platform filter system
        [https://bugs.webkit.org/show_bug.cgi?id=19991]

        Replace all occurrences of SVGResourceFilter by Filter. This is the last 
        step for a SVG independent filter system. Every other part of WebCore can
        use the filter system by creating a new Filter object.

        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/filters/FEBlend.cpp:
        (WebCore::FEBlend::apply):
        * platform/graphics/filters/FEBlend.h:
        * platform/graphics/filters/FEColorMatrix.cpp:
        (WebCore::FEColorMatrix::apply):
        * platform/graphics/filters/FEColorMatrix.h:
        * platform/graphics/filters/FEComponentTransfer.cpp:
        (WebCore::FEComponentTransfer::apply):
        * platform/graphics/filters/FEComponentTransfer.h:
        * platform/graphics/filters/FEComposite.cpp:
        (WebCore::FEComposite::apply):
        * platform/graphics/filters/FEComposite.h:
        * platform/graphics/filters/Filter.h: Added.
        (WebCore::Filter::setSourceImage):
        (WebCore::Filter::sourceImage):
        * platform/graphics/filters/FilterEffect.h:
        * platform/graphics/filters/SourceAlpha.cpp:
        (WebCore::SourceAlpha::apply):
        * platform/graphics/filters/SourceAlpha.h:
        * platform/graphics/filters/SourceGraphic.cpp:
        (WebCore::SourceGraphic::apply):
        * platform/graphics/filters/SourceGraphic.h:
        * svg/Filter.cpp: Removed.
        * svg/Filter.h: Removed.
        * svg/graphics/filters/SVGFEConvolveMatrix.cpp:
        (WebCore::FEConvolveMatrix::apply):
        * svg/graphics/filters/SVGFEConvolveMatrix.h:
        * svg/graphics/filters/SVGFEDiffuseLighting.cpp:
        (WebCore::FEDiffuseLighting::apply):
        * svg/graphics/filters/SVGFEDiffuseLighting.h:
        * svg/graphics/filters/SVGFEDisplacementMap.cpp:
        (WebCore::FEDisplacementMap::apply):
        * svg/graphics/filters/SVGFEDisplacementMap.h:
        * svg/graphics/filters/SVGFEFlood.cpp:
        (WebCore::FEFlood::apply):
        * svg/graphics/filters/SVGFEFlood.h:
        * svg/graphics/filters/SVGFEGaussianBlur.cpp:
        (WebCore::FEGaussianBlur::apply):
        * svg/graphics/filters/SVGFEGaussianBlur.h:
        * svg/graphics/filters/SVGFEImage.cpp:
        (WebCore::FEImage::apply):
        * svg/graphics/filters/SVGFEImage.h:
        * svg/graphics/filters/SVGFEMerge.cpp:
        (WebCore::FEMerge::apply):
        * svg/graphics/filters/SVGFEMerge.h:
        * svg/graphics/filters/SVGFEMorphology.cpp:
        (WebCore::FEMorphology::apply):
        * svg/graphics/filters/SVGFEMorphology.h:
        * svg/graphics/filters/SVGFEOffset.cpp:
        (WebCore::FEOffset::apply):
        * svg/graphics/filters/SVGFEOffset.h:
        * svg/graphics/filters/SVGFESpecularLighting.cpp:
        (WebCore::FESpecularLighting::apply):
        * svg/graphics/filters/SVGFESpecularLighting.h:
        * svg/graphics/filters/SVGFETile.cpp:
        (WebCore::FETile::apply):
        * svg/graphics/filters/SVGFETile.h:
        * svg/graphics/filters/SVGFETurbulence.cpp:
        (WebCore::FETurbulence::apply):
        * svg/graphics/filters/SVGFETurbulence.h:
        * svg/graphics/filters/SVGFilter.cpp: Added.
        (WebCore::SVGFilter::SVGFilter):
        (WebCore::SVGFilter::calculateEffectSubRegion):
        (WebCore::SVGFilter::create):
        * svg/graphics/filters/SVGFilter.h: Added.

2009-05-30  Kevin Ollivier  <kevino@theolliviers.com>

        Build fix for platforms without plugins support.

        * plugins/PluginViewNone.cpp:
        (WebCore::PluginView::userAgentStatic):
        (WebCore::PluginView::getValueStatic):

2009-05-30  Nikolas Zimmermann  <nikolas.zimmermann@torchmobile.com>

        Reviewed by Darin Adler.

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

        Fix regression, local WML files won't load anymore, as the mimetype isn't correctly detected.    
        Bug filed at <rdar://problem/6917571> to cover this CFNetwork limitation.

        * platform/network/mac/ResourceHandleMac.mm:
        (-[WebCoreResourceHandleAsDelegate connection:didReceiveResponse:]):

2009-05-29  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=26091
        Make storage events match the current spec.
        - Storage event listeners are added to the window.
        - Storage events are dispatched to the window.

        Updated existing tests.

        * dom/Document.cpp:
        (WebCore::Document::dispatchWindowEvent):
        * dom/Document.h:
        * dom/Node.cpp:
        * dom/Node.h:
        * html/HTMLBodyElement.cpp:
        (WebCore::HTMLBodyElement::parseMappedAttribute):
        * storage/LocalStorageArea.cpp:
        (WebCore::LocalStorageArea::dispatchStorageEvent):
        * storage/SessionStorageArea.cpp:
        (WebCore::SessionStorageArea::dispatchStorageEvent):

2009-05-30  Darin Adler  <darin@apple.com>

        Reviewed by Adele Peterson.

        Bug 26097: REGRESSION (r44283): Tab key doesn't work when focus is on a <select> element

        Test: fast/forms/focus-control-to-page.html

        * dom/SelectElement.h: Made destructor protected. Tweaked a bit.

        * html/HTMLSelectElement.cpp: Removed unneeded includes.
        (WebCore::HTMLSelectElement::remove): Removed unneeded range check of the
        result of optionToListIndex.
        (WebCore::HTMLSelectElement::parseMappedAttribute): Removed code to set the
        unused attribute, m_minwidth.
        (WebCore::HTMLSelectElement::defaultEventHandler): The actual bug fix.
        Call through to the base class defaultEventHandler if the event hasn't
        been handled yet.

        * html/HTMLSelectElement.h: Removed unneeded includes. Made a lot more functions
        private. Removed unused minWidth function and m_minwidth data member.

2009-05-30  Fridrich Strba  <fridrich.strba@bluewin.ch>

        Reviewed by Holger Freyther.

        The two KeyboardCodes.h files are basically identical and the
        qt one is properly #ifdef-ed for different win32 systems. Share
        them between Qt and Gtk implementations.

        * GNUmakefile.am:
        * platform/KeyboardCodes.h: Copied from WebCore/platform/qt/KeyboardCodes.h.
        * platform/gtk/KeyboardCodes.h: Removed.
        * platform/qt/KeyboardCodes.h: Removed.

2009-05-30  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Sam Weinig.

        LocalStorage and SessionStorage's implicit setters do not correctly 
        handle null.  The custom JS bindings should convert to strings
        unconditionally and not try to handle null specially.
        https://bugs.webkit.org/show_bug.cgi?id=25970

        Tests: storage/domstorage/localstorage/string-conversion.html
               storage/domstorage/sessionstorage/string-conversion.html

        * bindings/js/JSStorageCustom.cpp:
        (WebCore::JSStorage::customPut):

2009-05-30  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        - fix <rdar://problem/6935192> REGRESSION (Safari 3-TOT): Scroll
          bars in key window draw as inactive if the WebView is not active

        Test: platform/mac/scrollbars/key-window-not-first-responder.html

        * platform/mac/ScrollbarThemeMac.mm:
        (WebCore::ScrollbarThemeMac::paint): Use the window's key state instead
        of the WebView's first responder state to switch between active and
        inactive state.

2009-05-30  Dan Bernstein  <mitz@apple.com>

        Reviewed by Simon Fraser.

        - fix https://bugs.webkit.org/show_bug.cgi?id=18445
          <rdar://problem/5931174> Assertion failure in CSSGradientValue::image
          with -webkit-gradient as body's background

        Test: fast/backgrounds/body-generated-image-propagated-to-root.html

        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintFillLayerExtended): Check if this
        is the root element painting a background layer propagated from the
        body, and if it is, use the body's renderer as the client to
        StyleImage::image().

2009-05-30  Holger Hans Peter Freyther  <zecke@selfish.org>

        Unreviewed build fix for AXObjectCache.

        For !HAVE(ACCESSIBILITY) postNotification was defined twice. Move
        that into the #ifdef.

        * accessibility/AXObjectCache.cpp:

2009-05-29  Nikolas Zimmermann  <nikolas.zimmermann@torchmobile.com>

        Reviewed by George Staikos.

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

        Add support for the last missing WML element: <select>. This patch adds WMLSelectElement, providing
        the same functionality HTMLSelectElement has. The WML specific features will follow soon.
    
        Add simple testcase covering <select> element rendering: fast/wml/select.wml

        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/OptionElement.cpp:
        (WebCore::OptionElement::optionIndex):
        (WebCore::isOptionElement):
        * dom/OptionElement.h:
        * dom/OptionGroupElement.cpp:
        (WebCore::isOptionGroupElement):
        * dom/OptionGroupElement.h:
        * dom/SelectElement.cpp:
        (WebCore::SelectElement::accessKeySetSelectedIndex):
        (WebCore::toSelectElement):
        * dom/SelectElement.h:
        * html/HTMLOptionElement.cpp:
        (WebCore::HTMLOptionElement::index):
        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::accessKeySetSelectedIndex):
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::paintItemForeground):
        * rendering/RenderMenuList.cpp:
        (WebCore::RenderMenuList::itemIsEnabled):
        (WebCore::RenderMenuList::itemIsLabel):
        * wml/WMLFormControlElement.cpp:
        (WebCore::WMLFormControlElement::attach):
        (WebCore::WMLFormControlElement::recalcStyle):
        * wml/WMLFormControlElement.h:
        * wml/WMLInputElement.cpp:
        (WebCore::WMLInputElement::attach):
        * wml/WMLOptGroupElement.cpp:
        (WebCore::WMLOptGroupElement::insertBefore):
        (WebCore::WMLOptGroupElement::replaceChild):
        (WebCore::WMLOptGroupElement::removeChild):
        (WebCore::WMLOptGroupElement::appendChild):
        (WebCore::WMLOptGroupElement::removeChildren):
        (WebCore::ownerSelectElement):
        (WebCore::WMLOptGroupElement::accessKeyAction):
        (WebCore::WMLOptGroupElement::childrenChanged):
        (WebCore::WMLOptGroupElement::parseMappedAttribute):
        (WebCore::WMLOptGroupElement::attach):
        (WebCore::WMLOptGroupElement::detach):
        (WebCore::WMLOptGroupElement::recalcSelectOptions):
        * wml/WMLOptionElement.cpp:
        (WebCore::ownerSelectElement):
        (WebCore::WMLOptionElement::accessKeyAction):
        (WebCore::WMLOptionElement::childrenChanged):
        (WebCore::WMLOptionElement::parseMappedAttribute):
        (WebCore::WMLOptionElement::attach):
        (WebCore::WMLOptionElement::detach):
        (WebCore::WMLOptionElement::insertedIntoDocument):
        * wml/WMLSelectElement.cpp: Added.
        (WebCore::WMLSelectElement::WMLSelectElement):
        (WebCore::WMLSelectElement::~WMLSelectElement):
        (WebCore::WMLSelectElement::formControlType):
        (WebCore::WMLSelectElement::isKeyboardFocusable):
        (WebCore::WMLSelectElement::isMouseFocusable):
        (WebCore::WMLSelectElement::selectAll):
        (WebCore::WMLSelectElement::recalcStyle):
        (WebCore::WMLSelectElement::dispatchFocusEvent):
        (WebCore::WMLSelectElement::dispatchBlurEvent):
        (WebCore::WMLSelectElement::selectedIndex):
        (WebCore::WMLSelectElement::setSelectedIndex):
        (WebCore::WMLSelectElement::saveFormControlState):
        (WebCore::WMLSelectElement::restoreFormControlState):
        (WebCore::WMLSelectElement::childrenChanged):
        (WebCore::WMLSelectElement::parseMappedAttribute):
        (WebCore::WMLSelectElement::createRenderer):
        (WebCore::WMLSelectElement::appendFormData):
        (WebCore::WMLSelectElement::optionToListIndex):
        (WebCore::WMLSelectElement::listToOptionIndex):
        (WebCore::WMLSelectElement::reset):
        (WebCore::WMLSelectElement::defaultEventHandler):
        (WebCore::WMLSelectElement::accessKeyAction):
        (WebCore::WMLSelectElement::setActiveSelectionAnchorIndex):
        (WebCore::WMLSelectElement::setActiveSelectionEndIndex):
        (WebCore::WMLSelectElement::updateListBoxSelection):
        (WebCore::WMLSelectElement::listBoxOnChange):
        (WebCore::WMLSelectElement::menuListOnChange):
        (WebCore::WMLSelectElement::activeSelectionStartListIndex):
        (WebCore::WMLSelectElement::activeSelectionEndListIndex):
        (WebCore::WMLSelectElement::accessKeySetSelectedIndex):
        (WebCore::WMLSelectElement::setRecalcListItems):
        (WebCore::WMLSelectElement::scrollToSelection):
        (WebCore::WMLSelectElement::insertedIntoTree):
        * wml/WMLSelectElement.h: Added.
        (WebCore::WMLSelectElement::canSelectAll):
        (WebCore::WMLSelectElement::canStartSelection):
        (WebCore::WMLSelectElement::size):
        (WebCore::WMLSelectElement::multiple):
        (WebCore::WMLSelectElement::listItems):
        * wml/WMLTagNames.in:

2009-05-29  David Levin  <levin@chromium.org>

        Reviewed by NOBODY (build fix for windows).

        http://trac.webkit.org/changeset/44279 left in a "Vector<WCHAR> localeNameBuf"
        that it was trying to replace.  Resulting in this variable being defined twice (and
        the second time incorrectly).

        * platform/win/Language.cpp:
        (WebCore::localeInfo):

2009-05-29  Takeshi Yoshino  <tyoshino@google.com>

        Reviewed by Darin Alder.

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

        Fix behavior of the Element View of the Web Inspector for double
        clicking the element outline tree.

        Double clicking the element outline tree should
        1) on attribute: enter attribute editing mode
        2) on text: enter text editing mode
        3) otherwise: change root node to the parent element of double clicked
           element.

        Now, 3) is broken. For example, clicking <html> clears the element
        outline view.

        rootDOMNode should be updated to this.representedObject.parentNode, not
        this.parent.representedObject which is parent inside the element
        outline tree itself.

        * inspector/front-end/ElementsTreeOutline.js:
        (WebInspector.ElementsTreeElement.prototype.ondblclick):

2009-05-29  David Moore  <davemoore@google.com>

        Reviewed by Darin Alder.

        https://bugs.webkit.org/show_bug.cgi?id=26001
        Change many of the uses of String::adopt() to String::createUninitialized().
        This allows those strings to use an inlined buffer for their characters.

        * dom/StyleElement.cpp:
        Loop over nodes to precompute length of string and then
        write the characters into the allocated inline buffer
        (WebCore::StyleElement::process):
        * dom/Text.cpp:
        Loop over nodes to precompute length of string and then
        write the characters into the allocated inline buffer
        (WebCore::Text::wholeText):
        (WebCore::Text::rendererIsNeeded):
        (WebCore::Text::createRenderer):
        (WebCore::Text::createWithLengthLimit):
        (WebCore::Text::formatForDebugger):
        * platform/text/String.cpp:
        (WebCore::String::append):
        (WebCore::String::insert):
        (WebCore::String::truncate):
        (WebCore::String::remove):
        * platform/text/StringBuilder.cpp:
        (WebCore::StringBuilder::toString):
        * platform/text/StringImpl.cpp:
        (WebCore::StringImpl::lower):
        (WebCore::StringImpl::upper):
        (WebCore::StringImpl::secure):
        (WebCore::StringImpl::foldCase):
        (WebCore::StringImpl::replace):
        * platform/text/TextCodecLatin1.cpp:
        (WebCore::TextCodecLatin1::decode):
        * platform/text/TextCodecUserDefined.cpp:
        (WebCore::TextCodecUserDefined::decode):
        * platform/win/Language.cpp:
        (WebCore::localeInfo):

2009-05-29  Takeshi Yoshino  <tyoshino@google.com>

        Reviewed by Darin Alder.

        Bug 25911: Apply href in base elements to anchors shown on the source viewer
        https://bugs.webkit.org/show_bug.cgi?id=25911

        In rendering HTML sources, parse base elements to apply the base URI to
        anchors shown on the source viewer.

        This issue was originally reported to the Chromium issue tracker.
        http://code.google.com/p/chromium/issues/detail?id=2418

        Test: fast/frames/viewsource-link-on-href-value.html

        * html/HTMLViewSourceDocument.cpp:
        (WebCore::HTMLViewSourceDocument::addViewSourceToken):

2009-05-29  Rob Buis  <rwlbuis@gmail.com>

        Reviewed by David Hyatt.

        https://bugs.webkit.org/show_bug.cgi?id=22429
        document.styleSheets collection ignores media=presentation

        Ensure that stylesheets though <link> show up in document.styleSheets regardless of media attribute.

        Test: fast/css/sheet-collection-link.html

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

2009-05-29  Jian Li  <jianli@chromium.org>

        Reviewed by Dimitri Glazkov.

        https://bugs.webkit.org/show_bug.cgi?id=26069
        Fix a crash in custom V8 bindings code for XMLHttpRequest.

        Test: fast/xmlhttprequest/xmlhttprequest-open-after-iframe-onload-remove-self.html

        * bindings/v8/custom/V8XMLHttpRequestCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):

2009-05-29  David Levin  <levin@chromium.org>

        Reviewed by Darin Adler.

        Bug 26074: SQLTransaction::executeSQL does an unnecessary call to String::copy.
        https://bugs.webkit.org/show_bug.cgi?id=26074

        The constructor for SQLStatement already does a copy for this string.

        * storage/SQLTransaction.cpp:
        (WebCore::SQLTransaction::executeSQL):

2009-05-29  Darin Adler  <darin@apple.com>

        Fix build; the new Cairo code compiled on Windows only.

        * platform/graphics/gtk/FontPlatformData.h: Added syntheticBold
        and syntheticOblique functions as in the Windows version to make it
        easier to use this cross-platform. Later we can make data members
        private as in the Windows version.
        * platform/graphics/mac/FontPlatformData.h: Ditto.

2009-05-29  Alexander Macdonald  <alexmac@adobe.com>

        Reviewed by Darin Adler.

        Added support for synthetic bold/oblique font rendering
        on platforms that use cairo.

        * platform/graphics/SimpleFontData.h:
        * platform/graphics/cairo/FontCairo.cpp:
        (WebCore::Font::drawGlyphs):
        * platform/graphics/gtk/SimpleFontDataGtk.cpp:
        (WebCore::SimpleFontData::platformInit):
        * platform/graphics/gtk/SimpleFontDataPango.cpp:
        (WebCore::SimpleFontData::platformInit):
        * platform/graphics/win/SimpleFontDataCairoWin.cpp:
        (WebCore::SimpleFontData::platformInit):

2009-05-29  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Beth Dakin.

        Bug 26024: AX: possible to fail assertion because AXPostNotification calls accessibilityIsIgnored
        https://bugs.webkit.org/show_bug.cgi?id=26024

        AX notifications are posted after a one shot timer so that notifications are not performed mid-layout.
        Consolidated postNotification and postNotificationToElement into one method.

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::AXObjectCache):
        (WebCore::AXObjectCache::notificationPostTimerFired):
        (WebCore::AXObjectCache::postNotification):
        (WebCore::AXObjectCache::selectedChildrenChanged):
        * accessibility/AXObjectCache.h:
        (WebCore::AXObjectCache::postNotification):
        (WebCore::AXObjectCache::postPlatformNotification):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::handleActiveDescendantChanged):
        * accessibility/chromium/AXObjectCacheChromium.cpp:
        (WebCore::AXObjectCache::postPlatformNotification):
        * accessibility/gtk/AXObjectCacheAtk.cpp:
        (WebCore::AXObjectCache::postPlatformNotification):
        * accessibility/mac/AXObjectCacheMac.mm:
        (WebCore::AXObjectCache::postPlatformNotification):
        * accessibility/win/AXObjectCacheWin.cpp:
        (WebCore::AXObjectCache::postPlatformNotification):
        * dom/Document.cpp:
        (WebCore::Document::implicitClose):
        * editing/Editor.cpp:
        (WebCore::Editor::respondToChangedContents):
        * editing/mac/SelectionControllerMac.mm:
        (WebCore::SelectionController::notifyAccessibilityForSelectionChange):
        * page/FrameView.cpp:
        (WebCore::FrameView::layout):
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::setInnerTextValue):

2009-05-29  Brent Fulgham  <bfulgham@webkit.org>

        Reviewed by Adam Roben.

        Build fix for Windows Cairo target.
        https://bugs.webkit.org/show_bug.cgi?id=25972

        Compiler mistakenly selects SMILTime min/max instead of STL version,
        resulting in a build error.  This change makes the meaning of the
        min/max explicit and avoids the problem.

        * html/TimeRanges.h:
        (WebCore::TimeRanges::Range::unionWithOverlappingOrContiguousRange):

2009-05-29  Gustavo Noronha Silva  <gns@gnome.org>

        Reviewed by Jan Alonzo.

        Make SoupMessage a member of ResourceRequest, instead of creating
        it in startHttp. Implement updating of ResourceRequest from
        SoupMessage, and vice versa.

        * GNUmakefile.am:
        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::ResourceHandle::~ResourceHandle):
        (WebCore::gotHeadersCallback):
        (WebCore::ResourceHandle::startHttp):
        * platform/network/soup/ResourceRequest.h:
        (WebCore::ResourceRequest::ResourceRequest):
        (WebCore::ResourceRequest::~ResourceRequest):
        * platform/network/soup/ResourceRequestSoup.cpp: Added.
        (WTF::SoupURI):
        (WebCore::ResourceRequest::soupMessage):
        (WebCore::ResourceRequest::ResourceRequest):
        (WebCore::ResourceRequest::doUpdateResourceRequest):
        (WebCore::ResourceRequest::doUpdatePlatformRequest):

2009-05-28  Dmitry Titov  <dimich@chromium.org>

        Reviewed by Dimitri Glazkov.

        https://bugs.webkit.org/show_bug.cgi?id=26068
        V8: Remove the remaining b8::Locker usage in worker code.
        This completes the fix for https://bugs.webkit.org/show_bug.cgi?id=25944,
        since the patches for enabling timers and that bug have "crossed in the queue".
        Existing LayoutTests/fast/workers/worker-timeout.html covers this fix (will start work in Chromium).

        * bindings/v8/ScheduledAction.cpp:
        (WebCore::ScheduledAction::execute):

2009-05-28  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Xan Lopez.

        Simplify the Accept-Encoding header we are sending out, for it
        seems some servers do not enjoy parsing the full, explicit
        version.

        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::ResourceHandle::startHttp):

2009-05-28  Dirk Schulze  <krit@webkit.org>

        Reviewed by Nikolas Zimmermann.

        Added a new build flag --filters. This replaces the old --svg-filters and enables
        other parts of WebKit to use some basic filters of platform/graphics/filters if needed.
        This patch also fixes a bug in dom/DOMImplementation.cpp where we used SVG_FILTER. This flag
        doesn't exist and was replaced by FILTERS as well as all SVG_FILTERS occurrences.
        Filters are not working yet. This patch is just a preperation. Filters are deactivated by
        default. 

        * Configurations/FeatureDefines.xcconfig:
        * DerivedSources.make:
        * GNUmakefile.am:
        * WebCore.pro:
        * bindings/objc/DOM.mm:
        (WebCore::createElementClassMap):
        * dom/DOMImplementation.cpp:
        (WebCore::isSVG10Feature):
        (WebCore::isSVG11Feature):
        * page/DOMWindow.idl:
        * platform/graphics/filters/FEBlend.cpp:
        * platform/graphics/filters/FEBlend.h:
        * platform/graphics/filters/FEColorMatrix.cpp:
        * platform/graphics/filters/FEColorMatrix.h:
        * platform/graphics/filters/FEComponentTransfer.cpp:
        * platform/graphics/filters/FEComponentTransfer.h:
        * platform/graphics/filters/FEComposite.cpp:
        * platform/graphics/filters/FEComposite.h:
        * platform/graphics/filters/FilterEffect.cpp:
        * platform/graphics/filters/FilterEffect.h:
        * platform/graphics/filters/SourceAlpha.cpp:
        * platform/graphics/filters/SourceAlpha.h:
        * platform/graphics/filters/SourceGraphic.cpp:
        * platform/graphics/filters/SourceGraphic.h:
        * rendering/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::selfWillPaint):
        * rendering/RenderSVGModelObject.cpp:
        * rendering/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::selfWillPaint):
        * rendering/SVGRenderSupport.cpp:
        (WebCore::SVGRenderBase::prepareToRenderSVGContent):
        (WebCore::SVGRenderBase::finishRenderSVGContent):
        (WebCore::SVGRenderBase::filterBoundingBoxForRenderer):
        * svg/Filter.cpp:
        * svg/Filter.h:
        * svg/FilterBuilder.cpp:
        * svg/FilterBuilder.h:
        * svg/SVGComponentTransferFunctionElement.cpp:
        * svg/SVGComponentTransferFunctionElement.h:
        * svg/SVGComponentTransferFunctionElement.idl:
        * svg/SVGFEBlendElement.cpp:
        * svg/SVGFEBlendElement.h:
        * svg/SVGFEBlendElement.idl:
        * svg/SVGFEColorMatrixElement.cpp:
        * svg/SVGFEColorMatrixElement.h:
        * svg/SVGFEColorMatrixElement.idl:
        * svg/SVGFEComponentTransferElement.cpp:
        * svg/SVGFEComponentTransferElement.h:
        * svg/SVGFEComponentTransferElement.idl:
        * svg/SVGFECompositeElement.cpp:
        * svg/SVGFECompositeElement.h:
        * svg/SVGFECompositeElement.idl:
        * svg/SVGFEDiffuseLightingElement.cpp:
        * svg/SVGFEDiffuseLightingElement.h:
        * svg/SVGFEDiffuseLightingElement.idl:
        * svg/SVGFEDisplacementMapElement.cpp:
        * svg/SVGFEDisplacementMapElement.h:
        * svg/SVGFEDisplacementMapElement.idl:
        * svg/SVGFEDistantLightElement.cpp:
        * svg/SVGFEDistantLightElement.h:
        * svg/SVGFEDistantLightElement.idl:
        * svg/SVGFEFloodElement.cpp:
        * svg/SVGFEFloodElement.h:
        * svg/SVGFEFloodElement.idl:
        * svg/SVGFEFuncAElement.cpp:
        * svg/SVGFEFuncAElement.h:
        * svg/SVGFEFuncAElement.idl:
        * svg/SVGFEFuncBElement.cpp:
        * svg/SVGFEFuncBElement.h:
        * svg/SVGFEFuncBElement.idl:
        * svg/SVGFEFuncGElement.cpp:
        * svg/SVGFEFuncGElement.h:
        * svg/SVGFEFuncGElement.idl:
        * svg/SVGFEFuncRElement.cpp:
        * svg/SVGFEFuncRElement.h:
        * svg/SVGFEFuncRElement.idl:
        * svg/SVGFEGaussianBlurElement.cpp:
        * svg/SVGFEGaussianBlurElement.h:
        * svg/SVGFEGaussianBlurElement.idl:
        * svg/SVGFEImageElement.cpp:
        * svg/SVGFEImageElement.h:
        * svg/SVGFEImageElement.idl:
        * svg/SVGFELightElement.cpp:
        * svg/SVGFELightElement.h:
        * svg/SVGFEMergeElement.cpp:
        * svg/SVGFEMergeElement.h:
        * svg/SVGFEMergeElement.idl:
        * svg/SVGFEMergeNodeElement.cpp:
        * svg/SVGFEMergeNodeElement.h:
        * svg/SVGFEMergeNodeElement.idl:
        * svg/SVGFEOffsetElement.cpp:
        * svg/SVGFEOffsetElement.h:
        * svg/SVGFEOffsetElement.idl:
        * svg/SVGFEPointLightElement.cpp:
        * svg/SVGFEPointLightElement.h:
        * svg/SVGFEPointLightElement.idl:
        * svg/SVGFESpecularLightingElement.cpp:
        * svg/SVGFESpecularLightingElement.h:
        * svg/SVGFESpecularLightingElement.idl:
        * svg/SVGFESpotLightElement.cpp:
        * svg/SVGFESpotLightElement.h:
        * svg/SVGFESpotLightElement.idl:
        * svg/SVGFETileElement.cpp:
        * svg/SVGFETileElement.h:
        * svg/SVGFETileElement.idl:
        * svg/SVGFETurbulenceElement.cpp:
        * svg/SVGFETurbulenceElement.h:
        * svg/SVGFETurbulenceElement.idl:
        * svg/SVGFilterElement.cpp:
        * svg/SVGFilterElement.h:
        * svg/SVGFilterElement.idl:
        * svg/SVGFilterPrimitiveStandardAttributes.cpp:
        * svg/SVGFilterPrimitiveStandardAttributes.h:
        * svg/graphics/SVGResourceFilter.cpp:
        * svg/graphics/SVGResourceFilter.h:
        * svg/graphics/cairo/SVGResourceFilterCairo.cpp:
        * svg/graphics/cg/SVGResourceFilterCg.cpp:
        * svg/graphics/cg/SVGResourceFilterCg.mm:
        * svg/graphics/filters/SVGDistantLightSource.h:
        * svg/graphics/filters/SVGFEConvolveMatrix.cpp:
        * svg/graphics/filters/SVGFEConvolveMatrix.h:
        * svg/graphics/filters/SVGFEDiffuseLighting.cpp:
        * svg/graphics/filters/SVGFEDiffuseLighting.h:
        * svg/graphics/filters/SVGFEDisplacementMap.cpp:
        * svg/graphics/filters/SVGFEDisplacementMap.h:
        * svg/graphics/filters/SVGFEFlood.cpp:
        * svg/graphics/filters/SVGFEFlood.h:
        * svg/graphics/filters/SVGFEGaussianBlur.cpp:
        * svg/graphics/filters/SVGFEGaussianBlur.h:
        * svg/graphics/filters/SVGFEImage.cpp:
        * svg/graphics/filters/SVGFEImage.h:
        * svg/graphics/filters/SVGFEMerge.cpp:
        * svg/graphics/filters/SVGFEMerge.h:
        * svg/graphics/filters/SVGFEMorphology.cpp:
        * svg/graphics/filters/SVGFEMorphology.h:
        * svg/graphics/filters/SVGFEOffset.cpp:
        * svg/graphics/filters/SVGFEOffset.h:
        * svg/graphics/filters/SVGFESpecularLighting.cpp:
        * svg/graphics/filters/SVGFESpecularLighting.h:
        * svg/graphics/filters/SVGFETile.cpp:
        * svg/graphics/filters/SVGFETile.h:
        * svg/graphics/filters/SVGFETurbulence.cpp:
        * svg/graphics/filters/SVGFETurbulence.h:
        * svg/graphics/filters/SVGFilterEffect.cpp:
        * svg/graphics/filters/SVGFilterEffect.h:
        * svg/graphics/filters/SVGLightSource.cpp:
        * svg/graphics/filters/SVGLightSource.h:
        * svg/graphics/filters/SVGPointLightSource.h:
        * svg/graphics/filters/SVGSpotLightSource.h:
        * svg/graphics/filters/cg/SVGFEHelpersCg.h:
        * svg/graphics/filters/cg/SVGFEHelpersCg.mm:
        * svg/graphics/filters/cg/SVGFilterEffectCg.mm:
        * svg/graphics/filters/cg/WKArithmeticFilter.h:
        * svg/graphics/filters/cg/WKArithmeticFilter.m:
        * svg/graphics/filters/cg/WKComponentMergeFilter.h:
        * svg/graphics/filters/cg/WKComponentMergeFilter.m:
        * svg/graphics/filters/cg/WKDiffuseLightingFilter.h:
        * svg/graphics/filters/cg/WKDiffuseLightingFilter.m:
        * svg/graphics/filters/cg/WKDiscreteTransferFilter.h:
        * svg/graphics/filters/cg/WKDiscreteTransferFilter.m:
        * svg/graphics/filters/cg/WKDisplacementMapFilter.h:
        * svg/graphics/filters/cg/WKDisplacementMapFilter.m:
        * svg/graphics/filters/cg/WKDistantLightFilter.h:
        * svg/graphics/filters/cg/WKDistantLightFilter.m:
        * svg/graphics/filters/cg/WKGammaTransferFilter.h:
        * svg/graphics/filters/cg/WKGammaTransferFilter.m:
        * svg/graphics/filters/cg/WKIdentityTransferFilter.h:
        * svg/graphics/filters/cg/WKIdentityTransferFilter.m:
        * svg/graphics/filters/cg/WKLinearTransferFilter.h:
        * svg/graphics/filters/cg/WKLinearTransferFilter.m:
        * svg/graphics/filters/cg/WKNormalMapFilter.h:
        * svg/graphics/filters/cg/WKNormalMapFilter.m:
        * svg/graphics/filters/cg/WKPointLightFilter.h:
        * svg/graphics/filters/cg/WKPointLightFilter.m:
        * svg/graphics/filters/cg/WKSpecularLightingFilter.h:
        * svg/graphics/filters/cg/WKSpecularLightingFilter.m:
        * svg/graphics/filters/cg/WKSpotLightFilter.h:
        * svg/graphics/filters/cg/WKSpotLightFilter.m:
        * svg/graphics/filters/cg/WKTableTransferFilter.h:
        * svg/graphics/filters/cg/WKTableTransferFilter.m:
        * svg/graphics/mac/SVGResourceFilterPlatformDataMac.h:
        * svg/graphics/mac/SVGResourceFilterPlatformDataMac.mm:
        * svg/graphics/qt/SVGResourceFilterQt.cpp:
        * svg/graphics/skia/SVGResourceFilterSkia.cpp:
        * svg/svgtags.in:

2009-05-28  Brett Wilson  <brettw@chromium.org>

        Unreviewed, build fix.

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

        Add casts for scale function to make more explicit what is happening
        and fix a compiler warning.

        * platform/graphics/IntSize.h:
        (WebCore::IntSize::scale):

2009-05-28  Sam Weinig  <sam@webkit.org>

        Reviewed by Darin Adler.

        Remove the returnValueSlot concept from JSDOMWindowBase. Now that windows
        are not cleared on navigation it is no longer necessary.

        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::JSDOMWindowBaseData::JSDOMWindowBaseData):
        (WebCore::JSDOMWindowBase::willRemoveFromWindowShell):
        * bindings/js/JSDOMWindowBase.h:
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::showModalDialog):

2009-05-19  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Jan Alonzo and Gustavo Noronha.

        https://bugs.webkit.org/show_bug.cgi?id=25415
        [GTK][ATK] Please implement support for get_text_at_offset

        Implement atk_text_get_text_{at,after,before}_offset.

        * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:

2009-05-28  Nikolas Zimmermann  <nikolas.zimmermann@torchmobile.com>

        Rubber-stamped by Darin Adler.

        Remove unnecessary destructor from InputElementData/OptionElementData.

        * dom/InputElement.cpp:
        * dom/InputElement.h:
        * dom/OptionElement.cpp:
        * dom/OptionElement.h:

2009-05-28  Nikolas Zimmermann  <nikolas.zimmermann@torchmobile.com>

        Reviewed by Darin Adler.

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

        Refactor code from all virtual methods in HTMLSelectElement (that are also needed for WMLSelectElement)
        in the recently introduced SelectElement abstract base class. Follow the same design sheme that InputElement uses.

        A follow-up patch can now easily add WMLSelectElement.

        * dom/OptionElement.h:
        * dom/SelectElement.cpp:
        (WebCore::SelectElement::selectAll):
        (WebCore::SelectElement::saveLastSelection):
        (WebCore::isOptionElement):
        (WebCore::isOptionGroupElement):
        (WebCore::SelectElement::nextSelectableListIndex):
        (WebCore::SelectElement::previousSelectableListIndex):
        (WebCore::SelectElement::setActiveSelectionAnchorIndex):
        (WebCore::SelectElement::setActiveSelectionEndIndex):
        (WebCore::SelectElement::updateListBoxSelection):
        (WebCore::SelectElement::listBoxOnChange):
        (WebCore::SelectElement::menuListOnChange):
        (WebCore::SelectElement::scrollToSelection):
        (WebCore::SelectElement::recalcStyle):
        (WebCore::SelectElement::setRecalcListItems):
        (WebCore::SelectElement::recalcListItems):
        (WebCore::SelectElement::selectedIndex):
        (WebCore::SelectElement::setSelectedIndex):
        (WebCore::SelectElement::optionToListIndex):
        (WebCore::SelectElement::listToOptionIndex):
        (WebCore::SelectElement::dispatchFocusEvent):
        (WebCore::SelectElement::dispatchBlurEvent):
        (WebCore::SelectElement::deselectItems):
        (WebCore::SelectElement::saveFormControlState):
        (WebCore::SelectElement::restoreFormControlState):
        (WebCore::SelectElement::parseMultipleAttribute):
        (WebCore::SelectElement::appendFormData):
        (WebCore::SelectElement::reset):
        (WebCore::SelectElement::menuListDefaultEventHandler):
        (WebCore::SelectElement::listBoxDefaultEventHandler):
        (WebCore::SelectElement::defaultEventHandler):
        (WebCore::SelectElement::lastSelectedListIndex):
        (WebCore::stripLeadingWhiteSpace):
        (WebCore::SelectElement::typeAheadFind):
        (WebCore::SelectElement::insertedIntoTree):
        (WebCore::SelectElementData::SelectElementData):
        (WebCore::SelectElementData::checkListItems):
        (WebCore::SelectElementData::listItems):
        * dom/SelectElement.h:
        (WebCore::SelectElementData::multiple):
        (WebCore::SelectElementData::setMultiple):
        (WebCore::SelectElementData::size):
        (WebCore::SelectElementData::setSize):
        (WebCore::SelectElementData::usesMenuList):
        (WebCore::SelectElementData::lastOnChangeIndex):
        (WebCore::SelectElementData::setLastOnChangeIndex):
        (WebCore::SelectElementData::lastOnChangeSelection):
        (WebCore::SelectElementData::activeSelectionState):
        (WebCore::SelectElementData::setActiveSelectionState):
        (WebCore::SelectElementData::activeSelectionAnchorIndex):
        (WebCore::SelectElementData::setActiveSelectionAnchorIndex):
        (WebCore::SelectElementData::activeSelectionEndIndex):
        (WebCore::SelectElementData::setActiveSelectionEndIndex):
        (WebCore::SelectElementData::cachedStateForActiveSelection):
        (WebCore::SelectElementData::shouldRecalcListItems):
        (WebCore::SelectElementData::setShouldRecalcListItems):
        (WebCore::SelectElementData::rawListItems):
        (WebCore::SelectElementData::repeatingChar):
        (WebCore::SelectElementData::setRepeatingChar):
        (WebCore::SelectElementData::lastCharTime):
        (WebCore::SelectElementData::setLastCharTime):
        (WebCore::SelectElementData::typedString):
        (WebCore::SelectElementData::setTypedString):
        * html/HTMLOptionElement.h:
        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::HTMLSelectElement):
        (WebCore::HTMLSelectElement::recalcStyle):
        (WebCore::HTMLSelectElement::formControlType):
        (WebCore::HTMLSelectElement::selectedIndex):
        (WebCore::HTMLSelectElement::deselectItems):
        (WebCore::HTMLSelectElement::setSelectedIndex):
        (WebCore::HTMLSelectElement::activeSelectionStartListIndex):
        (WebCore::HTMLSelectElement::activeSelectionEndListIndex):
        (WebCore::HTMLSelectElement::saveFormControlState):
        (WebCore::HTMLSelectElement::restoreFormControlState):
        (WebCore::HTMLSelectElement::parseMappedAttribute):
        (WebCore::HTMLSelectElement::canSelectAll):
        (WebCore::HTMLSelectElement::selectAll):
        (WebCore::HTMLSelectElement::createRenderer):
        (WebCore::HTMLSelectElement::appendFormData):
        (WebCore::HTMLSelectElement::optionToListIndex):
        (WebCore::HTMLSelectElement::listToOptionIndex):
        (WebCore::HTMLSelectElement::recalcListItems):
        (WebCore::HTMLSelectElement::setRecalcListItems):
        (WebCore::HTMLSelectElement::reset):
        (WebCore::HTMLSelectElement::dispatchFocusEvent):
        (WebCore::HTMLSelectElement::dispatchBlurEvent):
        (WebCore::HTMLSelectElement::defaultEventHandler):
        (WebCore::HTMLSelectElement::setActiveSelectionAnchorIndex):
        (WebCore::HTMLSelectElement::setActiveSelectionEndIndex):
        (WebCore::HTMLSelectElement::updateListBoxSelection):
        (WebCore::HTMLSelectElement::menuListOnChange):
        (WebCore::HTMLSelectElement::listBoxOnChange):
        (WebCore::HTMLSelectElement::saveLastSelection):
        (WebCore::HTMLSelectElement::setOption):
        (WebCore::HTMLSelectElement::scrollToSelection):
        (WebCore::HTMLSelectElement::insertedIntoTree):
        * html/HTMLSelectElement.h:
        (WebCore::HTMLSelectElement::size):
        (WebCore::HTMLSelectElement::multiple):
        (WebCore::HTMLSelectElement::listItems):
        * wml/WMLOptionElement.cpp:
        (WebCore::WMLOptionElement::text):
        * wml/WMLOptionElement.h:


        * dom/OptionElement.h:
        * dom/SelectElement.cpp:
        (WebCore::SelectElement::selectAll):
        (WebCore::SelectElement::saveLastSelection):
        (WebCore::isOptionElement):
        (WebCore::isOptionGroupElement):
        (WebCore::SelectElement::nextSelectableListIndex):
        (WebCore::SelectElement::previousSelectableListIndex):
        (WebCore::SelectElement::setActiveSelectionAnchorIndex):
        (WebCore::SelectElement::setActiveSelectionEndIndex):
        (WebCore::SelectElement::updateListBoxSelection):
        (WebCore::SelectElement::listBoxOnChange):
        (WebCore::SelectElement::menuListOnChange):
        (WebCore::SelectElement::scrollToSelection):
        (WebCore::SelectElement::recalcStyle):
        (WebCore::SelectElement::setRecalcListItems):
        (WebCore::SelectElement::recalcListItems):
        (WebCore::SelectElement::selectedIndex):
        (WebCore::SelectElement::setSelectedIndex):
        (WebCore::SelectElement::optionToListIndex):
        (WebCore::SelectElement::listToOptionIndex):
        (WebCore::SelectElement::dispatchFocusEvent):
        (WebCore::SelectElement::dispatchBlurEvent):
        (WebCore::SelectElement::deselectItems):
        (WebCore::SelectElement::saveFormControlState):
        (WebCore::SelectElement::restoreFormControlState):
        (WebCore::SelectElement::parseMultipleAttribute):
        (WebCore::SelectElement::appendFormData):
        (WebCore::SelectElement::reset):
        (WebCore::SelectElement::menuListDefaultEventHandler):
        (WebCore::SelectElement::listBoxDefaultEventHandler):
        (WebCore::SelectElement::defaultEventHandler):
        (WebCore::SelectElement::lastSelectedListIndex):
        (WebCore::stripLeadingWhiteSpace):
        (WebCore::SelectElement::typeAheadFind):
        (WebCore::SelectElement::insertedIntoTree):
        (WebCore::SelectElementData::SelectElementData):
        (WebCore::SelectElementData::~SelectElementData):
        (WebCore::SelectElementData::checkListItems):
        (WebCore::SelectElementData::listItems):
        * dom/SelectElement.h:
        (WebCore::SelectElementData::multiple):
        (WebCore::SelectElementData::setMultiple):
        (WebCore::SelectElementData::size):
        (WebCore::SelectElementData::setSize):
        (WebCore::SelectElementData::usesMenuList):
        (WebCore::SelectElementData::lastOnChangeIndex):
        (WebCore::SelectElementData::setLastOnChangeIndex):
        (WebCore::SelectElementData::lastOnChangeSelection):
        (WebCore::SelectElementData::activeSelectionState):
        (WebCore::SelectElementData::setActiveSelectionState):
        (WebCore::SelectElementData::activeSelectionAnchorIndex):
        (WebCore::SelectElementData::setActiveSelectionAnchorIndex):
        (WebCore::SelectElementData::activeSelectionEndIndex):
        (WebCore::SelectElementData::setActiveSelectionEndIndex):
        (WebCore::SelectElementData::cachedStateForActiveSelection):
        (WebCore::SelectElementData::shouldRecalcListItems):
        (WebCore::SelectElementData::setShouldRecalcListItems):
        (WebCore::SelectElementData::rawListItems):
        (WebCore::SelectElementData::repeatingChar):
        (WebCore::SelectElementData::setRepeatingChar):
        (WebCore::SelectElementData::lastCharTime):
        (WebCore::SelectElementData::setLastCharTime):
        (WebCore::SelectElementData::typedString):
        (WebCore::SelectElementData::setTypedString):
        * html/HTMLOptionElement.h:
        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::HTMLSelectElement):
        (WebCore::HTMLSelectElement::recalcStyle):
        (WebCore::HTMLSelectElement::formControlType):
        (WebCore::HTMLSelectElement::selectedIndex):
        (WebCore::HTMLSelectElement::deselectItems):
        (WebCore::HTMLSelectElement::setSelectedIndex):
        (WebCore::HTMLSelectElement::activeSelectionStartListIndex):
        (WebCore::HTMLSelectElement::activeSelectionEndListIndex):
        (WebCore::HTMLSelectElement::saveFormControlState):
        (WebCore::HTMLSelectElement::restoreFormControlState):
        (WebCore::HTMLSelectElement::parseMappedAttribute):
        (WebCore::HTMLSelectElement::canSelectAll):
        (WebCore::HTMLSelectElement::selectAll):
        (WebCore::HTMLSelectElement::createRenderer):
        (WebCore::HTMLSelectElement::appendFormData):
        (WebCore::HTMLSelectElement::optionToListIndex):
        (WebCore::HTMLSelectElement::listToOptionIndex):
        (WebCore::HTMLSelectElement::recalcListItems):
        (WebCore::HTMLSelectElement::setRecalcListItems):
        (WebCore::HTMLSelectElement::reset):
        (WebCore::HTMLSelectElement::dispatchFocusEvent):
        (WebCore::HTMLSelectElement::dispatchBlurEvent):
        (WebCore::HTMLSelectElement::defaultEventHandler):
        (WebCore::HTMLSelectElement::setActiveSelectionAnchorIndex):
        (WebCore::HTMLSelectElement::setActiveSelectionEndIndex):
        (WebCore::HTMLSelectElement::updateListBoxSelection):
        (WebCore::HTMLSelectElement::menuListOnChange):
        (WebCore::HTMLSelectElement::listBoxOnChange):
        (WebCore::HTMLSelectElement::saveLastSelection):
        (WebCore::HTMLSelectElement::setOption):
        (WebCore::HTMLSelectElement::scrollToSelection):
        (WebCore::HTMLSelectElement::insertedIntoTree):
        * html/HTMLSelectElement.h:
        (WebCore::HTMLSelectElement::size):
        (WebCore::HTMLSelectElement::multiple):
        (WebCore::HTMLSelectElement::listItems):
        * wml/WMLOptionElement.cpp:
        (WebCore::WMLOptionElement::text):
        * wml/WMLOptionElement.h:

2009-05-28  Adam Roben  <aroben@apple.com>

        Don't try to use the new combobox parts on Vista in Classic mode

        Fixes:
        <rdar://problem/6929277> REGRESSION (r42289+r42350): Windows Classic
        theme: drop down lists in Preferences get a line/square
        <rdar://problem/6929298> REGRESSION (r42289): Windows Classic: drop
        down lists are black with a circle on many sites

        Reviewed by Steve Falkenburg.

        * rendering/RenderThemeWin.cpp:
        (WebCore::RenderThemeWin::paintMenuList): Only use the new combobox
        parts when we have a theme (i.e., when we're not in Classic mode).
        When we don't have a theme, fall back to the pre-r42289 code.

2009-05-27  Peter Kasting  <pkasting@google.com>

        Reviewed by Simon Fraser.

        https://bugs.webkit.org/show_bug.cgi?id=25659
        Avoid calling frameCount() unnecessarily (which could lead to extra
        GIF decoding).

        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::destroyDecodedDataIfNecessary):

2009-05-28  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Oliver Hunt.
        
        https://bugs.webkit.org/show_bug.cgi?id=8736

        Tests: fast/borders/border-radius-constraints.html
               fast/borders/border-radius-split-inline.html
               
        When the sum of the corner radii on a side exceed the length of the side,
        reduce the radii according to CSS 3 rules.
        
        Add RenderStyle::getBorderRadiiForRect() to fetch corner radii, applying
        the constraints. Use that for painting borders, box-shadow, clipping replaced
        elements

        * platform/graphics/IntSize.h:
        (WebCore::IntSize::scale):
        Add a scale method that scales by a float (using C rounding rules, like IntRect::scale()).

        * platform/graphics/Path.cpp:
        Make the QUARTER const static.

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::pushContentsClip):
        Use getBorderRadiiForRect to fetch border radii.

        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintFillLayerExtended):
        Use getBorderRadiiForRect to fetch border radii.

        (WebCore::RenderBoxModelObject::paintBorder):
        Use getBorderRadiiForRect to fetch border radii, and fix a bug when drawing
        borders for split inlines, which used to apply the radii for each segment,
        and no longer does.

        (WebCore::RenderBoxModelObject::paintBoxShadow):
        Use getBorderRadiiForRect to fetch border radii.

        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::paint):
        Use getBorderRadiiForRect to fetch border radii for clipping.

        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::paint):
        Use getBorderRadiiForRect to fetch border radii for clipping.

        * rendering/style/RenderStyle.h:
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::getBorderRadiiForRect):
        New bottleneck method to fetch corner radiil given a rect, applying the constraint
        rules.

2009-05-28  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=26005
        Optimization for XPath //* does not preserve context size

        Test: fast/xpath/position.html

        Fixed the bug by removing the incorrect optimization, and made enough micro-optimizations to
        get a performance progression on my tests.

        * xml/XPathPath.h: Removed broken optimizeStepPair().

        * xml/XPathPath.cpp:
        (WebCore::XPath::LocationPath::evaluate): Style fix.
        (WebCore::XPath::LocationPath::appendStep): Don't call optimizeStepPair().
        (WebCore::XPath::LocationPath::insertFirstStep): Ditto.
        (WebCore::XPath::Path::Path): Style fix.

        * xml/XPathStep.cpp:
        (WebCore::XPath::primaryNodeType): Turned this member function into a static inline helper.
        (WebCore::XPath::nodeMatches): Ditto. Don't check for namespace axis, which is unsupported
        (and might never be).
        (WebCore::XPath::Step::nodesInAxis): Updated for the new nodeMatches() signature.

        * xml/XPathStep.h:
        (WebCore::XPath::Step::NodeTest::data):
        (WebCore::XPath::Step::NodeTest::namespaceURI):
        Made these data members AtomicString to avoid repeated conversions. This is the biggest
        performance win here.

        * xml/XPathUtil.cpp: (WebCore::XPath::stringValue): Reserve some capacity upfront.

2009-05-28  Stephen White  <senorblanco@chromium.org>

        Reviewed by Dimitri Glazkov.

        When creating a linear or radial gradient with a single stop
        at offset 1.0, the Skia layer was allocating 3 stops, but only
        filling 2, leaving one uninitialized.  Only 2 stops are necessary
        in this case, at offsets (0.0, 1.0).

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

        Covered by: LayoutTests/svg/W3C-SVG-1.1/pservers-grad-16-b.svg
                    LayoutTests/svg/custom/gradient-stop-corner-cases.svg
                    LayoutTests/svg/custom/js-late-gradient-and-object-creation.svg

        * platform/graphics/skia/GradientSkia.cpp:
        (WebCore::totalStopsNeeded):

2009-05-28  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Timothy Hatcher.

        https://bugs.webkit.org/show_bug.cgi?id=26041
        Allow adding resource source to WebInspector.SourceFrame asynchronously.

        Provide common implementation for InspectorController::addResourceSourceToFrame and
        InspectorController::addSourceToFrame methods.

        * bindings/js/JSInspectorControllerCustom.cpp:
        * bindings/v8/custom/V8InspectorControllerCustom.cpp:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::addResourceSourceToFrame):
        * inspector/InspectorController.h:
        * inspector/InspectorController.idl:
        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype.revealLine):
        (WebInspector.SourceFrame.prototype.highlightLine):
        (WebInspector.SourceFrame.prototype._loaded):
        (WebInspector.SourceFrame.prototype._isContentLoaded):
        * inspector/front-end/SourceView.js:
        (WebInspector.SourceView.prototype.setupSourceFrameIfNeeded):
        (WebInspector.SourceView.prototype._contentLoaded):

2009-05-28  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Xan Lopez.

        After r44177 we had a problem when increasing the size
        of the window the scrollbars stayed and were not hidden.
        This was due WebCore giving up on the Scrollbar as it became
        unnecessary but the GtkAdjustment remained unchanged.
        So from the point of view of the GtkScrolledWindow scrolling
        was still necessary and the GtkScrollbar kept being displayed.

        Solve the issue by resetting the GtkAdjustment in the
        destructor of ScrollbarGtk.

        * platform/gtk/ScrollbarGtk.cpp:
        (ScrollbarGtk::~ScrollbarGtk):

2009-05-28  Adam Barth  <abarth@webkit.org>

        Reviewed by Darin Adler.

        Clean up window.open()'s use of lexical and dynamic scope.

        (Added one unreviewed tweak: use dynamicFrame instead of lexicalFrame
        for DOMWindow::allowPopUp.)

        Test: http/tests/security/frameNavigation/context-for-window-open.html

        * bindings/js/JSDOMBinding.cpp:
        (WebCore::toDynamicFrame):
        (WebCore::processingUserGesture):
        (WebCore::completeURL):
        * bindings/js/JSDOMBinding.h:
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::createWindow):
        (WebCore::JSDOMWindow::open):
        (WebCore::JSDOMWindow::showModalDialog):
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        (WebCore::createWindow):

2009-05-27  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Oliver Hunt.

        https://bugs.webkit.org/show_bug.cgi?id=26056
        XPath string() function can be very slow

        * xml/XPathUtil.cpp: (WebCore::XPath::stringValue): Use an intermediate Vector when appending.

2009-05-27  Dan Bernstein  <mitz@apple.com>

        Reviewed by Sam Weinig.

        - fix <rdar://problem/6927761> <isindex> placeholder text is unstylable
          and initially not visible

        Test: fast/forms/isindex-placeholder.html

        * css/html4.css: Added a default style for <isindex> placeholder text.
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::parseMappedAttribute): Changed to call
        the new protected function updatePlaceholderVisibility().
        * html/HTMLInputElement.h:
        (WebCore::HTMLInputElement::updatePlaceholderVisibility): Added this
        protected function to allow HTMLIsIndexElement::parseMappedAttribute()
        to invoke InputElement::updatePlaceholderVisibility().
        * html/HTMLIsIndexElement.cpp:
        (WebCore::HTMLIsIndexElement::parseMappedAttribute): Call
        updatePlaceholderVisibility() when parsing the placeholder attribute.
        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::createInnerTextStyle): If there
        is no placeholder pseudo-element style, use the normal style.

2009-05-27  Sam Weinig  <sam@webkit.org>

        Reviewed by Maciej Stachowiak.

        More cleanup of DOMWindow related functions.

        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::willRemoveFromWindowShell): Renamed from JSDOMWindowBase::clear()
        * bindings/js/JSDOMWindowBase.h:

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::showModalDialog): Update Comment.

        * bindings/js/JSDOMWindowShell.cpp:
        * bindings/js/JSDOMWindowShell.h:
        Remove JSDOMWindowShell::clear().  It was unused.

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

2009-05-27  Sam Weinig  <sam@webkit.org>

        Reviewed by David Hyatt.

        Miscellaneous cleanup of DOMWindow related functions.

        * bindings/js/JSDOMGlobalObject.cpp:
        (WebCore::JSDOMGlobalObject::~JSDOMGlobalObject): Fix poorly named variables.
        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::supportsProfiling): Don't jump through hoops
        checking for null frames if the build does not support profiling.
        (WebCore::JSDOMWindowBase::clear): Use setCurrentEvent(0) instead of calling
        clearHelperObjectProperties().  It is clearer.
        * bindings/js/JSDOMWindowBase.h:
        Removed now unused clearHelperObjectProperties() function, empty disconnectFrame()
        function, and the empty destructor.
        * bindings/js/JSDOMWindowShell.cpp:
        * bindings/js/JSDOMWindowShell.h:
        Remove disconnectFrame() which only called JSDOMWindowBase::disconnectFrame(), which
        is a no-op.
        * page/Frame.cpp:
        (WebCore::Frame::~Frame):
        (WebCore::Frame::pageDestroyed):
        Remove calls to JSDOMWindowShell::disconnectFrame() which only called
        JSDOMWindowBase::disconnectFrame(), which is a no-op.

2009-05-27  Dimitri Glazkov  <dglazkov@chromium.org>

        Unreviewed, build fix.

        https://bugs.webkit.org/show_bug.cgi?id=25974
        Remove extra qualifiers from the ScheduledAction decl.

        * bindings/v8/ScheduledAction.h: Removed extraneous class qualifiers.

2009-05-27  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Unreviewed make distcheck fix. One more missing file.

        * GNUmakefile.am:

2009-05-27  Antonio Gomes   <antonio.gomes@openbossa.org>

        Reviewed by Simon Hausmann.

        [Qt] Fixed trunk build on Linux after r44126.

        * WebCore.pro:

2009-05-27  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Oliver Hunt.

        <rdar://problem/6926046> REGRESSION (r43972): http://www.youtube.com/html5 crashes on open

        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::load): Don't look for a media engine based on an empty MIME type.

2009-05-27  David Levin  <levin@chromium.org>

        Reviewed by Maciej Stachowiak.

        Bug 26029: FrameLoader::canLoad should allow calls with just a security origin
        https://bugs.webkit.org/show_bug.cgi?id=26029

        No functional changes, so no tests.

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

2009-05-27  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Unreviewed build fix.

        Remove file that does not exist from the build.

        * GNUmakefile.am:

2009-05-27  Nikolas Zimmermann  <nikolas.zimmermann@torchmobile.com>

        Reviewed by Darin Adler.

        Remove two unneeded protected constructors, these classes have pure-virtual functions, and can't be constructed anyway.

        * dom/InputElement.h:
        * dom/OptionGroupElement.h:

2009-05-27  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=17725
        XPath should be case insensitive for HTML

        Test: fast/xpath/node-name-case-sensitivity.html

        * xml/XPathStep.cpp: (WebCore::XPath::Step::nodeMatches): Made node name check case insensitive
        for HTML elements in HTML documents.

2009-05-27  John Sullivan  <sullivan@apple.com>

        fixed <rdar://problem/6925482> repro crash in WebCore::DragController::dragExited dropping 
        bookmarks (at least) over Top Sites (at least)

        Reviewed by Kevin Decker

        * page/DragController.cpp:
        (WebCore::DragController::dragExited):
        nil check m_documentUnderMouse and take the "local file" case if it's nil

2009-05-27  Fridrich Strba  <fridrich.strba@bluewin.ch>

        Reviewed by Gustavo Noronha.

        When building on window, consider Windows specific files.

        * GNUmakefile.am:

2009-05-27  Nikolas Zimmermann  <nikolas.zimmermann@torchmobile.com>

        Reviewed by George Staikos.

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

        InputElementData is too heavy, save storing two pointers by passing them
        directly to the static helper functions (the only place which needs them). 

        * dom/InputElement.cpp:
        (WebCore::InputElement::dispatchFocusEvent):
        (WebCore::InputElement::dispatchBlurEvent):
        (WebCore::InputElement::updatePlaceholderVisibility):
        (WebCore::InputElement::updateFocusAppearance):
        (WebCore::InputElement::updateSelectionRange):
        (WebCore::InputElement::aboutToUnload):
        (WebCore::InputElement::setValueFromRenderer):
        (WebCore::InputElement::constrainValue):
        (WebCore::InputElement::handleBeforeTextInsertedEvent):
        (WebCore::InputElement::parseSizeAttribute):
        (WebCore::InputElement::parseMaxLengthAttribute):
        (WebCore::InputElement::updateValueIfNeeded):
        (WebCore::InputElement::notifyFormStateChanged):
        (WebCore::InputElementData::InputElementData):
        * dom/InputElement.h:
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::HTMLInputElement):
        (WebCore::HTMLInputElement::updateFocusAppearance):
        (WebCore::HTMLInputElement::aboutToUnload):
        (WebCore::HTMLInputElement::dispatchFocusEvent):
        (WebCore::HTMLInputElement::dispatchBlurEvent):
        (WebCore::HTMLInputElement::setInputType):
        (WebCore::HTMLInputElement::setSelectionRange):
        (WebCore::HTMLInputElement::parseMappedAttribute):
        (WebCore::HTMLInputElement::setValue):
        (WebCore::HTMLInputElement::setValueFromRenderer):
        (WebCore::HTMLInputElement::setFileListFromRenderer):
        (WebCore::HTMLInputElement::defaultEventHandler):
        (WebCore::HTMLInputElement::constrainValue):
        * wml/WMLInputElement.cpp:
        (WebCore::WMLInputElement::WMLInputElement):
        (WebCore::WMLInputElement::dispatchFocusEvent):
        (WebCore::WMLInputElement::dispatchBlurEvent):
        (WebCore::WMLInputElement::updateFocusAppearance):
        (WebCore::WMLInputElement::aboutToUnload):
        (WebCore::WMLInputElement::setValue):
        (WebCore::WMLInputElement::setValueFromRenderer):
        (WebCore::WMLInputElement::parseMappedAttribute):
        (WebCore::WMLInputElement::defaultEventHandler):
        (WebCore::WMLInputElement::constrainValue):

2009-05-27  Nikolas Zimmermann  <nikolas.zimmermann@torchmobile.com>

        Reviewed by George Staikos.

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

        OptionElementData saves an Element pointer, which is unnessary.
        Just pass it to the static function calls directly.

        * dom/OptionElement.cpp:
        (WebCore::OptionElement::setSelectedState):
        (WebCore::OptionElement::collectOptionText):
        (WebCore::OptionElement::collectOptionTextRespectingGroupLabel):
        (WebCore::OptionElement::collectOptionValue):
        (WebCore::OptionElementData::OptionElementData):
        * dom/OptionElement.h:
        * html/HTMLOptionElement.cpp:
        (WebCore::HTMLOptionElement::HTMLOptionElement):
        (WebCore::HTMLOptionElement::text):
        (WebCore::HTMLOptionElement::value):
        (WebCore::HTMLOptionElement::setSelected):
        (WebCore::HTMLOptionElement::setSelectedState):
        (WebCore::HTMLOptionElement::textIndentedToRespectGroupLabel):
        * wml/WMLOptionElement.cpp:
        (WebCore::WMLOptionElement::WMLOptionElement):
        (WebCore::WMLOptionElement::setSelectedState):
        (WebCore::WMLOptionElement::value):
        (WebCore::WMLOptionElement::textIndentedToRespectGroupLabel):

2009-05-27  Fridrich Strba  <fridrich.strba@bluewin.ch>

        Reviewed by Maciej Stachowiak.

        When building with MinGW, don't use the __declspec(dl{import,export})
        decorations and rely on the linker to use its nifty auto-import feature.
        It is extremely hard to get the decorations right with MinGW in general
        and impossible in WebKit, where the resulting shared library is linking 
        together some static libraries.

        * config.h:

2009-05-26  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Xan Lopez.

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

        Add a WebCore::Widget that can embed GtkWidget with and
        without a GdkWindow. This can be used to embed any GtkWidget.

        Some bits are directly copied from the Scrollbar implementation
        but can not be easily shared here.

        * GNUmakefile.am:
        * platform/gtk/GtkPluginWidget.cpp: Added.
        (WebCore::GtkPluginWidget::GtkPluginWidget):
        (WebCore::GtkPluginWidget::invalidateRect):
        (WebCore::GtkPluginWidget::frameRectsChanged):
        (WebCore::GtkPluginWidget::paint):
        * platform/gtk/GtkPluginWidget.h: Added.

2009-05-26  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Gustavo Noronha.

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

        Implement Widget::setIsSelected for Gtk+ by searching
        for a property of the name "webkit-widget-is-selected" and if
        such property exists we are going to set it. We expect
        the property to take a boolean.

        * platform/gtk/WidgetGtk.cpp:
        (WebCore::Widget::setIsSelected):

2009-05-26  Sam Weinig  <sam@webkit.org>

        Reviewed by Brady Eidson.

        Fix for <rdar://problem/6916371>
        iWeb 'Announce' button does nothing after publishing to MobileMe

        Add ability to force content sniffing for all urls (including file: urls)

        * WebCore.base.exp:
        * platform/network/ResourceHandle.cpp:
        (WebCore::ResourceHandle::shouldContentSniffURL):
        (WebCore::ResourceHandle::forceContentSniffing):
        * platform/network/ResourceHandle.h:

2009-05-26  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Holger Freyther.

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

        [Qt] Dead-code stripping for unix

        * WebCore.pro: Turn on GCC dead-code stripping flags for Unix

2009-05-10  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Dave Hyatt.

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

        [GTK] Send onscroll events for the main FrameView

        WebKit/GTK+ is currently not sending any onscroll
        events for a frame with external adjustments. This is
        due the fact that the value-changed signal of the GtkAdjustment
        is handled by WebCore::ScrollView directly and is not going through
        the WebCore::Scrollbar -> WebCore::ScrollbarClient ->
        WebCore::FrameView::valueChanged -> WebCore::ScrollView::valueChanged
        path.

        Fix the above problem by wrapping the GtkAdjustment we get
        assigned from GTK+ in a ScrollbarGtk that will not have any
        visual appearance. Remove code from ScrollView that knows
        about adjustments and create a special case for
        WebCore::ScrollView::createScrollbar that will create such
        a special WebCore::ScrollbarGtk.

        * platform/ScrollView.cpp: Remove adjustment code
        (WebCore::ScrollView::setHasHorizontalScrollbar):
        (WebCore::ScrollView::setHasVerticalScrollbar):
        (WebCore::ScrollView::updateScrollbars):
        (WebCore::ScrollView::wheelEvent):
        * platform/ScrollView.h: Remove adjustment code
        * platform/gtk/ScrollViewGtk.cpp:
        (WebCore::ScrollView::platformDestroy):
        (WebCore::ScrollView::createScrollbar):
        (WebCore::ScrollView::setGtkAdjustments):
        * platform/gtk/ScrollbarGtk.cpp:
        (ScrollbarGtk::createScrollbar): Special case.
        (ScrollbarGtk::ScrollbarGtk):  New ctor and work on the adjustment
        (ScrollbarGtk::~ScrollbarGtk): Disconnect signal
        (ScrollbarGtk::frameRectsChanged): Do nothing when we lack a platformWidget
        * platform/gtk/ScrollbarGtk.h:

2009-05-26  Cameron Zwarich  <zwarich@apple.com>

        Reviewed by Maciej Stachowiak.

        Bug 26035: Make ImageSource::frameHasAlphaAtIndex() return false for JPEGs with CG
        <https://bugs.webkit.org/show_bug.cgi?id=26035>
        <rdar://problem/6924087>

        * platform/graphics/cg/ImageSourceCG.cpp:
        (WebCore::ImageSource::frameHasAlphaAtIndex): return false if the image
        is JPEG, there is no image type, or m_decoder is null.

2009-05-26  Holger Hans Peter Freyther  <zecke@selfish.org>

        Unreviewed build fix for the JPEGImageDecoder.

        Revision 44167 removed stdio.h from the included headers and
        this will lead to an error that FILE is not known inside the
        jpeglib.h Put back the stdio.h include.

        * platform/image-decoders/jpeg/JPEGImageDecoder.cpp:

2009-05-26  Yichao Yin  <yichao.yin@torchmobile.com.cn>

        Reviewed by Maciej Stachowiak.

        Fix the crash issue while running layout tests after enalbed XHTMLMP
        https://bugs.webkit.org/show_bug.cgi?id=26017

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

2009-05-26  Anders Carlsson  <andersca@apple.com>

        Reviewed by Dan Bernstein.

        <rdar://problem/6901751> 
        REGRESSION (r35515): Tiger crash painting the selection on registration page of car2go.com
        
        Don't use the WKCGContextIsSafeToClip function; it wasn't working correctly. Instead, just disable
        the improved selection drawing on Tiger.
        
        * WebCore.Tiger.exp:
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::fillPath):
        (WebCore::GraphicsContext::strokePath):
        (WebCore::GraphicsContext::fillRect):
        (WebCore::GraphicsContext::clip):
        (WebCore::GraphicsContext::clipOut):
        (WebCore::GraphicsContext::clipOutEllipseInRect):
        (WebCore::GraphicsContext::clipPath):
        (WebCore::GraphicsContext::addInnerRoundedRectClip):
        (WebCore::GraphicsContext::strokeRect):
        * platform/mac/WebCoreSystemInterface.h:
        * platform/mac/WebCoreSystemInterface.mm:
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::fillSelectionGaps):

2009-05-26  Peter Kasting  <pkasting@google.com>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=25709 part two
        Mostly cosmetic changes, mainly to get image decoders for Cairo build to
        comply with WebKit style guidelines:
        * Fix header guard names
        * Fix initializer list wrapping
        * Fix class/function "{" wrapping
        * Fix wrapping of long boolean expressions
        * Fix whitespace around operators
        * Eliminate whitespace on otherwise-blank lines
        * No {} on single-line conditional arms
        * Use 0 instead of NULL
        * Don't #include "config.h" in headers

        Also a few non-cosmetic changes:
        * Remove unneeded #ifdef protecting the contents of these files.  The
          platforms listed don't match who uses these files anymore (even
          without considering Skia), and platforms which don't use them at all
          (like CG) aren't harmed by the files, since they don't have
          equivalently-named classes.  It's simpler to just ditch these.
        * Convert a use of Vector<>& into SharedBuffer*, since that's how the
          data is really stored anyway.
        * Use size() instead of m_size, for consistency with Skia code, and
          future-proofing (if a particular decoder wants to specialize this).
        * Move an ASSERT that was slightly more aggressive than necessary.
        * Change variable names/types for clarity/accuracy and to match Skia.
        * Remove unnecessary macro magic to work around a problem which no
          longer exists in the third-party JPEG headers.
        * Stop silencing a portability warning about setjmp (the vcproj/vsprops
          are the right place for this)
        * In Skia code, don't explicitly check |m_failed| before calling
          isSizeAvailable(), which itself checks |m_failed|.

        * platform/image-decoders/ImageDecoder.h: Fix header guards, "{" wrapping.
        (WebCore::RGBA32Buffer::):
        (WebCore::RGBA32Buffer::RGBA32Buffer): Fix initializer list wrapping.
        (WebCore::ImageDecoder::ImageDecoder): Fix initializer list wrapping.
        * platform/image-decoders/bmp/BMPImageDecoder.cpp: Remove unneeded #ifdef.
        * platform/image-decoders/bmp/BMPImageDecoder.h: Fix header guards, "{" wrapping.
        * platform/image-decoders/gif/GIFImageDecoder.cpp: Remove unneeded #ifdef, fix "{" wrapping.
        (WebCore::GIFImageDecoderPrivate::GIFImageDecoderPrivate): Use an initializer instead of a block-level statement.
        (WebCore::GIFImageDecoderPrivate::decode): Expect a SharedBuffer.
        (WebCore::GIFImageDecoderPrivate::getColorMap):
        (WebCore::GIFImageDecoder::GIFImageDecoder): Fix initializer list wrapping.
        (WebCore::GIFImageDecoder::frameCount): Add comment.
        (WebCore::GIFImageDecoder::frameBufferAtIndex): Explicitly cast, fix whitespace around operators.
        (WebCore::GIFImageDecoder::decode): Pass a SharedBuffer.
        (WebCore::GIFImageDecoder::initFrameBuffer): Use size() instead of m_size, move ASSERT, fix boolean wrapping, fix indenting.
        (WebCore::GIFImageDecoder::prepEmptyFrameBuffer): Use size() instead of m_size.
        (WebCore::GIFImageDecoder::haveDecodedRow): Use size() instead of m_size, eliminate unneeded whitespace, change variable name.
        (WebCore::GIFImageDecoder::frameComplete): Use size() instead of m_size, no {} on single-line conditional arms, fix boolean wrapping.
        * platform/image-decoders/gif/GIFImageDecoder.h: Fix header guards, "{" wrapping.
        * platform/image-decoders/gif/GIFImageReader.cpp: Remove unneeded #ifdef.
        (GIFImageReader::read):
        * platform/image-decoders/gif/GIFImageReader.h: Fix header guards, change variable type.
        * platform/image-decoders/ico/ICOImageDecoder.cpp: Remove unneeded #ifdef.
        * platform/image-decoders/ico/ICOImageDecoder.h: Fix header guards, "{" wrapping.
        * platform/image-decoders/jpeg/JPEGImageDecoder.cpp: Remove unneeded #ifdef, macro magic, silencing of warning.
        (WebCore::JPEGImageDecoder::outputScanlines): Use size() instead of m_size, change variable name.
        * platform/image-decoders/jpeg/JPEGImageDecoder.h: Fix header guards, "{" wrapping.
        * platform/image-decoders/png/PNGImageDecoder.cpp: Remove unneeded #ifdef, silencing of warning, change variable type.
        (WebCore::PNGImageReader::PNGImageReader): Fix initializer list wrapping.
        (WebCore::PNGImageReader::close): Add comment, zero another member for consistency.
        (WebCore::PNGImageDecoder::PNGImageDecoder): Fix indenting.
        (WebCore::PNGImageDecoder::decodingFailed): Define in .cpp, not .h.
        (WebCore::PNGImageDecoder::rowAvailable):
        * platform/image-decoders/png/PNGImageDecoder.h: Fix header guards, "{" wrapping.
        * platform/image-decoders/skia/GIFImageDecoder.cpp:
        (WebCore::GIFImageDecoder::isSizeAvailable): Don't check m_failed unnecessarily.
        (WebCore::GIFImageDecoder::frameBufferAtIndex): Fix whitespace around operators.
        * platform/image-decoders/skia/GIFImageReader.h: "unsigned" is sufficient to convey "unsigned int".
        * platform/image-decoders/skia/ImageDecoder.h: Remove unnecessary #includes.
        (WebCore::ImageDecoder::ImageDecoder): Fix initializer list wrapping.
        * platform/image-decoders/skia/JPEGImageDecoder.cpp:
        (WebCore::JPEGImageReader::JPEGImageReader): Use 0 instead of NULL.
        (WebCore::JPEGImageDecoder::isSizeAvailable): Don't check m_failed unnecessarily.
        * platform/image-decoders/skia/PNGImageDecoder.cpp:
        (WebCore::PNGImageReader::PNGImageReader): Fix initializer list wrapping.
        (WebCore::PNGImageDecoder::PNGImageDecoder): Fix indenting.
        (WebCore::PNGImageDecoder::isSizeAvailable): Don't check m_failed unnecessarily.
        (WebCore::rowAvailable):
        * platform/image-decoders/skia/XBMImageDecoder.h: Don't #include config.h.
        * platform/image-decoders/xbm/XBMImageDecoder.cpp: Remove unneeded #ifdef.
        * platform/image-decoders/xbm/XBMImageDecoder.h: Fix header guards, "{" wrapping.

2009-05-26  Jian Li  <jianli@chromium.org>

        Reviewed by Dimitri Glazkov.

        https://bugs.webkit.org/show_bug.cgi?id=25944
        Remove the uses of V8 Locker in worker execution code. No additional test is needed.
        The normal WebKit layout tests should cover it. However, layout tests that start
        multiple workers will fail to pass due to test shell limitation in Chromium. To cover
        this, UI tests will be added (http://code.google.com/p/chromium/issues/detail?id=12554).

        * bindings/v8/V8WorkerContextEventListener.cpp:
        (WebCore::V8WorkerContextEventListener::handleEvent):
        * bindings/v8/WorkerContextExecutionProxy.cpp:
        (WebCore::WorkerContextExecutionProxy::dispose):
        (WebCore::WorkerContextExecutionProxy::initV8IfNeeded):
        (WebCore::WorkerContextExecutionProxy::evaluate):
        (WebCore::WorkerContextExecutionProxy::findOrCreateEventListenerHelper):
        (WebCore::WorkerContextExecutionProxy::RemoveEventListener):

2009-05-26  Dmitry Titov  <dimich@chromium.org>

        Reviewed by Dimitri Glazkov.

        https://bugs.webkit.org/show_bug.cgi?id=25974
        Enable timers in Chromuim workers.

        * bindings/v8/ScheduledAction.cpp:
        (WebCore::ScheduledAction::execute): Added function which can execute a callback using WorkerContext.
        * bindings/v8/ScheduledAction.h:
        (WebCore::ScheduledAction::ScheduledAction): added url parameter to capture the worker's location.
        * bindings/v8/custom/V8WorkerContextCustom.cpp:
        (WebCore::SetTimeoutOrInterval): replaced NotImplemented with code to create ScheduledAction and DOMTimer.
        Also, removed declarations for clearTimeout/clearInterval callbacks since they are now directly generated from IDL.

2009-05-26  Dimitri Glazkov  <dglazkov@chromium.org>

        Unreviewed, build fix.

        https://bugs.webkit.org/show_bug.cgi?id=23649
        Update V8 bindings to match SQLTransactionErrorCallback change.

        * bindings/v8/custom/V8CustomSQLTransactionErrorCallback.cpp:
        (WebCore::V8CustomSQLTransactionErrorCallback::handleEvent): Changed to return void.
        * bindings/v8/custom/V8CustomSQLTransactionErrorCallback.h: Ditto.

2009-05-26  Dirk Schulze  <krit@webkit.org>

        Reviewed by Nikolas Zimmermann.

        Move FilterEffect to platform/graphics/filters. First step to get an
        SVG independent filter system.

        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/filters/FilterEffect.cpp: Added.
        (WebCore::FilterEffect::FilterEffect):
        (WebCore::FilterEffect::~FilterEffect):
        (WebCore::FilterEffect::externalRepresentation):
        * platform/graphics/filters/FilterEffect.h: Added.
        (WebCore::FilterEffect::xBoundingBoxMode):
        (WebCore::FilterEffect::setXBoundingBoxMode):
        (WebCore::FilterEffect::yBoundingBoxMode):
        (WebCore::FilterEffect::setYBoundingBoxMode):
        (WebCore::FilterEffect::widthBoundingBoxMode):
        (WebCore::FilterEffect::setWidthBoundingBoxMode):
        (WebCore::FilterEffect::heightBoundingBoxMode):
        (WebCore::FilterEffect::setHeightBoundingBoxMode):
        (WebCore::FilterEffect::subRegion):
        (WebCore::FilterEffect::setSubRegion):
        (WebCore::FilterEffect::resultImage):
        (WebCore::FilterEffect::setEffectBuffer):
        * svg/FilterEffect.cpp: Removed.
        * svg/FilterEffect.h: Removed.

2009-05-26  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Maciej Stachowiak.

        https://bugs.webkit.org/show_bug.cgi?id=23649
        Update SQLTransactionErrorCallback to not return a value per changes in
        HTML5 spec.

        Test: storage/transaction-error-callback.html

        * bindings/js/JSCustomSQLTransactionErrorCallback.cpp:
        (WebCore::JSCustomSQLTransactionErrorCallback::handleEvent):
        * bindings/js/JSCustomSQLTransactionErrorCallback.h:
        * storage/SQLTransaction.cpp:
        (WebCore::SQLTransaction::SQLTransaction):
        (WebCore::SQLTransaction::postflightAndCommit):
        (WebCore::SQLTransaction::handleTransactionError):
        (WebCore::SQLTransaction::deliverTransactionErrorCallback):
        (WebCore::SQLTransaction::cleanupAfterTransactionErrorCallback):
        * storage/SQLTransaction.h:
        * storage/SQLTransactionErrorCallback.h:

2009-05-26  David Hyatt  <hyatt@apple.com>

        Reviewed by Darin Adler.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=25969

        Detect the case where we can fit without scrollbars when the view shrinks, so that we don't mistakenly
        continue to show scrollbars.

        Added two tests in fast/dynamic.

        * platform/ScrollView.cpp:
        (WebCore::ScrollView::updateScrollbars):

2009-05-26  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Mark Rowe.

        Bug 25801: change AccessibilityAria -> AccessibilityARIA
        https://bugs.webkit.org/show_bug.cgi?id=25801

        * GNUmakefile.am:
        * WebCore.order:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::getOrCreate):
        * accessibility/AccessibilityARIAGrid.cpp: Copied from WebCore/accessibility/AccessibilityAriaGrid.cpp.
        (WebCore::AccessibilityARIAGrid::AccessibilityARIAGrid):
        (WebCore::AccessibilityARIAGrid::~AccessibilityARIAGrid):
        (WebCore::AccessibilityARIAGrid::create):
        (WebCore::AccessibilityARIAGrid::addChild):
        (WebCore::AccessibilityARIAGrid::addChildren):
        (WebCore::AccessibilityARIAGrid::cellForColumnAndRow):
        * accessibility/AccessibilityARIAGrid.h: Copied from WebCore/accessibility/AccessibilityAriaGrid.h.
        * accessibility/AccessibilityARIAGridCell.cpp: Copied from WebCore/accessibility/AccessibilityAriaGridCell.cpp.
        (WebCore::AccessibilityARIAGridCell::AccessibilityARIAGridCell):
        (WebCore::AccessibilityARIAGridCell::~AccessibilityARIAGridCell):
        (WebCore::AccessibilityARIAGridCell::create):
        (WebCore::AccessibilityARIAGridCell::parentTable):
        (WebCore::AccessibilityARIAGridCell::rowIndexRange):
        (WebCore::AccessibilityARIAGridCell::columnIndexRange):
        * accessibility/AccessibilityARIAGridCell.h: Copied from WebCore/accessibility/AccessibilityAriaGridCell.h.
        * accessibility/AccessibilityARIAGridRow.cpp: Copied from WebCore/accessibility/AccessibilityAriaGridRow.cpp.
        (WebCore::AccessibilityARIAGridRow::AccessibilityARIAGridRow):
        (WebCore::AccessibilityARIAGridRow::~AccessibilityARIAGridRow):
        (WebCore::AccessibilityARIAGridRow::create):
        (WebCore::AccessibilityARIAGridRow::parentTable):
        (WebCore::AccessibilityARIAGridRow::headerObject):
        * accessibility/AccessibilityARIAGridRow.h: Copied from WebCore/accessibility/AccessibilityAriaGridRow.h.
        * accessibility/AccessibilityAriaGrid.cpp: Removed.
        * accessibility/AccessibilityAriaGrid.h: Removed.
        * accessibility/AccessibilityAriaGridCell.cpp: Removed.
        * accessibility/AccessibilityAriaGridCell.h: Removed.
        * accessibility/AccessibilityAriaGridRow.cpp: Removed.
        * accessibility/AccessibilityAriaGridRow.h: Removed.

2009-05-26  Stephen White  <senorblanco@chromium.org>

        Reviewed by Dimitri Glazkov.

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

        Fix the Skia path to normalize the given source rect when
        drawing patterns, so it accepts negative width/height (as CG does).
        Fixes Chromium bug http://www.crbug.com/6167.
        * platform/graphics/skia/ImageSkia.cpp:
        (WebCore::Image::drawPattern):

2009-05-26  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Serialize calls to WebInspector. This is the first step where method 
        calls are being serialized to arrays (not yet JSON stringified ones) and 
        are being dispatched on the client. This change also allows client to override 
        InspectorFrontend, so that the serialized calls can be made on a given object
        instead of in-process WebInspector global. This will be the main control flow
        when InspectorController is decoupled from the in-process frontend.

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

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::scriptObjectReady):
        (WebCore::InspectorController::overrideFrontendObject):
        (WebCore::InspectorController::show):
        (WebCore::InspectorController::populateScriptObjects):
        * inspector/InspectorController.h:
        * inspector/InspectorFrontend.cpp:
        (WebCore::InspectorFrontend::addMessageToConsole):
        (WebCore::InspectorFrontend::addResource):
        (WebCore::InspectorFrontend::updateResource):
        (WebCore::InspectorFrontend::removeResource):
        (WebCore::InspectorFrontend::updateFocusedNode):
        (WebCore::InspectorFrontend::setAttachedWindow):
        (WebCore::InspectorFrontend::inspectedWindowScriptObjectCleared):
        (WebCore::InspectorFrontend::showPanel):
        (WebCore::InspectorFrontend::populateInterface):
        (WebCore::InspectorFrontend::reset):
        (WebCore::InspectorFrontend::debuggerWasEnabled):
        (WebCore::InspectorFrontend::debuggerWasDisabled):
        (WebCore::InspectorFrontend::profilerWasEnabled):
        (WebCore::InspectorFrontend::profilerWasDisabled):
        (WebCore::InspectorFrontend::parsedScriptSource):
        (WebCore::InspectorFrontend::failedToParseScriptSource):
        (WebCore::InspectorFrontend::addProfile):
        (WebCore::InspectorFrontend::setRecordingProfile):
        (WebCore::InspectorFrontend::pausedScript):
        (WebCore::InspectorFrontend::resumedScript):
        (WebCore::InspectorFrontend::addDatabase):
        (WebCore::InspectorFrontend::addDOMStorage):
        (WebCore::InspectorFrontend::newFunctionCall):
        (WebCore::InspectorFrontend::callSimpleFunction):
        * inspector/InspectorFrontend.h:
        * inspector/front-end/inspector.js:
        (WebInspector.dispatch):

2009-05-25  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin Adler.

        <rdar://problem/6918671> REGRESSION (r41700): Crashes in debug DumpRenderTree at RefCountedBase::ref().

        * dom/QualifiedName.cpp: (WebCore::QualifiedName::QualifiedName):
        * dom/QualifiedName.h: (WebCore::QualifiedName::QualifiedNameImpl::QualifiedNameImpl):
        Adjust empty namespace before QNameComponentsTranslator black magic, not after.

2009-05-25  David Levin  <levin@chromium.org>

        Reviewed by Maciej Stachowiak and Oliver Hunt.

        Added forwarding headers.

        * ForwardingHeaders/wtf/CrossThreadRefCounted.h: Added.
        * ForwardingHeaders/wtf/OwnFastMallocPtr.h: Added.

2009-05-25  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        - WebCore side of <rdar://problem/6914001>.

        Add a new m_allowPopupsFromPlugin flag.
        
        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::ScriptController):
        (WebCore::ScriptController::processingUserGesture):
        * bindings/js/ScriptController.h:
        (WebCore::ScriptController::setAllowPopupsFromPlugin):
        (WebCore::ScriptController::allowPopupsFromPlugin):

2009-05-25  Adam Barth  <abarth@webkit.org>

        Reviewed by Sam Weinig.

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

        Sort out our use of dynamicGlobalObject and lexicalGlobalObject for
        window.location.  The correct use appears to be as follows:

        1) Use dynamicGlobalObject to find the user gesture.
        2) Use dynamicGlobalObject to complete URLs.
        3) Use lexicalGlobalObject to find the referrer.
        4) Use lexicalGlobalObject for the frame navigation checks.
        5) Use lexicalGlobalObject for the XSS checks.

        Tests: http/tests/security/frameNavigation/context-for-location-assign.html
               http/tests/security/frameNavigation/context-for-location-href.html
               http/tests/security/frameNavigation/context-for-location.html

        * bindings/js/JSDOMBinding.cpp:
        (WebCore::shouldAllowNavigation):
        (WebCore::toLexicalFrame):
        (WebCore::processingUserGesture):
        (WebCore::completeURL):
        * bindings/js/JSDOMBinding.h:
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::setLocation):
        * bindings/js/JSLocationCustom.cpp:
        (WebCore::navigateIfAllowed):
        (WebCore::JSLocation::setHref):
        (WebCore::JSLocation::replace):
        (WebCore::JSLocation::reload):
        (WebCore::JSLocation::assign):
        (WebCore::JSLocation::toString):
        (WebCore::JSLocationPrototype::customPut):
        * bindings/v8/V8Utilities.cpp:
        (WebCore::processingUserGesture):
        (WebCore::shouldAllowNavigation):
        (WebCore::completeURL):
        (WebCore::navigateIfAllowed):
        * bindings/v8/V8Utilities.h:
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::V8Custom::WindowSetLocation):
        * bindings/v8/custom/V8LocationCustom.cpp:
        (WebCore::ACCESSOR_SETTER):
        (WebCore::CALLBACK_FUNC_DECL):

2009-05-25  Fridrich Strba  <fridrich.strba@bluewin.ch>

        Reviewed by Maciej Stachowiak.

        With Windows compilers older then MSVC 2005, the functions
        gmtime_s and localtime_s don't exist. The gmtime and localtime are
        on Windows always thread safe. So use them in the cases where
        gmtime_s and localtime_s are not present.

        * loader/FTPDirectoryDocument.cpp:
        * loader/FTPDirectoryParser.cpp:

2009-05-25  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Simon Hausmann.

        Follow up on r44120. PluginPackageMac.cpp is used
        by Qt on Mac and contained a copy of the m_browserFunc
        assignments and ::equal, ::hash and ::compareFileVersion.
        Change it to use the ones from PluginPackage.cpp as well.

        * plugins/mac/PluginPackageMac.cpp:
        (WebCore::PluginPackage::load):

2009-05-25  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Tor Arne Vestbø.

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

        Support conditionals in the tag factories, by placing
        feature #ifdefs around the individual factory functions
        and the registration.

        Made the Audio and Video elements conditional in the tag factories

        * html/HTMLTagNames.in:
        * dom/make_names.pl:

2009-05-25  Simon Hausmann  <simon.hausmann@nokia.com>

        Fix the Gtk build when video is disabled.

        * GNUmakefile.am: Always generate and compile the IDL files for the media
        elements. They contain proper feature #ifdefs.

2009-05-25  Simon Hausmann  <simon.hausmann@nokia.com>

        Fix the Qt build when video is disabled.

        * WebCore.pro: Always generate the IDL files for the media elements. They
        contain proper ENABLE(VIDEO) #ifdefs.

2009-05-25  Adam Barth  <abarth@webkit.org>

        Reviewed by Maciej Stachowiak.

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

        The origin for postMessage should follow lexical scope, not dynamic
        scope.  Yes, this is a super-obscure corner case.

        Test: http/tests/security/postMessage/origin-follows-lexical-scope.html

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::postMessage):
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):

2009-05-24  Darin Fisher  <darin@chromium.org>

        Reviewed by Mark Rowe.

        Fix build bustage related to PassOwnPtr changes.

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

        * platform/graphics/chromium/TransparencyWin.cpp:

2009-05-24  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Maciej Stachowiak.

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

        Minor cleanup in PluginPackage::hash. Let the compiler
        figure out the size of the array. Do not have it in the
        definition and specially not the in the call to
        StringImpl::hash.

        * plugins/PluginPackage.cpp:
        (WebCore::PluginPackage::hash):

2009-05-24  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Maciej Stachowiak.

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

        Move ::hash, ::equal and ::compareFileVersion from
        the duplicated copies in PluginPackageQt.cpp and
        PluginPackageGtk to PluginPackage.cpp. We need to #ifdef
        this for the PluginPackageWin version. Use the new style
        ENABLE() for this feature/policy and enable it in the Gtk+
        and Qt buildsystem.

        * GNUmakefile.am:
        * WebCore.pro:
        * plugins/PluginPackage.cpp:
        (WebCore::PluginPackage::hash):
        (WebCore::PluginPackage::equal):
        (WebCore::PluginPackage::compareFileVersion):
        * plugins/gtk/PluginPackageGtk.cpp:
        * plugins/qt/PluginPackageQt.cpp:

2009-05-24  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Maciej Stachowiak.

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

        So far the initialization of the browserfuncs struct
        is done in PluginPackageQt, PluginPackageGtk and
        PluginPackageWin there is no need for this duplication.

        The PluginPackageWin version got copied to PluginPackage

        * plugins/PluginPackage.cpp:
        (WebCore::PluginPackage::initializeBrowserFuncs):
        * plugins/PluginPackage.h:
        * plugins/gtk/PluginPackageGtk.cpp:
        (WebCore::PluginPackage::load):
        * plugins/qt/PluginPackageQt.cpp:
        (WebCore::PluginPackage::load):
        * plugins/win/PluginPackageWin.cpp:
        (WebCore::PluginPackage::load):

2009-05-24  Dirk Schulze  <krit@webkit.org>

        Reviewed by Nikolas Zimmermann.

        WebKit needs cross-platform filter system
        [https://bugs.webkit.org/show_bug.cgi?id=19991]

        Added standard input for filter system.

        No testcases were added. Filter system is still off.

        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/filters/SourceAlpha.cpp: Added.
        (WebCore::SourceAlpha::create):
        (WebCore::SourceAlpha::effectName):
        (WebCore::SourceAlpha::apply):
        (WebCore::SourceAlpha::dump):
        * platform/graphics/filters/SourceAlpha.h: Added.
        (WebCore::SourceAlpha::SourceAlpha):
        * platform/graphics/filters/SourceGraphic.cpp: Added.
        (WebCore::SourceGraphic::create):
        (WebCore::SourceGraphic::effectName):
        (WebCore::SourceGraphic::apply):
        (WebCore::SourceGraphic::dump):
        * platform/graphics/filters/SourceGraphic.h: Added.
        (WebCore::SourceGraphic::SourceGraphic):
        * svg/FilterBuilder.cpp: Added.
        (WebCore::FilterBuilder::FilterBuilder):
        (WebCore::FilterBuilder::add):
        (WebCore::FilterBuilder::getEffectById):
        (WebCore::FilterBuilder::clearEffects):
        * svg/FilterBuilder.h:

2009-05-24  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Maciej Stachowiak.

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

        Add support conditionals in the JSC bindings generator code for attributes,
        by placing feature #ifdefs around the setters/getters.

        Made the audio and video element specific DOM attributes conditional
        in the generated code, by moving the #ifdefs from the IDL files into
        the generated code. This allows for re-using the same generated code
        with or without ENABLE(VIDEO).

        * page/DOMWindow.idl:
        * bindings/scripts/CodeGeneratorJS.pm:

2009-05-23  Holger Hans Peter Freyther  <zecke@selfish.org>

        Unreviewed build fix for Qt. Change signature to have PassOwnPtr.

        * platform/text/qt/TextCodecQt.cpp:
        (WebCore::newTextCodecQt):

2009-05-23  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        - clean up ColorMac a little

        * platform/graphics/mac/ColorMac.h: Whitespace change.
        * platform/graphics/mac/ColorMac.mm: Removed redundant #import
        statements and sorted the remaining ones.
        (WebCore::makeRGBAFromNSColor): Replaced four Objective-C method calls
        with a single call and removed redundant casts to int.
        (WebCore::nsColor): Removed ".0f" from number literals used as CGFloats.
        In one case, this avoids an intermediate conversion to float before
        conversion to double on 64-bit.
        (WebCore::CGColorFromNSColor): Replaced four Objective-C method calls
        with a single call.
        (WebCore::focusRingColor):
        (+[WebCoreControlTintObserver controlTintDidChange]): Whitespace change.

2009-05-23  Jan Michael Alonzo  <jmalonzo@webkit.org>

        Reviewed by Xan Lopez.

        [Gtk] ROLE_ROW_HEADER should not be used for list item bullets/numbers
        https://bugs.webkit.org/show_bug.cgi?id=25900

        Use ATK_ROLE_TEXT for ListMarkerRole.

        * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
        (atkRole):

2009-05-23  David Kilzer  <ddkilzer@apple.com>

        Reformat WebCore::requiresContextForWordBoundary()

        * platform/text/TextBoundaries.h:
        (WebCore::requiresContextForWordBoundary):

2009-05-23  Nikolas Zimmermann  <nikolas.zimmermann@torchmobile.com>

        Not reviewed. Roll out ResourceHandle patch, that I accidently included in my last commit.

        * platform/network/ResourceHandle.cpp:
        (WebCore::ResourceHandle::shouldContentSniffURL):

2009-05-23  Nikolas Zimmermann  <nikolas.zimmermann@torchmobile.com>

        Reviewed by Darin Adler.

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

        After a long journey, add the last missing ABC to share form control element support with HTMLSelectElement.
        RenderListBox/RenderMenuList operates on SelectElement instead of HTMLSelectElement now, querying selected index etc.
        This makes it possible to use these render objects for ie. WML, as it's done before for input & option elements.

        WMLSelectElement will be created soon, in a follow-up patch, adding more methods to SelectElement, sharing code between
        HTMLSelectElement/WMLSelectElement.

        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * accessibility/AccessibilityListBox.cpp:
        (WebCore::AccessibilityListBox::addChildren):
        (WebCore::AccessibilityListBox::doAccessibilityHitTest):
        * accessibility/AccessibilityListBoxOption.cpp:
        (WebCore::AccessibilityListBoxOption::listBoxOptionIndex):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::actionElement):
        * dom/Element.h:
        (WebCore::Element::isFormControlElement):
        (WebCore::Element::dispatchFormControlChangeEvent):
        * dom/SelectElement.cpp: Added.
        (WebCore::toSelectElement):
        * dom/SelectElement.h: Added.
        (WebCore::SelectElement::~SelectElement):
        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::dispatchFormControlChangeEvent):
        * html/HTMLFormControlElement.h:
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::setChecked):
        (WebCore::HTMLInputElement::defaultEventHandler):
        * html/HTMLOptionElement.cpp:
        (WebCore::HTMLOptionElement::index):
        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::selectedIndex):
        (WebCore::HTMLSelectElement::lastSelectedListIndex):
        (WebCore::HTMLSelectElement::deselectItems):
        (WebCore::HTMLSelectElement::setSelectedIndex):
        (WebCore::HTMLSelectElement::length):
        (WebCore::HTMLSelectElement::remove):
        (WebCore::HTMLSelectElement::value):
        (WebCore::HTMLSelectElement::setValue):
        (WebCore::HTMLSelectElement::saveFormControlState):
        (WebCore::HTMLSelectElement::restoreFormControlState):
        (WebCore::HTMLSelectElement::selectAll):
        (WebCore::HTMLSelectElement::appendFormData):
        (WebCore::HTMLSelectElement::optionToListIndex):
        (WebCore::HTMLSelectElement::listToOptionIndex):
        (WebCore::HTMLSelectElement::recalcListItems):
        (WebCore::HTMLSelectElement::reset):
        (WebCore::HTMLSelectElement::dispatchFocusEvent):
        (WebCore::HTMLSelectElement::dispatchBlurEvent):
        (WebCore::HTMLSelectElement::menuListDefaultEventHandler):
        (WebCore::HTMLSelectElement::listBoxDefaultEventHandler):
        (WebCore::HTMLSelectElement::setActiveSelectionAnchorIndex):
        (WebCore::HTMLSelectElement::updateListBoxSelection):
        (WebCore::HTMLSelectElement::menuListOnChange):
        (WebCore::HTMLSelectElement::listBoxOnChange):
        (WebCore::HTMLSelectElement::saveLastSelection):
        (WebCore::HTMLSelectElement::typeAheadFind):
        (WebCore::HTMLSelectElement::nextSelectableListIndex):
        (WebCore::HTMLSelectElement::previousSelectableListIndex):
        (WebCore::HTMLSelectElement::setLength):
        (WebCore::HTMLSelectElement::checkListItems):
        * html/HTMLSelectElement.h:
        (WebCore::HTMLSelectElement::size):
        (WebCore::HTMLSelectElement::multiple):
        (WebCore::HTMLSelectElement::listItems):
        (WebCore::HTMLSelectElement::setActiveSelectionEndIndex):
        * platform/network/ResourceHandle.cpp:
        (WebCore::ResourceHandle::shouldContentSniffURL):
        * rendering/RenderFileUploadControl.cpp:
        (WebCore::RenderFileUploadControl::valueChanged):
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::RenderListBox):
        (WebCore::RenderListBox::updateFromElement):
        (WebCore::RenderListBox::scrollToRevealSelection):
        (WebCore::RenderListBox::size):
        (WebCore::RenderListBox::numItems):
        (WebCore::RenderListBox::paintItemForeground):
        (WebCore::RenderListBox::paintItemBackground):
        (WebCore::RenderListBox::panScroll):
        (WebCore::RenderListBox::autoscroll):
        (WebCore::RenderListBox::stopAutoscroll):
        (WebCore::RenderListBox::valueChanged):
        (WebCore::RenderListBox::nodeAtPoint):
        * rendering/RenderListBox.h:
        * rendering/RenderMenuList.cpp:
        (WebCore::RenderMenuList::RenderMenuList):
        (WebCore::RenderMenuList::updateOptionsWidth):
        (WebCore::RenderMenuList::updateFromElement):
        (WebCore::RenderMenuList::setTextFromOption):
        (WebCore::RenderMenuList::showPopup):
        (WebCore::RenderMenuList::valueChanged):
        (WebCore::RenderMenuList::itemText):
        (WebCore::RenderMenuList::itemIsEnabled):
        (WebCore::RenderMenuList::itemStyle):
        (WebCore::RenderMenuList::itemBackgroundColor):
        (WebCore::RenderMenuList::listSize):
        (WebCore::RenderMenuList::selectedIndex):
        (WebCore::RenderMenuList::itemIsSeparator):
        (WebCore::RenderMenuList::itemIsLabel):
        (WebCore::RenderMenuList::itemIsSelected):
        (WebCore::RenderMenuList::setTextFromItem):
        * rendering/RenderMenuList.h:
        * rendering/RenderSlider.cpp:
        (WebCore::RenderSlider::setValueForPosition):

2009-05-23  David Kilzer  <ddkilzer@apple.com>

        Fix Gtk/Qt builds for PassOwnPtr

        * platform/graphics/cairo/ImageCairo.cpp:
        (WebCore::Image::drawPattern): Use an OwnPtr<ImageBuffer>
        instead of an std::auto_ptr<ImageBuffer> to store the result of
        ImageBuffer::create() now that it returns a
        PassOwnPtr<ImageBuffer>.
        * platform/graphics/qt/PathQt.cpp:
        (WebCore::Path::strokeContains): Ditto.
        (WebCore::Path::strokeBoundingRect): Ditto.

2009-05-23  David Kilzer  <ddkilzer@apple.com>

        Part 2 of 2: Bug 25495: Implement PassOwnPtr and replace uses of std::auto_ptr

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

        Reviewed by Oliver Hunt.

        No test cases added since there is no change in behavior.

        * WebCore.base.exp: Updated export for
        HistoryItem::setRedirectURLs() which now takes a PassOwnPtr.
        * dom/Node.cpp:
        (WebCore::Node::childNodes): Use NodeListsNodeData::create()
        instead of new NodeListsNodeData.
        (WebCore::Node::registerDynamicNodeList): Ditto.
        (WebCore::Node::getElementsByTagNameNS): Ditto.
        (WebCore::Node::getElementsByName): Ditto.
        (WebCore::Node::getElementsByClassName): Ditto.
        * dom/NodeRareData.h:
        (WebCore::NodeListsNodeData::create): Added.  Implements
        create() pattern popularized by RefCounted classes.
        (WebCore::NodeListsNodeData::NodeListsNodeData): Declared
        private constructor.
        (WebCore::NodeRareData::setNodeLists): Now takes a PassOwnPtr<>
        instead of an auto_ptr<>.
        * history/HistoryItem.cpp:
        (WebCore::HistoryItem::setRedirectURLs): Ditto.
        * history/HistoryItem.h:
        (WebCore::HistoryItem::setRedirectURLs): Ditto.
        * html/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::drawTextInternal): Use
        OwnPtr<> instead of auto_ptr<> for stack variable.
        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::createImageBuffer): Updated to use
        assignment operator now that ImageBuffer::create() returns a
        PassOwnPtr<>.
        * loader/EmptyClients.h:
        (WebCore::EmptyChromeClient::createHTMLParserQuirks): Return a
        PassOwnPtr<> instead of a raw HTMLParserQuirks pointer.
        * page/ChromeClient.h:
        (WebCore::ChromeClient::createHTMLParserQuirks): Ditto.
        * platform/graphics/GeneratedImage.cpp:
        (WebCore::GeneratedImage::drawPattern): Use OwnPtr<> instead of
        auto_ptr<> for stack variable.
        * platform/graphics/ImageBuffer.h:
        (WebCore::ImageBuffer::create): Return PassOwnPtr<> instead of
        auto_ptr<>.  Use OwnPtr<> instead of auto_ptr<> for stack
        variable.
        * platform/mac/ScrollbarThemeMac.mm:
        (WebCore::ScrollbarThemeMac::paint): Use OwnPtr<> instead of
        auto_ptr<> for stack variable.
        * platform/text/TextCodec.h:
        (WebCore::NewTextCodecFunction): Return PassOwnPtr<> instead of
        auto_ptr<>.
        * platform/text/TextCodecICU.cpp:
        (WebCore::newTextCodecICU): Ditto.
        * platform/text/TextCodecLatin1.cpp:
        (WebCore::newStreamingTextDecoderWindowsLatin1): Ditto.
        * platform/text/TextCodecUTF16.cpp:
        (WebCore::newStreamingTextDecoderUTF16LE): Ditto.
        (WebCore::newStreamingTextDecoderUTF16BE): Ditto.
        * platform/text/TextCodecUserDefined.cpp:
        (WebCore::newStreamingTextDecoderUserDefined): Ditto.
        * platform/text/TextEncodingRegistry.cpp:
        (WebCore::newTextCodec): Ditto.
        * platform/text/TextEncodingRegistry.h:
        (WebCore::newTextCodec): Ditto.
        * platform/text/mac/TextCodecMac.cpp:
        (WebCore::newTextCodecMac): Ditto.
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintFillLayerExtended): Use
        OwnPtr<> instead of auto_ptr<> for stack variable.
        * svg/SVGMaskElement.cpp:
        (WebCore::SVGMaskElement::drawMaskerContent): Ditto.  Return
        OwnPtr<> instead of auto_ptr<>.
        * svg/SVGMaskElement.h:
        (WebCore::SVGMaskElement::drawMaskerContent): Return OwnPtr<>
        instead of auto_ptr<>.
        * svg/SVGPatternElement.cpp:
        (WebCore::SVGPatternElement::buildPattern): Use OwnPtr<> instead
        of auto_ptr<> for stack variable.
        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::nativeImageForCurrentFrame): Updated to use
        assignment operator now that ImageBuffer::create() returns a
        PassOwnPtr<>.
        * svg/graphics/SVGPaintServerGradient.cpp:
        (WebCore::createMaskAndSwapContextForTextGradient): Use OwnPtr<>
        instead of auto_ptr<> for stack variable.
        * svg/graphics/SVGPaintServerPattern.cpp:
        (WebCore::SVGPaintServerPattern::setTile): Updated to take a
        PassOwnPtr<> instead of an auto_ptr<>.
        (WebCore::SVGPaintServerPattern::setup): Use OwnPtr<> instead of
        auto_ptr<> for stack variable.
        * svg/graphics/SVGPaintServerPattern.h:
        (WebCore::SVGPaintServerPattern::setTile): Updated to take a
        PassOwnPtr<> instead of an auto_ptr<>.
        * svg/graphics/SVGResourceMasker.cpp:
        (WebCore::SVGResourceMasker::applyMask): Updated to use
        assignment operator now that SVGMaskElement::drawMaskerContent()
        returns a PassOwnPtr<>.  Use OwnPtr<> instead of auto_ptr<> for
        stack variable.

2009-05-23  David Kilzer  <ddkilzer@apple.com>

        Part 1 of 2: Bug 25495: Implement PassOwnPtr and replace uses of std::auto_ptr

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

        Reviewed by Oliver Hunt.

        * ForwardingHeaders/wtf/OwnPtrCommon.h: Added.
        * ForwardingHeaders/wtf/PassOwnPtr.h: Added.
        * WebCore.vcproj/WebCore.vcproj: Added OwnPtrCommon.h and
        PassOwnPtr.h.

2009-05-23  David Kilzer  <ddkilzer@apple.com>

        Fix Mac builds by backing out r44093

        * bindings/js/JSCustomPositionCallback.cpp:
        * bindings/js/JSCustomPositionCallback.h:
        * bindings/js/JSCustomPositionErrorCallback.cpp:
        * bindings/js/JSCustomPositionErrorCallback.h:
        * bindings/js/JSGeolocationCustom.cpp:
        * page/Geolocation.cpp:
        * page/Geolocation.idl:
        * page/Geoposition.cpp:
        * page/Geoposition.h:
        * page/Geoposition.idl:
        * page/Navigator.cpp:
        (WebCore::Navigator::disconnectFrame):
        (WebCore::Navigator::geolocation):
        * page/PositionError.idl:
        * platform/GeolocationService.cpp:
        (WebCore::GeolocationService::create):

2009-05-23  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Eric Seidel.

        Add GEOLOCATION guards around Geolocation API code
        https://bugs.webkit.org/show_bug.cgi?id=25756

        * bindings/js/JSCustomPositionCallback.cpp:
        * bindings/js/JSCustomPositionCallback.h:
        * bindings/js/JSCustomPositionErrorCallback.cpp:
        * bindings/js/JSCustomPositionErrorCallback.h:
        * bindings/js/JSGeolocationCustom.cpp:
        * page/Geolocation.cpp:
        * page/Geolocation.idl:
        * page/Geoposition.cpp:
        * page/Geoposition.h:
        * page/Geoposition.idl:
        * page/Navigator.cpp:
        (WebCore::Navigator::disconnectFrame):
        (WebCore::Navigator::geolocation):
        * page/PositionError.idl:
        * platform/GeolocationService.cpp:

2009-05-23  David Kilzer  <ddkilzer@apple.com>

        Rename startupdateStyleIfNeededDispatcher to startUpdateStyleIfNeededDispatcher

        In r42377, startUpdateRenderingDispatcher() was renamed to
        startupdateStyleIfNeededDispatcher(), but the camelCase "U" was
        dropped.  This change restores it.

        * WebCore.order:
        * page/animation/AnimationController.cpp:
        (WebCore::AnimationControllerPrivate::startUpdateStyleIfNeededDispatcher):
        (WebCore::AnimationControllerPrivate::addEventToDispatch):
        (WebCore::AnimationControllerPrivate::addNodeChangeToDispatch):
        (WebCore::AnimationControllerPrivate::pauseAnimationAtTime):
        (WebCore::AnimationControllerPrivate::pauseTransitionAtTime):
        * page/animation/AnimationControllerPrivate.h:

2009-05-23  Holger Hans Peter Freyther  <zecke@selfish.org>

        Unreviewed build-fix for Qt. Disable SVG Filters.

        SVG Filters can not be built right now and Qt should not have
        them enabled anyway as they do not carry out any filtering.

        * WebCore.pro:

2009-05-23  Dirk Schulze  <krit@webkit.org>

        Unreviewed build-fix for gtk. Remove source input files
        for SVG filter system from the build for the moment and
        add them later again.

        * GNUmakefile.am:

2009-05-23  Dirk Schulze  <krit@webkit.org>

        Reviewed by Eric Seidel.

        WebKit needs cross-platform filter system
        [https://bugs.webkit.org/show_bug.cgi?id=19991]

        Preparing Filter primitves for the new filter system.

        No testcases were added. SVG filters are off by default.

        * GNUmakefile.am:
        * platform/graphics/filters/FEBlend.cpp:
        (WebCore::FEBlend::apply):
        * platform/graphics/filters/FEBlend.h:
        * platform/graphics/filters/FEColorMatrix.cpp:
        (WebCore::FEColorMatrix::apply):
        * platform/graphics/filters/FEColorMatrix.h:
        * platform/graphics/filters/FEComponentTransfer.cpp:
        (WebCore::FEComponentTransfer::apply):
        * platform/graphics/filters/FEComponentTransfer.h:
        * platform/graphics/filters/FEComposite.cpp:
        (WebCore::FEComposite::apply):
        * platform/graphics/filters/FEComposite.h:
        * svg/Filter.h:
        * svg/FilterBuilder.h:
        (WebCore::FilterBuilder::lastFilter):
        * svg/FilterEffect.cpp:
        (WebCore::FilterEffect::FilterEffect):
        * svg/FilterEffect.h:
        (WebCore::FilterEffect::xBoundingBoxMode):
        (WebCore::FilterEffect::setXBoundingBoxMode):
        (WebCore::FilterEffect::yBoundingBoxMode):
        (WebCore::FilterEffect::setYBoundingBoxMode):
        (WebCore::FilterEffect::widthBoundingBoxMode):
        (WebCore::FilterEffect::setWidthBoundingBoxMode):
        (WebCore::FilterEffect::heightBoundingBoxMode):
        (WebCore::FilterEffect::setHeightBoundingBoxMode):
        (WebCore::FilterEffect::subRegion):
        (WebCore::FilterEffect::setSubRegion):
        (WebCore::FilterEffect::resultImage):
        (WebCore::FilterEffect::setEffectBuffer):
        * svg/graphics/filters/SVGFEConvolveMatrix.cpp:
        (WebCore::FEConvolveMatrix::apply):
        * svg/graphics/filters/SVGFEConvolveMatrix.h:
        * svg/graphics/filters/SVGFEDiffuseLighting.cpp:
        (WebCore::FEDiffuseLighting::apply):
        * svg/graphics/filters/SVGFEDiffuseLighting.h:
        * svg/graphics/filters/SVGFEDisplacementMap.cpp:
        (WebCore::FEDisplacementMap::apply):
        * svg/graphics/filters/SVGFEDisplacementMap.h:
        * svg/graphics/filters/SVGFEFlood.cpp:
        (WebCore::FEFlood::apply):
        * svg/graphics/filters/SVGFEFlood.h:
        * svg/graphics/filters/SVGFEGaussianBlur.cpp:
        (WebCore::FEGaussianBlur::apply):
        * svg/graphics/filters/SVGFEGaussianBlur.h:
        * svg/graphics/filters/SVGFEImage.cpp:
        (WebCore::FEImage::apply):
        * svg/graphics/filters/SVGFEImage.h:
        * svg/graphics/filters/SVGFEMerge.cpp:
        (WebCore::FEMerge::apply):
        * svg/graphics/filters/SVGFEMerge.h:
        * svg/graphics/filters/SVGFEMorphology.cpp:
        (WebCore::FEMorphology::apply):
        * svg/graphics/filters/SVGFEMorphology.h:
        * svg/graphics/filters/SVGFEOffset.cpp:
        (WebCore::FEOffset::apply):
        * svg/graphics/filters/SVGFEOffset.h:
        * svg/graphics/filters/SVGFESpecularLighting.cpp:
        (WebCore::FESpecularLighting::apply):
        * svg/graphics/filters/SVGFESpecularLighting.h:
        * svg/graphics/filters/SVGFETile.cpp:
        (WebCore::FETile::apply):
        * svg/graphics/filters/SVGFETile.h:
        * svg/graphics/filters/SVGFETurbulence.cpp:
        (WebCore::FETurbulence::apply):
        * svg/graphics/filters/SVGFETurbulence.h:

2009-05-22  Dirk Schulze  <krit@webkit.org>

        Unreviewed build-fix for gtk. Breakage caused by a wrong call of ImageBuffer.

        * platform/graphics/cairo/ImageCairo.cpp:
        (WebCore::Image::drawPattern):

2009-05-22  Dirk Schulze  <vbs85@gmx.de>

        Reviewed by Eric Seidel.

        Added the use of tileRect() for a correct drawing of
        border-images.

        Testcases for border-image are in fast/borders like
        border-image-01.html and will be activated for cairo, once
        gtk supports pixel tests.

        https://bugs.webkit.org/show_bug.cgi?id=19652
        [CAIRO] wrong drawing of border-image

        * platform/graphics/cairo/ImageCairo.cpp:
        (WebCore::Image::drawPattern):

2009-05-22  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Maciej Stachowiak.

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

        Ask the Scrollbar for the orientation.

        Use Scrollbar::orientation to figure out the
        direction of scrolling.

        * platform/ScrollView.cpp:
        (WebCore::ScrollView::valueChanged):

2009-05-22  Darin Adler  <darin@apple.com>

        Reviewed by Dan Bernstein.

        <rdar://problem/6916082> Incorrect handling of % as CSS value.

        Test: fast/css/percent-character-as-value.html

        * css/CSSGrammar.y: Make a stray % character reliably cause
        CSS parsing to succeed, but the CSS value to be ignored because
        of incorrect type. A type of 0 has this effect.

2009-05-22  Brent Fulgham  <bfulgham@webkit.org>

        Reviewed by Adam Roben.

        https://bugs.webkit.org/show_bug.cgi?id=25971
        Correct a handful of build errors in the Windows Cairo variant
        due to missing VIDEO support.

        * WebCore.vcproj/WebCore.vcproj: Exclude RenderMediaControls for
          the Cairo-based Windows target.
        * rendering/RenderThemeWin.cpp: Avoid #include of RenderMediaControls
          for non-VIDEO builds.

2009-05-22  David Kilzer  <ddkilzer@apple.com>

        One <limits> is enough

        * html/HTMLMediaElement.cpp: Removed duplicate #include <limits>.

2009-05-22  Jon Honeycutt  <jhoneycutt@apple.com>

        <rdar://problem/6915957> REGRESSION: Hang when leaving page with VLC
        plug-in

        Reviewed by Steve Falkenburg.

        * plugins/win/PluginPackageWin.cpp:
        (WebCore::PluginPackage::determineQuirks):
        Look for the VLC plug-in's new name.

2009-05-22  Adam Barth  <abarth@webkit.org>

        Reviewed by Darin Fisher.

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

        Remove redudant member from Chromium's ResourceRequest.  We already
        have this data in the cross-platform ResourceRequestBase.  Also, rename
        ChromiumBridge parameter to be consistant with the new name for this
        piece of data.

        * platform/chromium/ChromiumBridge.h:
        * platform/network/chromium/ResourceRequest.h:

2009-05-22  Kevin Watters  <kevinwatters@gmail.com>

        Reviewed by Kevin Ollivier.

        Only account for overhang for multi-character strings.
        
        https://bugs.webkit.org/show_bug.cgi?id=25961

        * platform/wx/wxcode/win/fontprops.cpp:
        (GetTextExtent):

2009-05-22  Kevin Ollivier  <kevino@theolliviers.com>

        wx build fix. Switch to CURL cookies so we can benefit from API updates.

        * platform/wx/TemporaryLinkStubs.cpp:
        * webcore-wx.bkl:

2009-05-22  Peter Kasting  <pkasting@google.com>

        Reviewed by Darin Fisher.

        https://bugs.webkit.org/show_bug.cgi?id=25709 part one
        Indent contents of namespaces in header files, to comply with the
        style guide.  No functional change.

        * platform/image-decoders/ImageDecoder.h:
        (WebCore::RGBA32Buffer::):
        (WebCore::RGBA32Buffer::RGBA32Buffer):
        (WebCore::RGBA32Buffer::clear):
        (WebCore::RGBA32Buffer::bytes):
        (WebCore::RGBA32Buffer::rect):
        (WebCore::RGBA32Buffer::height):
        (WebCore::RGBA32Buffer::status):
        (WebCore::RGBA32Buffer::duration):
        (WebCore::RGBA32Buffer::disposalMethod):
        (WebCore::RGBA32Buffer::hasAlpha):
        (WebCore::RGBA32Buffer::setRect):
        (WebCore::RGBA32Buffer::ensureHeight):
        (WebCore::RGBA32Buffer::setStatus):
        (WebCore::RGBA32Buffer::setDuration):
        (WebCore::RGBA32Buffer::setDisposalMethod):
        (WebCore::RGBA32Buffer::setHasAlpha):
        (WebCore::RGBA32Buffer::setRGBA):
        (WebCore::ImageDecoder::m_failed):
        (WebCore::ImageDecoder::~ImageDecoder):
        (WebCore::ImageDecoder::setData):
        (WebCore::ImageDecoder::size):
        (WebCore::ImageDecoder::frameCount):
        (WebCore::ImageDecoder::repetitionCount):
        (WebCore::ImageDecoder::supportsAlpha):
        (WebCore::ImageDecoder::failed):
        (WebCore::ImageDecoder::setFailed):
        (WebCore::ImageDecoder::clearFrameBufferCache):
        * platform/image-decoders/bmp/BMPImageDecoder.h:
        (WebCore::BMPImageDecoder::filenameExtension):
        * platform/image-decoders/gif/GIFImageDecoder.h:
        (WebCore::GIFImageDecoder::filenameExtension):
        (WebCore::GIFImageDecoder::frameDurationAtIndex):
        (WebCore::GIFImageDecoder::):
        * platform/image-decoders/ico/ICOImageDecoder.h:
        (WebCore::ICOImageDecoder::filenameExtension):
        * platform/image-decoders/jpeg/JPEGImageDecoder.h:
        (WebCore::JPEGImageDecoder::filenameExtension):
        (WebCore::JPEGImageDecoder::supportsAlpha):
        (WebCore::JPEGImageDecoder::reader):
        (WebCore::JPEGImageDecoder::setSize):
        * platform/image-decoders/png/PNGImageDecoder.h:
        (WebCore::PNGImageDecoder::filenameExtension):
        (WebCore::PNGImageDecoder::reader):
        (WebCore::PNGImageDecoder::decodingFailed):
        * platform/image-decoders/xbm/XBMImageDecoder.h:
        (WebCore::XBMImageDecoder::filenameExtension):

2009-05-22  Dominik Röttsches  <dominik.roettsches@access-company.com>

        Reviewed by Gustavo Noronha.

        https://bugs.webkit.org/show_bug.cgi?id=15914
        [GTK] Implement Unicode functionality using GLib

        Minor changes that allow building a hybrid version of WebKit
        that has WTF Unicode backend based on GLib functions while
        text codecs and TextBreakIterator remain based on ICU.

        Fixed some includes that were assuming a WTF ICU backend and
        introduced temporary usage of WTF_USE_GLIB_ICU_UNICODE_HYBRID
        macro.

        * platform/ThreadGlobalData.cpp:
        (WebCore::ThreadGlobalData::ThreadGlobalData):
        (WebCore::ThreadGlobalData::~ThreadGlobalData):
        * platform/ThreadGlobalData.h:
        * platform/text/TextBoundariesICU.cpp:
        * platform/text/TextCodecICU.h:
        * platform/text/TextEncoding.cpp:
        (WebCore::TextEncoding::encode):
        * platform/text/TextEncodingRegistry.cpp:
        (WebCore::buildBaseTextCodecMaps):
        (WebCore::extendTextCodecMaps):

2009-05-22  Adam Barth  <abarth@webkit.org>

        Reviewed by Maciej Stachowiak.

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

        Remove the policyBaseURL parameter from setCookie.  This parameter is
        redundant with the document parameter.

        * WebCore.base.exp:
        * WebCore.order:
        * dom/Document.cpp:
        (WebCore::Document::setCookie):
        * platform/CookieJar.h:
        * platform/mac/CookieJar.mm:
        (WebCore::setCookies):
        * platform/network/chromium/CookieJarChromium.cpp:
        (WebCore::setCookies):
        * platform/network/curl/CookieJarCurl.cpp:
        (WebCore::setCookies):
        * platform/network/soup/CookieJarSoup.cpp:
        (WebCore::setCookies):
        * platform/network/win/CookieJarCFNetWin.cpp:
        (WebCore::setCookies):
        * platform/network/win/CookieJarWin.cpp:
        (WebCore::setCookies):
        * platform/qt/CookieJarQt.cpp:
        (WebCore::setCookies):

2009-05-22  Adam Barth  <abarth@webkit.org>

        Reviewed by Maciej Stachowiak.

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

        Rename policyBaseURL and mainDocumentURL to firstPartyForCookies.  The
        previous names were confusing and inaccurate.

        * WebCore.order:
        * dom/Document.cpp:
        (WebCore::Document::setCookie):
        * dom/Document.h:
        (WebCore::Document::firstPartyForCookies):
        (WebCore::Document::setFirstPartyForCookies):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::begin):
        (WebCore::FrameLoader::updateFirstPartyForCookies):
        (WebCore::FrameLoader::setFirstPartyForCookies):
        (WebCore::FrameLoader::open):
        (WebCore::FrameLoader::addExtraFieldsToRequest):
        (WebCore::FrameLoader::loadResourceSynchronously):
        * loader/FrameLoader.h:
        * loader/MainResourceLoader.cpp:
        (WebCore::MainResourceLoader::willSendRequest):
        (WebCore::ResourceRequestBase::adopt):
        (WebCore::ResourceRequestBase::copyData):
        (WebCore::ResourceRequestBase::firstPartyForCookies):
        (WebCore::ResourceRequestBase::setFirstPartyForCookies):
        (WebCore::equalIgnoringHeaderFields):
        * platform/network/ResourceRequestBase.h:
        * platform/network/cf/ResourceRequestCFNet.cpp:
        (WebCore::ResourceRequest::doUpdatePlatformRequest):
        (WebCore::ResourceRequest::doUpdateResourceRequest):
        * platform/network/chromium/CookieJarChromium.cpp:
        (WebCore::setCookies):
        * platform/network/mac/ResourceRequestMac.mm:
        (WebCore::ResourceRequest::doUpdateResourceRequest):
        (WebCore::ResourceRequest::doUpdatePlatformRequest):
        * platform/network/ResourceRequestBase.cpp:
        (WebCore::ResourceRequestBase::firstPartyForCookies):
        (WebCore::ResourceRequestBase::setFirstPartyForCookies):
        * platform/network/chromium/CookieJarChromium.cpp:
        (WebCore::setCookies):
        * platform/network/curl/CookieJarCurl.cpp:
        (WebCore::setCookies):
        * platform/network/soup/CookieJarSoup.cpp:
        (WebCore::setCookies):
        * platform/network/win/CookieJarCFNetWin.cpp:
        (WebCore::setCookies):
        * platform/network/win/CookieJarWin.cpp:
        (WebCore::setCookies):
        * platform/qt/CookieJarQt.cpp:
        (WebCore::setCookies):

2009-05-22  Pavel Feldman  <pfeldman@chromium.org>

        Fix the call to editingCancelled to be this._editingCancelled, since
        editingCancelled doesn't exist and throws an exception.

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

        Reviewed by Timothy Hatcher.

        * inspector/front-end/ElementsTreeOutline.js:
        (WebInspector.ElementsTreeElement.prototype._attributeEditingCommitted):

2009-05-22  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=25928
        Several errors detected by cppcheck

        Fix all (the only one) problem in cross-platform code found by the tool. Port maintainers
        should take a look at other reports.

        * css/CSSParser.cpp: (WebCore::CSSParser::addProperty): Don't leak the property even if there
        are billions of those.

2009-05-22  Shinichiro Hamaji  <hamaji@google.com>

        Reviewed by Oliver Hunt.

        Remove optimization path alpha=0 case from GraphicContext(CG|Skia).
        This optimization doesn't make sense for some composite mode (e.g., 'copy' operation).

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

        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::drawRect):
        (WebCore::GraphicsContext::drawLine):
        (WebCore::GraphicsContext::strokeArc):
        (WebCore::GraphicsContext::drawConvexPolygon):
        (WebCore::GraphicsContext::fillPath):
        (WebCore::GraphicsContext::strokePath):
        (WebCore::GraphicsContext::fillRect):
        (WebCore::GraphicsContext::fillRoundedRect):
        (WebCore::GraphicsContext::strokeRect):
        * platform/graphics/skia/GraphicsContextSkia.cpp:
        (WebCore::GraphicsContext::drawConvexPolygon):
        (WebCore::GraphicsContext::drawEllipse):
        (WebCore::GraphicsContext::fillPath):
        (WebCore::GraphicsContext::fillRect):
        (WebCore::GraphicsContext::strokePath):
        (WebCore::GraphicsContext::strokeRect):

2009-05-22  Xan Lopez  <xlopez@igalia.com>

        Unreviewed build fix.

        Revert the whole thing, since we can't figure out a way to make it
        work in all platforms.

        * rendering/SVGInlineTextBox.cpp:
        (WebCore::pathForDecoration):
        * svg/SVGLength.cpp:
        (WebCore::SVGLength::PercentageOfViewport):

2009-05-22  Xan Lopez  <xlopez@igalia.com>

        Try to fix Windows build.

        Apparently it can't tell if '1.0f' is float or double, so cast to
        float.

        * rendering/SVGInlineTextBox.cpp:
        (WebCore::pathForDecoration):

2009-05-22  Xan Lopez  <xlopez@igalia.com>

        Try to fix breakage from the previous patch.

        * rendering/SVGInlineTextBox.cpp:
        (WebCore::pathForDecoration):
        * svg/SVGLength.cpp:
        (WebCore::SVGLength::PercentageOfViewport):

2009-05-15  Fridrich Strba  <fridrich.strba@bluewin.ch>

        Reviewed by Maciej Stachowiak.

        https://bugs.webkit.org/show_bug.cgi?id=25805
        In debug build, mingw win32 build has problems with powf

        Change C-style calls to powf and sqrtf to C++-style calls to
        overloaded pow and sqrt. This solves also a problem with mingw
        compiler during the debug build.

        * rendering/SVGInlineTextBox.cpp:
        (WebCore::pathForDecoration):
        * svg/SVGLength.cpp:
        (WebCore::SVGLength::PercentageOfViewport):

2009-05-21  Stephanie Lewis  <slewis@apple.com>

        Reviewed by Mark Rowe.

        <rdar://problem/6913680> Update image caching options.
        Disable extra ImageIO cache because we already handle caching decoded image data.

        * platform/graphics/cg/ImageSourceCG.cpp:
        (WebCore::imageSourceOptions):

2009-05-21  Albert J. Wong  <ajwong@chromium.org>

        Reviewed by Eric Seidel.

        Bug 25903: Create a default UI theme for media controls in Chromium.
        https://bugs.webkit.org/show_bug.cgi?id=25903

        Implement a default UI for chromium.  Add a style sheet for Chromium
        media controls with good defaults and implemented basic draw functions
        for play/pause & mute buttons.

        * css/mediaControlsChromium.css: Added.
        * rendering/RenderThemeChromiumLinux.cpp:
        (WebCore::RenderThemeChromiumWin::extraMediaControlsStyleSheet): Export
        our custom media controls style sheet.
        (WebCore::RenderThemeChromiumLinux::paintMediaButtonInternal): Paint
        buttons respecting chromium media controls color scheme.
        (WebCore::RenderThemeChromiumLinux::paintMediaPlayButton): Paint logic
        specific to play/pause button.
        (WebCore::RenderThemeChromiumLinux::paintMediaMuteButton): Paint
        specific to mute button.
        * rendering/RenderThemeChromiumLinux.h: Appropriate header changes.
        * rendering/RenderThemeChromiumWin.cpp:
        (WebCore::RenderThemeChromiumWin::extraMediaControlsStyleSheet): Export
        our custom media controls style sheet.
        (WebCore::RenderThemeChromiumWin::paintMediaButtonInternal): Paint
        buttons respecting chromium media controls color scheme.
        (WebCore::RenderThemeChromiumWin::paintMediaPlayButton): Paint logic
        specific to play/pause button.
        (WebCore::RenderThemeChromiumWin::paintMediaMuteButton): Paint specific
        to mute button.
        (WebCore::RenderThemeChromiumWin::setDefaultFontSize): Appropriate
        header changes.
        * rendering/RenderThemeChromiumWin.h:

2009-05-21  Kevin Watters  <kevinwatters@gmail.com>

        Reviewed by Kevin Ollivier.

        When stripping the query from a file:// URL, do not leave a trailing question mark.
        
        https://bugs.webkit.org/show_bug.cgi?id=25940

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

2009-05-21  Kevin Watters  <kevinwatters@gmail.com>

        Reviewed by Kevin Ollivier.

        Notify ImageObserver::didDraw to help the cache purge alive resources.

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

        * platform/graphics/wx/ImageWx.cpp:
        (WebCore::BitmapImage::draw):
        (WebCore::BitmapImage::drawPattern):

2009-05-21  Evan Martin  <evan@chromium.org>

        Reviewed by Eric Seidel.

        Flesh out font fallback for Chromium's Skia port.
        getLastResortFallbackFont should fall back on well-known fonts.
        https://bugs.webkit.org/show_bug.cgi?id=25860

        * platform/graphics/chromium/FontCacheLinux.cpp:
        (WebCore::FontCache::getLastResortFallbackFont): try known font names.

2009-05-21  Dan Bernstein  <mitz@apple.com>

        Reviewed by John Sullivan.

        - speculative fix for <rdar://problem/6890716> crash at
          FontCache::purgeInactiveFontData + 199

        * platform/graphics/FontCache.cpp:
        (WebCore::FontCache::purgeInactiveFontData): Deleting a SimpleFontData
        can cause releaseFontData() to be called, which modifies
        gInactiveFontData. Therefore, avoid deleting SimpleFontData instances
        while iterating over gInactiveFontData and delete them afterwards.

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

        Reviewed by Sam Weinig.
        
        Test for <rdar://problem/6910832> | https://bugs.webkit.org/show_bug.cgi?id=25907
        Incorrect URL returned to the DOM while the user drags a file

        * page/DragController.cpp:
        (WebCore::DragController::dragExited):
        (WebCore::DragController::tryDHTMLDrag): Don't base our decision on KURL,
        since that only looks at the text of the document's URL. Do base our
        decision on the securityOrigin(), which knows more about the document's
        actual origin.

2009-05-21  Dan Bernstein  <mitz@apple.com>

        Rubber-stamped by Mark Rowe.

        - fix https://bugs.webkit.org/show_bug.cgi?id=25947
          Assertion failure in FrameLoader::transitionToCommitted on launch in
          Safari with r43985

        Rolled out r43979.

        * platform/MIMETypeRegistry.cpp:
        (WebCore::initializeSupportedNonImageMimeTypes):
        (WebCore::MIMETypeRegistry::isSupportedNonImageMIMEType):

2009-05-21  Sam Weinig  <sam@webkit.org>

        Reviewed by Brady Eidson and Mark Rowe.

        Fix for <rdar://problem/6901522>
        REGRESSION: Office 2008: Preview with browser is not shown, and Finder window is in the front of Safari

        If the NSURLRequest is annotated with a "ForceHTMLMIMEType" property, force
        the MIME type to be text/html.

        * platform/network/mac/ResourceHandleMac.mm:
        (-[WebCoreResourceHandleAsDelegate connection:didReceiveResponse:]):

2009-05-21  Kevin Ollivier  <kevino@theolliviers.com>

        Blind windows fix after last commit.

        * platform/Logging.cpp:
        (WebCore::getChannelFromName):

2009-05-21  Kevin Watters  <kevinwatters@gmail.com>

        Reviewed by Kevin Ollivier.

        Use an environment variable to control which logs are on and off.
        Also, make a generic function for translating channel name to its log.
        
        https://bugs.webkit.org/show_bug.cgi?id=25936

        * platform/Logging.cpp:
        (WebCore::getChannelFromName):
        * platform/Logging.h:
        * platform/wx/LoggingWx.cpp:
        (WebCore::InitializeLoggingChannelsIfNecessary):

2009-05-21  David Levin  <levin@chromium.org>

        Reviewed by Darin Fisher.

        Bug 25946: Chromium needs MIMETypeRegistry::getMediaMIMETypeForExtension implementation.
        https://bugs.webkit.org/show_bug.cgi?id=25946

        A very simple implementation to keep it working.  A bug has been filed in the chromium db
        (http://code.google.com/p/chromium/issues/detail?id=12441) to investigate doing something more
        complete.

        * platform/chromium/MimeTypeRegistryChromium.cpp:
        (WebCore::MIMETypeRegistry::getMediaMIMETypeForExtension):

2009-05-20  Siddhartha Chattopadhyaya  <sidchat@google.com>

        Reviewed by Justin Garcia.
        
        Add automatic spell correction support in WebKit

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

        * editing/Editor.cpp:
        (WebCore::findFirstMisspellingInRange):
        (WebCore::Editor::advanceToNextMisspelling):
        (WebCore::Editor::markMisspellingsAfterTypingToPosition):
        (WebCore::markAllMisspellingsInRange):
        (WebCore::markMisspellingsOrBadGrammar):
        (WebCore::Editor::markMisspellings):
        (WebCore::Editor::markBadGrammar):
        (WebCore::Editor::markMisspellingsAndBadGrammar):
        * editing/Editor.h:
        * loader/EmptyClients.h:
        (WebCore::EmptyEditorClient::getAutoCorrectSuggestionForMisspelledWord):
        * page/EditorClient.h:

2009-05-21  Christian Dywan  <christian@twotoasts.de>

        Reviewed by Darin Adler.

        Text files which have sub MIME types are treated as not displayable
        http://bugs.webkit.org/show_bug.cgi?id=24903

        * platform/MIMETypeRegistry.cpp:
        (WebCore::initializeSupportedNonImageMimeTypes):
        (WebCore::MIMETypeRegistry::isSupportedNonImageMIMEType): Regard any
        MIME type beginning with "text/" as supported and remove all "text/"
        types from the list.

2009-05-21  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by David Kilzer.

        https://bugs.webkit.org/show_bug.cgi?id=25890
        Implement Network logging channel on Mac

        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::~ResourceHandle):
        (WebCore::ResourceHandle::start):
        (WebCore::ResourceHandle::cancel):
        (WebCore::ResourceHandle::setDefersLoading):
        (-[WebCoreResourceHandleAsDelegate connection:willSendRequest:redirectResponse:]):
        (-[WebCoreResourceHandleAsDelegate connectionShouldUseCredentialStorage:]):
        (-[WebCoreResourceHandleAsDelegate connection:didReceiveAuthenticationChallenge:]):
        (-[WebCoreResourceHandleAsDelegate connection:didCancelAuthenticationChallenge:]):
        (-[WebCoreResourceHandleAsDelegate connection:didReceiveResponse:]):
        (-[WebCoreResourceHandleAsDelegate connection:didReceiveData:lengthReceived:]):
        (-[WebCoreResourceHandleAsDelegate connection:willStopBufferingData:]):
        (-[WebCoreResourceHandleAsDelegate connection:didSendBodyData:totalBytesWritten:totalBytesExpectedToWrite:]):
        (-[WebCoreResourceHandleAsDelegate connectionDidFinishLoading:]):
        (-[WebCoreResourceHandleAsDelegate connection:didFailWithError:]):
        (-[WebCoreResourceHandleAsDelegate connection:willCacheResponse:]):
        Added logging for async requests (as these are most interesting).

2009-05-21  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by David Kilzer.

        <rdar://problem/6902197> WebCore doesn't know about all of the MIME types supported by QTKit
        
        Add a static table to map from some common file extensions to their MIME types so it
        is possible to detect support even when the platform mapping is incomplete. Use the
        table to lookup types not found by UTI on the OSX, and when looking for a media engine
        with a generic or missing type.

        * platform/MIMETypeRegistry.cpp:
        (WebCore::initializeMediaTypeMaps): New, initialize the mediaMIMETypeForExtensionMap.
        (WebCore::MIMETypeRegistry::getMediaMIMETypeForExtension): New. Look for the specified
        MIME type in the static mapping table if the platform specific getMIMETypeForExtension
        doesn't find a match.
        * platform/MIMETypeRegistry.h: Declare getMediaMIMETypeForExtension.

        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::load): When the type passed is empty, "application/octet-stream", or
        "text/plain", try to look it up based on the file extension with getMediaMIMETypeForExtension.

        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::addFileTypesToCache): See if getMediaMIMETypeForExtension can map from file extension
        to MIME type if UTI fails.

2009-05-21  Eric Seidel  <eric@webkit.org>

        Reviewed by Alexey Proskuryakov.

        Clean up DragController
        https://bugs.webkit.org/show_bug.cgi?id=25926

        I renamed m_document to m_documentUnderMouse to better document what it does
        I could call it m_lastDocumentUnderMouse to be most-accurate, but this seemed
        long enough.

        I also saw copy/paste code involving clearing the selection when moving out of
        one document and into another.  I moved that code into a function called
        mouseMovedIntoDocument.

        I also got rid of a couple needless null-checks after confirming via source
        inspection they were not ever possible.
        In Mac WebKit it's not possible to have a Page that doesn't have a mainFrame()
        I left an ASSERT(m_page->mainFrame()) in case some other port ever violates this.
        It's also not possible to return a document from documentAtPoint that is not
        in a frame (as such a document would not be rendered).

        No functional changes, thus no tests.

        * page/DragController.cpp:
        (WebCore::DragController::DragController):
        (WebCore::DragController::dragIsMove):
        (WebCore::DragController::dragExited):
        (WebCore::DragController::performDrag):
        (WebCore::DragController::mouseMovedIntoDocument):
        (WebCore::DragController::dragEnteredOrUpdated):
        (WebCore::DragController::tryDocumentDrag):
        (WebCore::DragController::operationForLoad):
        (WebCore::DragController::concludeEditDrag):
        (WebCore::DragController::canProcessDrag):
        (WebCore::DragController::tryDHTMLDrag):
        (WebCore::DragController::placeDragCaret):
        * page/DragController.h:
        (WebCore::DragController::documentUnderMouse):

2009-05-21  Eric Seidel  <eric@webkit.org>

        Reviewed by Alexey Proskuryakov.

        Rename DragController::dragOperation() to sourceDragOperation() for clarity
        Remove unused setDragOperation()

        There are two times DragOperation is used.  The source specifies
        what drag operations it supports (in a mask) and the destination
        picks a subset of those as DragOperations it supports if a drop were
        to occur.  I was confused when I first saw this accessor as to which
        it meant.  It turns out that this is only used when WebKit starts a
        drag, and we keep it around so that we can provide this information
        to other Mac OS X applications when they ask.  I've renamed the method
        for clarity so the next person in this code will be less confused.

        No functional changes, thus no tests.

        * page/DragController.h:
        (WebCore::DragController::sourceDragOperation):

2009-05-21  Dan Bernstein  <mitz@apple.com>

        Reviewed by Anders Carlsson.

        - WebCore part of <rdar://problem/6901751> REGRESSION (r35515): Tiger
          crash painting the selection on registration page of car2go.com

        A bug in old versions of Core Graphics causes memory corruption to occur
        when clipping under certain conditions. Make the clipping functions
        fail silently under those conditions.

        Test: fast/block/float/selection-gap-clip-out-tiger-crash.html

        * WebCore.Tiger.exp: Added wkCGContextIsSafeToClip
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::safeCGContextClip): Added a wrapper around CGContextClip that,
        on Tiger, bails out if wkCGContextIsSafeToClip() returns false.
        (WebCore::safeCGContextEOClip): Ditto for CGContextEOClip.
        (WebCore::safeCGContextClipToRect): Ditto for CGContextClipToRect.
        (WebCore::GraphicsContext::fillPath): Changed to call the safe variants
        of CGContextClip, CGContextEOClip and CGContextClipToRect.
        (WebCore::GraphicsContext::strokePath): Ditto.
        (WebCore::GraphicsContext::fillRect): Ditto.
        (WebCore::GraphicsContext::clip): Ditto.
        (WebCore::GraphicsContext::clipOut): Ditto.
        (WebCore::GraphicsContext::clipOutEllipseInRect): Ditto.
        (WebCore::GraphicsContext::clipPath): Ditto.
        (WebCore::GraphicsContext::addInnerRoundedRectClip): Ditto.
        (WebCore::GraphicsContext::strokeRect): Ditto.
        * platform/mac/WebCoreSystemInterface.h: Added wkCGContextIsSafeToClip.
        * platform/mac/WebCoreSystemInterface.mm: Added wkCGContextIsSafeToClip.

2009-05-21  Xan Lopez  <xlopez@igalia.com>

        Unreviewed build fix.

        https://bugs.webkit.org/show_bug.cgi?id=25910
        WebkitGTK r43960 cannot compile

        Do not include local copy of guriescape header, which was
        removed. We now use the copy in glib.

        * platform/gtk/FileSystemGtk.cpp:

2009-05-20  Adam Barth  <abarth@webkit.org>

        Reviewed by Dimitri Glazkov.

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

        It turns out the CurrentContext wasn't currect either because it gave
        us the frame for the write() function itself.  We actually want the
        *calling* context.

        * bindings/v8/custom/V8HTMLDocumentCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):

2009-05-20  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Gustavo Noronha.

        [GTK] Implement Image::loadPlatformResource.

        Install the four resources we are using. For the icons
        where an icon name is specified by freedeskop.org try to
        map the WebCore name to that name and fallback to the
        internal icon. For everything else use the internal icon
        name. Remove the temporary link stub as this is not
        required any more.

        * GNUmakefile.am: Install the png files, set DATA_DIR again
        * Resources/panIcon.png: Copied from WebKit/win/WebKit.vcproj/panIcon.png.
        * platform/graphics/gtk/ImageGtk.cpp:
        (WTF::GtkIconInfo): Add template specialization for GtkIconInfo
        (WebCore::getIconFileNameOrFallback): Use GtkIconTheme to get the icon
        (WebCore::loadResourceIntoSharedBuffer):
        (WebCore::Image::loadPlatformResource): Implement
        * platform/gtk/TemporaryLinkStubs.cpp: Remove link stub

2009-05-20  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Gustavo Noronha.

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

        [GTK] The Gtk+ port wants to have a themable
        urlIcon too.

        * loader/icon/IconDatabase.cpp:

2009-05-20  Stephanie Lewis  <slewis@apple.com>

        Update the order files.  <rdar://problem/6881750> Generate new order files.

        * WebCore.order:

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

        Reviewed by Gavin Barraclough.

        Fix some assertion failures in plug-in tests on the Windows debug build bot.

        * plugins/PluginStream.cpp:
        (WebCore::PluginStream::startStream): Switch to using protocolIsJavaScript.
        * plugins/PluginView.cpp:
        (WebCore::scriptStringIfJavaScriptURL): Ditto.

2009-05-20  Brady Eidson  <beidson@apple.com>

        Reviewed by Darin Adler.

        More protocolInHTTPFamily() cleanup.

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

2009-05-20  Sam Weinig  <sam@webkit.org>

        Reviewed by Oliver Hunt.

        Fix for <rdar://problem/6905475>
        Office 2008: Entourage: Crash when you switch to "My Day" view

        The host function callback callObjCFallbackObject was not annotated
        with JSC_HOST_CALL which meant that when it was called by the JIT, which
        expects the JSC_HOST_CALL calling convention, the arguments are not in the
        expected places.

        * bridge/objc/objc_runtime.mm:
        (JSC::Bindings::callObjCFallbackObject): Added missing JSC_HOST_CALL
        annotation on callObjCFallbackObject.

2009-05-20  David Levin  <levin@chromium.org>

        Not Reviewed, build fix.

        Need to disable this assert while the chormium code is fixed for it.

        * platform/KURLGoogle.cpp:
        (WebCore::KURL::protocolIs):

2009-05-20  David Levin  <levin@chromium.org>

        Not Reviewed, build fix.

        Change KURLGoogle.cpp to mirror the KURL.cpp changes done in
        http://trac.webkit.org/changeset/43929.  Fix assert placement.

        * platform/KURLGoogle.cpp:
        (WebCore::KURL::protocolIs):
        (WebCore::protocolIs):

2009-05-20  Nate Chapin  <japhet@google.com>

        Reviewed by Dimitri Glazkov.

        Upstream V8 bindings for V8DomWindow.
        https://bugs.webkit.org/show_bug.cgi?id=25869

        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::V8Custom::WindowSetTimeoutImpl): Moved from v8_custom.cpp.
        (WebCore::isAscii): Moved from v8_custom.cpp.
        (WebCore::convertBase64): Moved from v8_custom.cpp.
        (WebCore::CALLBACK_FUNC_DECL): Moved from v8_custom.cpp.
        (WebCore::eventNameFromAttributeName): Moved from v8_custom.cpp.
        (WebCore::ACCESSOR_SETTER): Moved from v8_custom.cpp.
        (WebCore::ACCESSOR_GETTER): Moved from v8_custom.cpp.
        (WebCore::NAMED_ACCESS_CHECK): Moved from v8_custom.cpp.
        (WebCore::INDEXED_ACCESS_CHECK): Moved from v8_custom.cpp.

2009-05-21  Christian Dywan  <christian@twotoasts.de>

        Reviewed by Jan Alonzo.

        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::parseDataUrl): Always use Glib Base64 decoding.

2009-05-21  Christian Dywan  <christian@twotoasts.de>

        Rubberstamped by Gustavo Noronha.

        * platform/network/curl/ResourceHandleManager.cpp:
        (WebCore::parseDataUrl): Remove Gtk/ Glib Base64 decoding.

2009-05-20  Christian Dywan  <christian@twotoasts.de>

        Reviewed by Gustavo Noronha.

        * GNUmakefile.am:
        * platform/gtk/guriescape.c:
        * platform/gtk/guriescape.h: Remove copies of g_uri_escape_string and
        g_uri_unescape_string now that we require Glib 2.16.

2009-05-20  David Levin  <levin@chromium.org>

        Not Reviewed, build fix.

        Change KURLGoogle.cpp to mirror the KURL.cpp changes done in
        http://trac.webkit.org/changeset/43929.

        * platform/KURLGoogle.cpp:
        (WebCore::protocolIsJavaScript):
        (WebCore::protocolIs):

2009-05-20  Brady Eidson  <beidson@apple.com>

        Rubberstamped by Sam Weinig

        At all call sites that check if a KURL has either the http or https protocol,
        use the KURL::protocolInHTTPFamily() accessor, instead.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::iconURL):
        (WebCore::FrameLoader::didOpenURL):
        (WebCore::FrameLoader::open):

        * loader/appcache/ApplicationCache.cpp:
        (WebCore::ApplicationCache::requestIsHTTPOrHTTPSGet):

        * loader/loader.cpp:
        (WebCore::Loader::load):

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

2009-05-20  Brady Eidson  <beidson@apple.com>

        Reviewed by Darin Adler.

        Fix <rdar://problem/6904941> and https://bugs.webkit.org/show_bug.cgi?id=25300

        KURL parsing changes back in r30243 and r30815 made javascript urls that use the form
        "javascript://" be detected as invalid hierarchical URLs.  When a KURL is marked as
        invalid, you can no longer ask it a question such as "is your protocol javascript?"
        Therefore FrameLoader wouldn't recognize them as javascript URLs and instead try to
        navigate to them.

        URL parsing rules aside, such URLs are in use in the wild (Microsoft's Virtual Earth 
        being a high profile example) and actually represent valid javascript.

        Whenever checking for javascript urls, the new protocolIsJavaScript() should be used
        as it functions on a String which doesn't have to pass KURLs parsing rules. 

        Test: fast/loader/javascript-url-hierarchical-execution.html

        * bindings/js/JSAttrCustom.cpp:
        (WebCore::JSAttr::setValue): Use protocolIsJavaScript().
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::setLocation): Ditto.
        (WebCore::createWindow): Ditto.
        (WebCore::JSDOMWindow::open): Ditto.
        * bindings/js/JSElementCustom.cpp:
        (WebCore::allowSettingSrcToJavascriptURL): Ditto.
        * bindings/js/JSHTMLFrameElementCustom.cpp:
        (WebCore::allowSettingJavascriptURL): Ditto.
        * bindings/js/JSHTMLIFrameElementCustom.cpp:
        (WebCore::JSHTMLIFrameElement::setSrc): Ditto.
        * bindings/js/JSLocationCustom.cpp:
        (WebCore::navigateIfAllowed): Ditto.
        (WebCore::JSLocation::reload): Ditto.
        * editing/markup.cpp:
        (WebCore::appendQuotedURLAttributeValue): Ditto.
        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::parseMappedAttribute): Ditto.
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::requestFrame): Ditto.
        (WebCore::FrameLoader::submitForm): Ditto.
        (WebCore::FrameLoader::executeIfJavaScriptURL): Ditto.
        
        * platform/KURL.cpp:
        (WebCore::KURL::init): Use protocolIsJavaScript().
        (WebCore::KURL::protocolIs): ASSERT that the protocol being asked about is not javascript.
           Such checks should go through protocolIsJavaScript() instead.
        (WebCore::encodeRelativeString): Use protocolIsJavaScript().
        (WebCore::protocolIsJavaScript):
        * platform/KURL.h:

2009-05-20  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Anders Carlsson.

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

        Fix a bug where the browserfuncs were not properly assigned,
        make hasproperty use _NP_HasProperty and hasmethod _NP_HasMethod.

        Test: plugins/netscape-invoke-browserfuncs.html

        * plugins/gtk/PluginPackageGtk.cpp:
        (WebCore::PluginPackage::load): Fix assignment
        * plugins/qt/PluginPackageQt.cpp:
        (WebCore::PluginPackage::load): Fix assignment

2009-05-20  Sam Weinig  <sam@webkit.org>

        Reviewed by Timothy Hatcher.

        Make absoluteRectsForRange and absoluteQuadsForRange non-virtual
        and only exist on RenderText.

        * dom/Range.cpp:
        (WebCore::Range::textRects):
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::drawNodeHighlight): Use absoluteQuads instead
        of absoluteQuadsForRange since no range is being specifiec.
        * rendering/RenderObject.cpp:
        * rendering/RenderObject.h:
        * rendering/RenderText.h:

2009-05-20  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        Implement AtkObject::focus-event and
        AtkObject::state-changed:focused signal emission.

        Adds a new handleFocusedUIElementChangedWithRenderers, only in the
        GTK port, called at the same point than
        handleFocusedUIElementChanged but with two parameters, the old and
        the newly focused RenderObjects. We need this, since the ATK
        signals require us to pass the objects involved in the focus
        change as arguments.

        * accessibility/AXObjectCache.h:
        * accessibility/gtk/AXObjectCacheAtk.cpp:
        (WebCore::AXObjectCache::handleFocusedUIElementChangedWithRenderers):
        * dom/Document.cpp:
        (WebCore::Document::setFocusedNode):

2009-05-20  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Darin Adler.

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

        Make ChromeClient a interface again

        With recent additions to ChromeClient.h empty defaults were
        added. This is bad for porters as these changes go unnoticed
        and at runtime no notImplemented warning is logged and grepping
        for notImplemented will not show anything. Change this Client
        to be like the other Clients again and always have pure virtuals
        (but for stuff inside #ifdef PLATFORM(MAC)).

        Update the various WebKit/* implementations to compile again.

        * loader/EmptyClients.h: Add empty defaults
        (WebCore::EmptyChromeClient::setCursor):
        (WebCore::EmptyChromeClient::scrollRectIntoView):
        (WebCore::EmptyChromeClient::requestGeolocationPermissionForFrame):
        * page/ChromeClient.h: Make methods pure virtual

2009-05-19  Kenneth Rohde Christiansen  <kenneth.christiansen@openbossa.org>

        Reviewed by Simon Hausmann.

        Fix a bug where a non visible plugin would show it self in a
        sibling frame. The problem was due to our clipping. In Qt,
        if setMask is set with an empty QRegion, no clipping will
        be performed, so in that case we hide the PluginContainer

        Added manual test.

        * plugins/qt/PluginContainerQt.cpp:
        (PluginContainerQt::adjustGeometry):
        * manual-tests/qt/plugin-sibling-frame-include.html
        * manual-tests/qt/plugin-sibling-frame.html

2009-05-19  Kenneth Rohde Christiansen  <kenneth.christiansen@openbossa.org>

        Reviewed by Simon Hausmann.

        Do not call the parent implementation (Widget::) in show() and hide()
        of the PluginViewQt, as it always changes the visible state of the
        platformWidget (equal to the platformPluginWidget in the Qt port),
        thus ignoring the isParentVisible() test.

        * plugins/qt/PluginViewQt.cpp:
        (WebCore::PluginView::show):
        (WebCore::PluginView::hide):

2009-05-20  Yichao Yin  <yichao.yin@torchmobile.com.cn>

        Reviewed by George Staikos.

        https://bugs.webkit.org/show_bug.cgi?id=23452
        Change the implementation of HTMLNoScriptElement to avoid the pain of 
        adding virtual function for XHTMLMP support

        Includes changes suggested by Simon Fraser.

        * dom/Node.cpp:
        (WebCore::Node::styleForRenderer):
        * dom/Node.h:
        * html/HTMLNoScriptElement.cpp:
        * html/HTMLNoScriptElement.h:

2009-05-20  Kevin Ollivier  <kevino@theolliviers.com>

        CURL backend build fix. Make sure URL is always set.
        
        * platform/network/curl/ResourceHandleManager.cpp:
        (WebCore::ResourceHandleManager::downloadTimerCallback):

2009-05-20  Yongjun Zhang  <yongjun.zhang@nokia.com>

        Reviewed by George Staikos.

        Fix Qt WebKit build break in Mac OS.

        * platform/FileSystem.h:

2009-05-20  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Rubber-stamped by Eric Seidel.

        Enable code that was commented out waiting for a way to get a
        GdkPixbuf from an image, effectively enabling copying images to
        the clipboard.

        * platform/gtk/PasteboardGtk.cpp:
        (WebCore::Pasteboard::writeImage):

2009-05-20  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Jan Alonzo.

        https://bugs.webkit.org/show_bug.cgi?id=25414
        [GTK] ROLE_PANEL should not be used for paragraphs and list items.

        Implement Atk list item role for list items.

        * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
        (webkit_accessible_get_role):

2009-05-20  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Jan Alonzo.

        https://bugs.webkit.org/show_bug.cgi?id=25414
        [GTK] ROLE_PANEL should not be used for paragraphs and list items.

        Implement Atk paragraph role for paragraph elements.

        * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
        (webkit_accessible_get_role):

2009-05-20  Eric Seidel  <eric@webkit.org>

        Fix bug URL in ChangeLogs in r43903.
        https://bugs.webkit.org/show_bug.cgi?id=25742

2009-05-20  Takeshi Yoshino <tyoshino@google.com>

        Reviewed by Eric Seidel.

        Bug 24539: Fix RenderThemeChromiumWin::paintTextFieldInternal() not to hide background image.
        https://bugs.webkit.org/show_bug.cgi?id=25742

        Fix RenderThemeChromiumWin::paintTextFieldInternal().

        We shouldn't paint the content area of text fields when o->style() has
        background image or transparent background color. paintTextFieldInternal() is
        used for painting inner area of HTML option elements by Chromium.

        When we pass fillContentArea = true to ChromiumBridge::paintTextField, it hides
        the background image rendered by RenderBoxModelObject. So, we should set
        fillContentArea = false in such case.

        Besides, when background-color:transparent is specified for CSS property,
        o->style().backgroundColor returns black color with alpha channel == 0. But
        since ThemeEngine for Windows behind ChromiumBridge::paintTextField cannot
        recognize alpha channel, it fills the rect with black. I made workaround to set
        fillContentArea = false when alpha channel == 0 to avoid this.

        And more, I'd like to fallback the color passed to ChromiumBridge to white when
        o->style()->backgroundColor() is invalid.

        * rendering/RenderThemeChromiumWin.cpp:
        (WebCore::RenderThemeChromiumWin::paintTextFieldInternal):

2009-05-20  Shinichiro Hamaji  <hamaji@google.com>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=25417
        Map CompositeCopy to Skia's kSrc_Mode composite operation.

        Test: fast/canvas/canvas-composite-alpha.html

        * platform/graphics/skia/SkiaUtils.cpp:
        (WebCore::):

2009-05-20  Jan Michael Alonzo  <jmalonzo@webkit.org>

        Rubber-stamped by Xan Lopez.

        Remove misplaced extern "C"

        * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:

2009-05-20  Jan Michael Alonzo  <jmalonzo@webkit.org>

        Reviewed by Xan Lopez.

        [GTK] Expose password field with role of PASSWORD_TEXT
        https://bugs.webkit.org/show_bug.cgi?id=25682

        Check if input type is a password field and return
        ATK_ROLE_PASSWORD_TEXT if it is.

        * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:

2009-05-20  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by George Staikos.

        BUG 25845: [Qt] Fix QtWebKit pkgconfig dependencies
        <https://bugs.webkit.org/show_bug.cgi?id=25845>

        * WebCore.pro: Remove QtDBus; remove QtXml if Qt >= 4.4

2009-05-20  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by George Staikos.

        BUG 25843: [Qt] Remove qt-port build flag
        <https://bugs.webkit.org/show_bug.cgi?id=25843>

        * bridge/testbindings.pro:

2009-05-20  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by George Staikos.

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

        [Qt] Cleanup - move files exclusive to JAVASCRIPT_DEBUGGER
        and WORKERS under the appropriate build section

        * WebCore.pro:

2009-05-20  Ariya Hidayat  <ariya.hidayat@nokia.com>

        Unreviewed Qt build fix, after r43892.

        * platform/graphics/qt/ImageQt.cpp: included ImageObservser.h

2009-05-20  Yongjun Zhang  <yongjun.zhang@nokia.com>

        Reviewed by Simon Hausmann.

        https://bugs.webkit.org/show_bug.cgi?id=25856
        [Qt] notify an image has been drawn, to help Cache purge alive decoded data.

        * platform/graphics/qt/ImageQt.cpp:
        (WebCore::Image::drawPattern):
        (WebCore::BitmapImage::draw):

2009-05-20  David Levin  <levin@chromium.org>

        Reviewed by NOBODY, layout tests fix.

        https://bugs.webkit.org/show_bug.cgi?id=23727
        This reverts commit r43888.

        Once that change was checked in many of the fast/flexbox0*.html        
        tests (and others) started failing.

        * WebCore.pro:
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        * css/CSSPropertyNames.in:
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        * css/CSSValueKeywords.in:
        * rendering/RenderMarquee.cpp:
        (WebCore::RenderMarquee::updateMarqueePosition):
        (WebCore::RenderMarquee::timerFired):

2009-05-19  Yichao Yin <yichao.yin@torchmobile.com.cn>

        Reviewed by George Staikos.

        Add XHTMLMP support to Webkit
        Update the configure files for building XHTMLMP-enabled WebKit on different platform
        https://bugs.webkit.org/show_bug.cgi?id=23452

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

2009-05-19  Antti Koivisto  <antti@apple.com>

        I can't figure out how to make this not timing dependent, making it manual test instead.

        * manual-tests/preload-scanner-entities.html: Added.

2009-05-19  Brady Eidson  <beidson@apple.com>

        Reviewed by Antti Koivisto. 

        <rdar://problem/6886382> REGRESSION (Safari 4PB -> ToT): HTTP cache revalidation broken.

        This was caused in http://trac.webkit.org/changeset/41425, which fixed an image caching bug
        in QuickLooks (rdar://problem/6619630).

        We need to respect the DocumentLoader's request cache policy when deciding the cache policy
        for subresources, but the check (originally removed in r39304 and added back in in the same
        place in r41424) needs to be tweaked and relocated a bit.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::subresourceCachePolicy): Renamed from cachePolicy().  Move checking
          the DocumentLoader's request to a more appropriate place. Add code to handle the recently 
          added FIXME regarding POSTs. Add a new FIXME describing a great way to make this code 
          cleaner in the future.
        * loader/FrameLoader.h:

        * loader/DocLoader.cpp:
        (WebCore::DocLoader::cachePolicy): Calls the newly renamed subresourceCachePolicy().

2009-05-19  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Beth Dakin.

        Bug 25872: aria-labeledby appends all siblings instead of all children to aria name
        https://bugs.webkit.org/show_bug.cgi?id=25872

        When setting the aria-labeledby text it should stay within the element identified by the id
        when searching through the sibling list.
  
        This also removes an outdated assert in getDocumentLinks. Its possible for the document to
        think an element is a link, but accessibility can treat it differently (eg. its ARIA role is different).

        Test: accessibility/aria-labelledby-stay-within.html

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::ariaAccessiblityName):
        (WebCore::AccessibilityRenderObject::getDocumentLinks):

2009-05-19  Antti Koivisto  <antti@apple.com>

        Reviewed by Darin Adler).
        
        <rdar://problem/6902674> REGRESSION: Query parameters are sometimes incorrect in URL (23135)
        
        Push characters back in correct order when entity parsing fails after 3 characters.

        Test: fast/tokenizer/preload-scanner-entities.html

        * html/PreloadScanner.cpp:
        (WebCore::PreloadScanner::consumeEntity):

2009-05-19  Paul Godavari  <paul@chromium.org>

        Reviewed by Dimitri Glazkov.

        Fix a crash in Mac Chromium when displaying an HTML select element
        with no items.
        https://bugs.webkit.org/show_bug.cgi?id=25874

        * platform/chromium/PopupMenuChromium.cpp:
        (WebCore::PopupContainer::showExternal):

2009-05-19  Nate Chapin  <japhet@google.com>

        Reviewed by Darin Fisher.

        Upstream V8 bindings for CanvasRenderingContext2D.
        https://bugs.webkit.org/show_bug.cgi?id=25858

        * bindings/v8/custom/V8CanvasRenderingContext2DCustom.cpp: Moved bindings from v8_custom.cpp.

2009-05-19  Jessie Berlin  <jberlin@apple.com>

        Reviewed by Mark Rowe.

        Windows Build Fix.

        * WebCore.vcproj/WebCore.vcproj: Copy accessibility headers from WebCore.

2009-05-19  Timothy Hatcher  <timothy@apple.com>

        <rdar://problem/6889218> REGRESSION: Some iChat transcript resources are not
        loaded because willSendRequest doesn't happen immediately

        Reviewed by Antti Koivisto.

        * WebCore.base.exp: Export Loader::servePendingRequests().

2009-05-19  David Levin  <levin@chromium.org>

        Reviewed by Dimitri Glazkov.

        Bug 25859: Need to upstream ScriptController.* for v8.
        https://bugs.webkit.org/show_bug.cgi?id=25859

        Fixing the header file (which I accidentally made identical to the cpp file).

        * bindings/v8/ScriptController.h:

2009-05-19  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin Adler and Brady Eidson.

        <rdar://problem/6900582> REGRESSION (r42446?): UA Profiler in http://stevesouders.com/ua/ stalls

        The problem was that Document::removeAllEventListeners() was called for a wrong document
        when a CachedFrame was destroyed.

        Cannot be tested automatically, because DRT doesn't have a b/f cache.

        * dom/Document.cpp: (WebCore::Document::domWindow): Make sure that this doesn't return an
        unrelated window even if document's m_frame pointer is stale.

        * history/CachedFrame.cpp: (WebCore::CachedFrame::clear): Added a FIXME about strange behavior.

2009-05-19  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Split InspectorController into InspectorController and InspectorFrontend. Latter encapsulates all frontend interaction and is the only entity allowed to make ScriptFunctionCalls. The further plan is to serialize these script function calls.

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

        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * inspector/ConsoleMessage.cpp:
        (WebCore::ConsoleMessage::addToConsole):
        * inspector/ConsoleMessage.h:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::~InspectorController):
        (WebCore::InspectorController::inspect):
        (WebCore::InspectorController::focusNode):
        (WebCore::InspectorController::setWindowVisible):
        (WebCore::InspectorController::addConsoleMessage):
        (WebCore::InspectorController::setAttachedWindow):
        (WebCore::InspectorController::inspectedWindowScriptObjectCleared):
        (WebCore::InspectorController::scriptObjectReady):
        (WebCore::InspectorController::showPanel):
        (WebCore::InspectorController::close):
        (WebCore::InspectorController::populateScriptObjects):
        (WebCore::InspectorController::resetScriptObjects):
        (WebCore::InspectorController::pruneResources):
        (WebCore::InspectorController::didCommitLoad):
        (WebCore::InspectorController::didLoadResourceFromMemoryCache):
        (WebCore::InspectorController::identifierForInitialRequest):
        (WebCore::InspectorController::willSendRequest):
        (WebCore::InspectorController::didReceiveResponse):
        (WebCore::InspectorController::didReceiveContentLength):
        (WebCore::InspectorController::didFinishLoading):
        (WebCore::InspectorController::didFailLoading):
        (WebCore::InspectorController::resourceRetrievedByXMLHttpRequest):
        (WebCore::InspectorController::scriptImported):
        (WebCore::InspectorController::didOpenDatabase):
        (WebCore::InspectorController::didUseDOMStorage):
        (WebCore::InspectorController::addScriptProfile):
        (WebCore::InspectorController::toggleRecordButton):
        (WebCore::InspectorController::enableProfiler):
        (WebCore::InspectorController::disableProfiler):
        (WebCore::InspectorController::enableDebugger):
        (WebCore::InspectorController::disableDebugger):
        (WebCore::InspectorController::didParseSource):
        (WebCore::InspectorController::failedToParseSource):
        (WebCore::InspectorController::didPause):
        (WebCore::InspectorController::didContinue):
        * inspector/InspectorController.h:
        * inspector/InspectorDOMStorageResource.cpp:
        (WebCore::InspectorDOMStorageResource::bind):
        * inspector/InspectorDOMStorageResource.h:
        * inspector/InspectorDatabaseResource.cpp:
        (WebCore::InspectorDatabaseResource::bind):
        * inspector/InspectorDatabaseResource.h:
        * inspector/InspectorFrontend.cpp: Added.
        (WebCore::callSimpleFunction):
        (WebCore::InspectorFrontend::InspectorFrontend):
        (WebCore::InspectorFrontend::~InspectorFrontend):
        (WebCore::InspectorFrontend::newJSONObject):
        (WebCore::InspectorFrontend::addMessageToConsole):
        (WebCore::InspectorFrontend::addResource):
        (WebCore::InspectorFrontend::updateResource):
        (WebCore::InspectorFrontend::removeResource):
        (WebCore::InspectorFrontend::updateFocusedNode):
        (WebCore::InspectorFrontend::setAttachedWindow):
        (WebCore::InspectorFrontend::inspectedWindowScriptObjectCleared):
        (WebCore::InspectorFrontend::showPanel):
        (WebCore::InspectorFrontend::populateInterface):
        (WebCore::InspectorFrontend::reset):
        (WebCore::InspectorFrontend::debuggerWasEnabled):
        (WebCore::InspectorFrontend::debuggerWasDisabled):
        (WebCore::InspectorFrontend::profilerWasEnabled):
        (WebCore::InspectorFrontend::profilerWasDisabled):
        (WebCore::InspectorFrontend::parsedScriptSource):
        (WebCore::InspectorFrontend::failedToParseScriptSource):
        (WebCore::InspectorFrontend::addProfile):
        (WebCore::InspectorFrontend::setRecordingProfile):
        (WebCore::InspectorFrontend::pausedScript):
        (WebCore::InspectorFrontend::resumedScript):
        (WebCore::InspectorFrontend::addDatabase):
        (WebCore::InspectorFrontend::addDOMStorage):
        * inspector/InspectorFrontend.h: Added.
        * inspector/InspectorResource.cpp:
        (WebCore::InspectorResource::createScriptObject):
        (WebCore::InspectorResource::updateScriptObject):
        (WebCore::InspectorResource::releaseScriptObject):
        * inspector/InspectorResource.h:

2009-05-19  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Introduce JSONObject that wraps ScriptObject and ScriptState* for further serialization

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

        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * inspector/ConsoleMessage.cpp:
        (WebCore::ConsoleMessage::addToConsole):
        * inspector/InspectorDOMStorageResource.cpp:
        (WebCore::InspectorDOMStorageResource::bind):
        * inspector/InspectorDatabaseResource.cpp:
        (WebCore::InspectorDatabaseResource::bind):
        * inspector/InspectorResource.cpp:
        (WebCore::populateHeadersObject):
        (WebCore::InspectorResource::createScriptObject):
        (WebCore::InspectorResource::updateScriptObject):
        * inspector/JSONObject.cpp: Added.
        (WebCore::JSONObject::JSONObject):
        (WebCore::JSONObject::set):
        (WebCore::JSONObject::scriptObject):
        (WebCore::JSONObject::createNew):
        * inspector/JSONObject.h: Added.

2009-05-19  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Refactor InpectorController so that it does not instantiate resource/console/database/domresource javascript objects. Move instantiation into the javascript.

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

        * inspector/ConsoleMessage.cpp:
        (WebCore::ConsoleMessage::addToConsole):
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::didReceiveResponse):
        (WebCore::InspectorController::didReceiveContentLength):
        (WebCore::InspectorController::didFinishLoading):
        (WebCore::InspectorController::didFailLoading):
        (WebCore::InspectorController::resourceRetrievedByXMLHttpRequest):
        (WebCore::InspectorController::scriptImported):
        * inspector/InspectorDOMStorageResource.cpp:
        (WebCore::InspectorDOMStorageResource::InspectorDOMStorageResource):
        (WebCore::InspectorDOMStorageResource::bind):
        (WebCore::InspectorDOMStorageResource::unbind):
        * inspector/InspectorDOMStorageResource.h:
        * inspector/InspectorDatabaseResource.cpp:
        (WebCore::InspectorDatabaseResource::InspectorDatabaseResource):
        (WebCore::InspectorDatabaseResource::bind):
        (WebCore::InspectorDatabaseResource::unbind):
        * inspector/InspectorDatabaseResource.h:
        * inspector/InspectorResource.cpp:
        (WebCore::InspectorResource::InspectorResource):
        (WebCore::populateHeadersObject):
        (WebCore::InspectorResource::createScriptObject):
        (WebCore::InspectorResource::updateScriptObject):
        (WebCore::InspectorResource::releaseScriptObject):
        * inspector/InspectorResource.h:
        * inspector/front-end/Console.js:
        (WebInspector.ConsoleMessage):
        * inspector/front-end/inspector.js:
        (WebInspector.addResource):
        (WebInspector.updateResource):
        (WebInspector.removeResource):
        (WebInspector.addDatabase):
        (WebInspector.addDOMStorage):
        (WebInspector.reset):
        (WebInspector.addMessageToConsole):

2009-05-19  Kenneth Rohde Christiansen  <kenneth.christiansen@openbossa.org>

        Reviewed by Ariya Hidayat.

        The Qt port has code that disables scrolling optimizations
        when the root contains native windows, such as windowed plugins.

        This code broke when detaching iframes containing windowed
        plugins.

        Each ScrollView now knows how many native windows it and its
        children contain, and when it is detached, that number is
        substracted from its old parents.

        * platform/ScrollView.cpp:
        (WebCore::ScrollView::scrollContents):
        (WebCore::ScrollView::setParent):
        * platform/ScrollView.h:
        * platform/qt/ScrollViewQt.cpp:
        (WebCore::ScrollView::adjustWidgetsPreventingBlittingCount):
        (WebCore::ScrollView::platformAddChild):
        (WebCore::ScrollView::platformRemoveChild):

2009-05-18  David Kilzer  <ddkilzer@apple.com>

        Tiger build fix for r43850

        * platform/mac/ClipboardMac.mm: Added typedef for NSUinteger
        when building on Tiger.

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

        Reviewed by Darin Adler.

        ClipboardMac cleanup
        https://bugs.webkit.org/show_bug.cgi?id=25847

        I'm mostly just moving code, however there are 3 changes I made while moving, detailed below.

        No functional changes, so no tests.

        * platform/mac/ClipboardMac.mm:
        (WebCore::ClipboardMac::clearData):
        (WebCore::absoluteURLsFromPasteboardFilenames):
          Broke out logic for filenames into its own function to make the caller more readable.
        (WebCore::absoluteURLsFromPasteboard):
          Broke out logic from getData into absoluteURLsFromPasteboard. This returns an NSArray
          so that we can use -[NSArray componentsJoinedByString] in the caller (which is
          cleaner than the manual "\n" addition before).
          This also access to the full list of file urls for future callers.
        (WebCore::ClipboardMac::getData):
          unsigned count = (type == "URL") ? 1 : [fileList count]; is now an
          explicit check for "URL", before it was a check for != "text/uri-list" which
          was much more confusing in my opinion.  text/uri-list and URL are the only
          two types which map to NSURLPboardType in cocoaTypeFromMIMEType().
        (WebCore::ClipboardMac::types):
          I removed an extra if (!types) check, right before [types count].  In Obj-C
          messaging nil will return 0 (size of a pointer), so it's safe to message nil
          here and expect it to return 0.

2009-05-18  David Levin  <levin@chromium.org>

        Reviewed by Darin Fisher.

        Bug 25859: Need to upstream ScriptController.* for v8.
        https://bugs.webkit.org/show_bug.cgi?id=25859

        * bindings/v8/ScriptController.cpp: Added.
        * bindings/v8/ScriptController.h: Added.

2009-05-18  Yichao Yin  <yichao.yin@torchmobile.com.cn>

        Reviewed by George Staikos.

        Change ScriptElement to support XHTMLMP in a better way
        https://bugs.webkit.org/show_bug.cgi?id=23452

        * dom/ScriptElement.h:
        * html/HTMLScriptElement.h:
        * svg/SVGScriptElement.h:
        (WebCore::SVGScriptElement::shouldExecuteAsJavaScript):

2009-05-18  Kevin Ollivier  <kevino@theolliviers.com>

        wx build fix, finish up changes after the accessibility dir split.

        * webcore-base.bkl:

2009-05-18  Yichao Yin  <yichao.yin@torchmobile.com.cn>

        Reviewed by George Staikos (and others).

        Add XHTMLMP support to Webkit
        https://bugs.webkit.org/show_bug.cgi?id=23452
        XHTMLMP is a strict subset of XHTML 1.1. It extends XHTML Basic and add enhanced
        functionality. Most of the functionalities have already been implemented by Webkit.
        
        The changes include:
        1) Adding <noscript> support
        2) Document conformance validation
        3) User Agent conformance validation
 
        refer to the specification: OMA-WAP-XHTMLMP-V1_1-20061020-A.pdf

        Tests: fast/xhtmlmp/check-doctype-declaration.xhtml
               fast/xhtmlmp/check-rootelement.xhtml
               fast/xhtmlmp/noscript-in-multiscripts.xhtml
               fast/xhtmlmp/noscript-nested.xhtml
               fast/xhtmlmp/noscript.xhtml

        * dom/DOMImplementation.cpp:
        (WebCore::DOMImplementation::createDocument):
        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::Document::isXHTMLMPDocument):
        * dom/Document.h:
        (WebCore::Document::shouldProcessNoscriptElement):
        (WebCore::Document::setShouldProcessNoscriptElement):
        * dom/Node.cpp:
        (WebCore::Node::createRendererIfNeeded):
        * dom/Node.h:
        * dom/XMLTokenizer.h:
        (WebCore::XMLTokenizer::setIsXHTMLMPDocument):
        (WebCore::XMLTokenizer::isXHTMLMPDocument):
        * dom/XMLTokenizerLibxml2.cpp:
        (WebCore::XMLTokenizer::XMLTokenizer):
        (WebCore::XMLTokenizer::startElementNs):
        (WebCore::XMLTokenizer::endElementNs):
        (WebCore::XMLTokenizer::endDocument):
        (WebCore::XMLTokenizer::internalSubset):
        (WebCore::getEntityHandler):
        (WebCore::externalSubsetHandler):
        * dom/XMLTokenizerQt.cpp:
        (WebCore::XMLTokenizer::XMLTokenizer):
        (WebCore::XMLTokenizer::parse):
        (WebCore::XMLTokenizer::parseStartElement):
        (WebCore::XMLTokenizer::parseEndElement):
        (WebCore::):
        * dom/make_names.pl:
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::rendererIsNeeded):
        * html/HTMLNoScriptElement.cpp: Added.
        (WebCore::HTMLNoScriptElement::HTMLNoScriptElement):
        (WebCore::HTMLNoScriptElement::~HTMLNoScriptElement):
        (WebCore::HTMLNoScriptElement::checkDTD):
        (WebCore::HTMLNoScriptElement::attach):
        (WebCore::HTMLNoScriptElement::recalcStyle):
        (WebCore::HTMLNoScriptElement::childShouldCreateRenderer):
        (WebCore::HTMLNoScriptElement::styleForRenderer):
        * html/HTMLNoScriptElement.h: Added.
        (WebCore::HTMLNoScriptElement::rendererIsNeeded):
        * html/HTMLParser.cpp:
        (WebCore::HTMLParser::getNode):
        (WebCore::HTMLParser::isInline):
        * html/HTMLTagNames.in:
        * html/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::scriptHandler):
        (WebCore::HTMLTokenizer::notifyFinished):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::addExtraFieldsToRequest):
        * platform/MIMETypeRegistry.cpp:
        (WebCore::initializeSupportedNonImageMimeTypes):

2009-05-18  Mark Rowe  <mrowe@apple.com>

        Fix the build.

        * WebCore.xcodeproj/project.pbxproj:

2009-05-18  Kenneth Rohde Christiansen  <kenneth.christiansen@openbossa.org>

        Rubber-stamped by Gustavo Noronha.

        Fixed build for the Qt port by adding the WebCore/accessibility
        directory to the includepath.

        * WebCore.pro:

2009-05-18  Chris Fleizach  <cfleizach@apple.com>

        Bug 25776: accessibility should have its own folder in WebCore project
        https://bugs.webkit.org/show_bug.cgi?id=25776
   
        Speculative fix for windows build failure.

        * WebCore.vcproj/WebCoreCommon.vsprops:

2009-05-18  David Kilzer  <ddkilzer@apple.com>

        Bug 20652: WebKit doesn't display favicons with MIME type image/vnd.microsoft.icon

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

        Reviewed by Darin Adler.

        Test: http/tests/misc/favicon-as-image.html

        * inspector/front-end/inspector.js: Added
        image/vnd.microsoft.icon to WebInspector.MIMETypes.
        * platform/MIMETypeRegistry.cpp:
        (WebCore::initializeSupportedImageMIMETypes): Added
        image/vnd.microsoft.icon to list of supported image and image
        resource MIME types.

2009-05-18  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Sam Weinig.

        Bug 25776: accessibility should have its own folder in WebCore project
        https://bugs.webkit.org/show_bug.cgi?id=25776

        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * accessibility: Added.
        * accessibility/AXObjectCache.cpp: Copied from WebCore/page/AXObjectCache.cpp.
        * accessibility/AXObjectCache.h: Copied from WebCore/page/AXObjectCache.h.
        * accessibility/AccessibilityAriaGrid.cpp: Copied from WebCore/page/AccessibilityAriaGrid.cpp.
        * accessibility/AccessibilityAriaGrid.h: Copied from WebCore/page/AccessibilityAriaGrid.h.
        * accessibility/AccessibilityAriaGridCell.cpp: Copied from WebCore/page/AccessibilityAriaGridCell.cpp.
        * accessibility/AccessibilityAriaGridCell.h: Copied from WebCore/page/AccessibilityAriaGridCell.h.
        * accessibility/AccessibilityAriaGridRow.cpp: Copied from WebCore/page/AccessibilityAriaGridRow.cpp.
        * accessibility/AccessibilityAriaGridRow.h: Copied from WebCore/page/AccessibilityAriaGridRow.h.
        * accessibility/AccessibilityImageMapLink.cpp: Copied from WebCore/page/AccessibilityImageMapLink.cpp.
        * accessibility/AccessibilityImageMapLink.h: Copied from WebCore/page/AccessibilityImageMapLink.h.
        * accessibility/AccessibilityList.cpp: Copied from WebCore/page/AccessibilityList.cpp.
        * accessibility/AccessibilityList.h: Copied from WebCore/page/AccessibilityList.h.
        * accessibility/AccessibilityListBox.cpp: Copied from WebCore/page/AccessibilityListBox.cpp.
        * accessibility/AccessibilityListBox.h: Copied from WebCore/page/AccessibilityListBox.h.
        * accessibility/AccessibilityListBoxOption.cpp: Copied from WebCore/page/AccessibilityListBoxOption.cpp.
        * accessibility/AccessibilityListBoxOption.h: Copied from WebCore/page/AccessibilityListBoxOption.h.
        * accessibility/AccessibilityObject.cpp: Copied from WebCore/page/AccessibilityObject.cpp.
        * accessibility/AccessibilityObject.h: Copied from WebCore/page/AccessibilityObject.h.
        * accessibility/AccessibilityRenderObject.cpp: Copied from WebCore/page/AccessibilityRenderObject.cpp.
        * accessibility/AccessibilityRenderObject.h: Copied from WebCore/page/AccessibilityRenderObject.h.
        * accessibility/AccessibilityTable.cpp: Copied from WebCore/page/AccessibilityTable.cpp.
        * accessibility/AccessibilityTable.h: Copied from WebCore/page/AccessibilityTable.h.
        * accessibility/AccessibilityTableCell.cpp: Copied from WebCore/page/AccessibilityTableCell.cpp.
        * accessibility/AccessibilityTableCell.h: Copied from WebCore/page/AccessibilityTableCell.h.
        * accessibility/AccessibilityTableColumn.cpp: Copied from WebCore/page/AccessibilityTableColumn.cpp.
        * accessibility/AccessibilityTableColumn.h: Copied from WebCore/page/AccessibilityTableColumn.h.
        * accessibility/AccessibilityTableHeaderContainer.cpp: Copied from WebCore/page/AccessibilityTableHeaderContainer.cpp.
        * accessibility/AccessibilityTableHeaderContainer.h: Copied from WebCore/page/AccessibilityTableHeaderContainer.h.
        * accessibility/AccessibilityTableRow.cpp: Copied from WebCore/page/AccessibilityTableRow.cpp.
        * accessibility/AccessibilityTableRow.h: Copied from WebCore/page/AccessibilityTableRow.h.
        * accessibility/chromium: Added.
        * accessibility/chromium/AXObjectCacheChromium.cpp: Copied from WebCore/page/chromium/AXObjectCacheChromium.cpp.
        * accessibility/chromium/AccessibilityObjectChromium.cpp: Copied from WebCore/page/chromium/AccessibilityObjectChromium.cpp.
        * accessibility/chromium/AccessibilityObjectWrapper.h: Copied from WebCore/page/chromium/AccessibilityObjectWrapper.h.
        * accessibility/gtk: Added.
        * accessibility/gtk/AXObjectCacheAtk.cpp: Copied from WebCore/page/gtk/AXObjectCacheAtk.cpp.
        * accessibility/gtk/AccessibilityObjectAtk.cpp: Copied from WebCore/page/gtk/AccessibilityObjectAtk.cpp.
        * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp: Copied from WebCore/page/gtk/AccessibilityObjectWrapperAtk.cpp.
        * accessibility/gtk/AccessibilityObjectWrapperAtk.h: Copied from WebCore/page/gtk/AccessibilityObjectWrapperAtk.h.
        * accessibility/mac: Added.
        * accessibility/mac/AXObjectCacheMac.mm: Copied from WebCore/page/mac/AXObjectCacheMac.mm.
        * accessibility/mac/AccessibilityObjectMac.mm: Copied from WebCore/page/mac/AccessibilityObjectMac.mm.
        * accessibility/mac/AccessibilityObjectWrapper.h: Copied from WebCore/page/mac/AccessibilityObjectWrapper.h.
        * accessibility/mac/AccessibilityObjectWrapper.mm: Copied from WebCore/page/mac/AccessibilityObjectWrapper.mm.
        * accessibility/qt: Added.
        * accessibility/qt/AccessibilityObjectQt.cpp: Copied from WebCore/page/qt/AccessibilityObjectQt.cpp.
        * accessibility/win: Added.
        * accessibility/win/AXObjectCacheWin.cpp: Copied from WebCore/page/win/AXObjectCacheWin.cpp.
        * accessibility/win/AccessibilityObjectWin.cpp: Copied from WebCore/page/win/AccessibilityObjectWin.cpp.
        * accessibility/win/AccessibilityObjectWrapperWin.h: Copied from WebCore/page/win/AccessibilityObjectWrapperWin.h.
        * accessibility/wx: Added.
        * accessibility/wx/AccessibilityObjectWx.cpp: Copied from WebCore/page/wx/AccessibilityObjectWx.cpp.
        * page/AXObjectCache.cpp: Removed.
        * page/AXObjectCache.h: Removed.
        * page/AccessibilityAriaGrid.cpp: Removed.
        * page/AccessibilityAriaGrid.h: Removed.
        * page/AccessibilityAriaGridCell.cpp: Removed.
        * page/AccessibilityAriaGridCell.h: Removed.
        * page/AccessibilityAriaGridRow.cpp: Removed.
        * page/AccessibilityAriaGridRow.h: Removed.
        * page/AccessibilityImageMapLink.cpp: Removed.
        * page/AccessibilityImageMapLink.h: Removed.
        * page/AccessibilityList.cpp: Removed.
        * page/AccessibilityList.h: Removed.
        * page/AccessibilityListBox.cpp: Removed.
        * page/AccessibilityListBox.h: Removed.
        * page/AccessibilityListBoxOption.cpp: Removed.
        * page/AccessibilityListBoxOption.h: Removed.
        * page/AccessibilityObject.cpp: Removed.
        * page/AccessibilityObject.h: Removed.
        * page/AccessibilityRenderObject.cpp: Removed.
        * page/AccessibilityRenderObject.h: Removed.
        * page/AccessibilityTable.cpp: Removed.
        * page/AccessibilityTable.h: Removed.
        * page/AccessibilityTableCell.cpp: Removed.
        * page/AccessibilityTableCell.h: Removed.
        * page/AccessibilityTableColumn.cpp: Removed.
        * page/AccessibilityTableColumn.h: Removed.
        * page/AccessibilityTableHeaderContainer.cpp: Removed.
        * page/AccessibilityTableHeaderContainer.h: Removed.
        * page/AccessibilityTableRow.cpp: Removed.
        * page/AccessibilityTableRow.h: Removed.
        * page/chromium/AXObjectCacheChromium.cpp: Removed.
        * page/chromium/AccessibilityObjectChromium.cpp: Removed.
        * page/chromium/AccessibilityObjectWrapper.h: Removed.
        * page/gtk/AXObjectCacheAtk.cpp: Removed.
        * page/gtk/AccessibilityObjectAtk.cpp: Removed.
        * page/gtk/AccessibilityObjectWrapperAtk.cpp: Removed.
        * page/gtk/AccessibilityObjectWrapperAtk.h: Removed.
        * page/mac/AXObjectCacheMac.mm: Removed.
        * page/mac/AccessibilityObjectMac.mm: Removed.
        * page/mac/AccessibilityObjectWrapper.h: Removed.
        * page/mac/AccessibilityObjectWrapper.mm: Removed.
        * page/qt/AccessibilityObjectQt.cpp: Removed.
        * page/win/AXObjectCacheWin.cpp: Removed.
        * page/win/AccessibilityObjectWin.cpp: Removed.
        * page/win/AccessibilityObjectWrapperWin.h: Removed.
        * page/wx/AccessibilityObjectWx.cpp: Removed.

2009-05-18  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Jan Alonzo.

        https://bugs.webkit.org/show_bug.cgi?id=25854
        [GTK] Should tell servers we only support identity as content encoding

        Let servers know we only support identity as content
        encoding. We will implement this in libsoup.

        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::ResourceHandle::startHttp):

2009-05-18  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin Adler.

        <rdar://problem/6881160> REGRESSION (r41425): Unable to create battle.net account due to
        CAPTCHA failure.

        The problem was that after loading and displaying a CAPTCHA image, it was loaded from
        the server again due to preloading. So, the server expected the last loaded (invisible)
        CAPTCHA text to be typed and posted back.

        I don't know how to make tests for preloading.

        * loader/DocLoader.cpp: (WebCore::DocLoader::checkForPendingPreloads): There is never a reason
        to preload after loading for real - and if cache policy is CachePolicyReload, that actually
        results in another load from network layer.

        * loader/FrameLoader.cpp: (WebCore::FrameLoader::cachePolicy): It's not good for cachePolicy()
        to lie, but I don't know how to re-do r41425 properly. Added a FIXME.

2009-05-18  Ariya Hidayat  <ariya.hidayat@nokia.com>

        Reviewed by Simon Hausmann.

        Done together with Balazs Kelemen  <kelemen.balazs@stud.u-szeged.hu>.

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

        [Qt] Reuse FontPlatformData for the same FontDescription.
        This effectively prevents growing heap usage for loading every web page.

        * platform/graphics/qt/FontCacheQt.cpp:
        (WebCore::qHash): Necessary for FontPlatformDataCache.
        (WebCore::FontCache::getCachedFontPlatformData): Reuse the instance if
        it exists, otherwise create a new one and insert it in the cache.

2009-05-18  Balazs Kelemen  <kelemen.balazs@stud.u-szeged.hu>

        Reviewed by Ariya Hidayat.

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

        [Qt] Fix the leak in FontFallbackList::fontDataAt() function.
        When creating a new instance of SimpleFontData, put it in the font list
        so that it can deleted later on.

        * platform/graphics/qt/FontFallbackListQt.cpp:
        (WebCore::FontFallbackList::invalidate):
        (WebCore::FontFallbackList::releaseFontData):
        (WebCore::FontFallbackList::fontDataAt):

2009-05-15  Jan Michael Alonzo  <jmalonzo@webkit.org>

         Reviewed by Xan Lopez.

         [Gtk] Various autotools build refactoring and fixes
         https://bugs.webkit.org/show_bug.cgi?id=25286

         Style fixes

         * GNUmakefile.am:

2009-05-17  George Staikos  <george.staikos@torchmobile.com>

        Not reviewed - build fix.

        Fix typo: constr -> const.

        * wml/WMLInputElement.h:
        (WebCore::WMLInputElement::setPlaceholder):

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

        Fix done by Simon Fraser (reviewed by me).

        <rdar://problem/6893775> Page with screen-only stylesheet with overflow and height
        transitions has bad layout and overlapping garbled text when printing

        * manual-tests/print-with-height-transition-in-screen-stylesheet.html: Added.

        * page/animation/AnimationController.cpp:
        (WebCore::AnimationController::updateAnimations): Don't run transitions when printing.

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

        Reviewed by Simon Fraser.

        <rdar://problem/6870241> REGRESSION: Programmatically selected popup menu item not shown

        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::setSelectedIndex): Added a call to updateFromElement and
        also a type check on the selected index to avoid a bad cast to HTMLOptionElement.

        * manual-tests/select-option-in-onload.html: Added.

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

        Reviewed by Anders Carlsson

        Rename local variables for readability.
        
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintBorder):

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

        Reviewed by Mark Rowe.

        Bug 25840: fix some warnings seen on the GTK bot
        https://bugs.webkit.org/show_bug.cgi?id=25840

        * platform/ScrollView.cpp:
        (WebCore::ScrollView::platformScrollbarModes): Initialize results here.
        This is really just to quiet warnings. I think this code is unreachable.
        Someone could put ASSERT_NOT_REACHED() in here too at some point.

        * plugins/PluginStream.cpp:
        (WebCore::PluginStream::startStream): Use proper printf format for int
        here, %d, not %lu. This could cause a real problem when compiled 64-bit,
        so it's good to fix.

        * rendering/RenderTextControl.cpp:
        (WebCore::getNextSoftBreak): Initialize breakOffset to 0 here. This is
        really just to quiet the warning, but still seems like a good idea.

2009-05-17  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Darin Adler.

        Bug 25769: Fix accessibility warnings on GTK
        https://bugs.webkit.org/show_bug.cgi?id=25769

        * page/AccessibilityTable.cpp:
        (WebCore::AccessibilityTable::columnCount): Get rid of excess const.
        (WebCore::AccessibilityTable::rowCount): Ditto.
        * page/AccessibilityTable.h: Ditto.

2009-05-17  Kai Brüning  <kai@granus.net>

        Reviewed by Darin Adler.

        bug 25822: DOM normalize does not remove empty text node between element nodes
        https://bugs.webkit.org/show_bug.cgi?id=25822

        Test: fast/dom/Node/normalize.html

        * dom/Node.cpp:
        (WebCore::Node::normalize): Changed to remove any empty text nodes.

2009-05-16  Dave Moore  <davemoore@google.com>

        Reviewed by Darin Adler.

        Allow Strings to be created with one malloc node with no copying
        https://bugs.webkit.org/show_bug.cgi?id=25779

        Add new methods to String and StringImpl, refactoring existing
        methods in StringImpl to use new createUninitialized() method.

        * platform/text/PlatformString.h:
        (WebCore::String::createUninitialized):
        * platform/text/StringImpl.cpp:
        (WebCore::StringImpl::createUninitialized):
        (WebCore::StringImpl::create):
        * platform/text/StringImpl.h:

2009-05-16  Mark Rowe  <mrowe@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/6827041> WebCore should stop throwing away the CGImageSourceRef to
        dramatically improve animated GIF decoding performance

        Recent versions of ImageIO discard previously decoded image frames if the client
        application no longer holds references to them, so there's no need to throw away
        the decoder unless we're explicitly asked to destroy all of the frames.

        This drops peak CPU usage when displaying <http://www.aintitcool.com/files/HoD2.gif>
        from over 90% to below 3%.

        * platform/graphics/cg/ImageSourceCG.cpp:
        (WebCore::ImageSource::clear):

2009-05-16  Dan Bernstein  <mitz@apple.com>

        Reviewed by Alexey Proskuryakov.

        - fix <rdar://problem/6873305> Two distinct characters are not displayed
          correctly with 2 of the font selections from the stickies widget

        Test: platform/mac/editing/pasteboard/text-precomposed.html

        Ensure that "text/plain" data retrieved from the clipboard is always
        precomposed. This makes Clipboard::getData() and
        Pasteboard::documentFragment() consistent with Pasteboard::plainText()
        and -[WebHTMLView _documentFragmentFromPasteboard:forType:inContext:subresources:].

        * platform/mac/ClipboardMac.mm:
        (WebCore::ClipboardMac::getData):
        * platform/mac/PasteboardMac.mm:
        (WebCore::Pasteboard::documentFragment):

2009-05-16  Mark Rowe  <mrowe@apple.com>

        Build fix.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::valueForFamily): Declare valueForFamily as static.

2009-05-15  Darin Adler  <darin@apple.com>

        Reviewed by Dan Bernstein.

        <rdar://problem/6883872> REGRESSION (r43243): computed style for font-family is returning
        only the generic font, if any generic font is in the family list

        Test: fast/css/getComputedStyle/computed-style-font-family.html

        * css/CSSComputedStyleDeclaration.cpp:
        Sorted computedProperties alphabetically. Added CSSPropertyClip and CSSPropertyWordBreak.
        (WebCore::identifierForFamily): Added. Maps internal font family names to identifiers.
        (WebCore::valueForFamily): Added. Creates either an identifier or a string as appropriate.
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue): Implemented the font-family
        property as specified in the CSS standard. Fixed clip to return "auto" when there is no
        clip set instead of nothing at all. Gave inheritableProperties and numInheritableProperties
        internal linkage since there was no reason for them to have external linkage.

2009-05-15  Adam Barth  <abarth@webkit.org>

        Reviewed by Oliver Hunt.

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

        Append instead of throwing when insertItemBefore gets an out-of-bound
        index.

        Test: svg/dom/svglist-insertItemBefore-appends.html

        * svg/SVGList.h:
        (WebCore::SVGList::insertItemBefore):

2009-05-15  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Darin Adler
        
        https://bugs.webkit.org/show_bug.cgi?id=25829
        
        Fix -webkit-background-clip:text when the renderer had a non (0,0) x, y offset.

        Test: fast/backgrounds/background-clip-text.html

        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintFillLayerExtended):

2009-05-15  Dan Bernstein  <mitz@apple.com>

        Reviewed by Sam Weinig.

        - fix <rdar://problem/6888244> REGRESSION: Using the Up or Down keyboard
          arrows, I can't navigate caret between To Do items in a Note message

        Test: editing/selection/move-by-line-004.html

        * editing/visible_units.cpp:
        (WebCore::enclosingNodeWithNonInlineRenderer): Added this helper
        function.
        (WebCore::previousLinePosition): When advancing to the next candidate
        node, stop when leaving the closest ancestor of the original node that
        is not an inline. The code, incorrectly, was trying to exit the closest
        ancestor of that type which was editable, and therefore missing other
        blocks in the same editable root.
        (WebCore::nextLinePosition): Ditto.

2009-05-15  Fridrich Strba  <fridrich.strba@bluewin.ch>

        Reviewed by Jan Alonzo.

        Converting filename to uri by concatenating strings is broken
        on Windows. So, don't do it for that platform.

        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::ResourceHandle::startGio):

2009-05-15  Nate Chapin  <japhet@google.com>

        Reviewed by Dimitri Glazkov.

        Upstream V8 bindings for HTMLOptionsCollection and HTMLSelectElementCollection.
        https://bugs.webkit.org/show_bug.cgi?id=25739

        * bindings/v8/V8Collection.cpp: Added.
        (WebCore::toOptionsCollectionSetter): Moved from v8_custom.cpp.
        * bindings/v8/V8Collection.h: Added prototype for toOptionsCollectionSetter().
        * bindings/v8/custom/V8HTMLOptionsCollectionCustom.cpp:
        (WebCore::INDEXED_PROPERTY_SETTER): Moved from v8_custom.cpp.
        * bindings/v8/custom/V8HTMLSelectElementCollectionCustom.cpp: Added.
        (WebCore::NAMED_PROPERTY_GETTER):  Moved from v8_custom.cpp.
        (WebCore::INDEXED_PROPERTY_SETTER):  Moved from v8_custom.cpp.

2009-05-15  David Kilzer  <ddkilzer@apple.com>

        <rdar://problem/6649936> Add *.exp export files to WebCore Xcode project

        Reviewed by Darin Adler and Timothy Hatcher.

        * WebCore.xcodeproj/project.pbxproj: Added Exports group, moved
        WebCore.base.exp into the group, and added 10 other *.exp files
        in WebCore.

2009-05-15  Dimitri Glazkov  <dglazkov@chromium.org>

        Unreviewed, build fix.

        https://bugs.webkit.org/show_bug.cgi?id=25826
        Change type to only have custom getter in JCS.

        * html/HTMLInputElement.idl: Changed CustomGetter attribute to JSCCustomGetter.

2009-05-15  Antti Koivisto  <antti@apple.com>

        Reviewed by Dave Kilzer.

        Add a settings entry to en/disable web font support
        https://bugs.webkit.org/show_bug.cgi?id=25239

        * css/CSSFontSelector.cpp:
        (WebCore::CSSFontSelector::addFontFaceRule):

2009-05-15  Sam Weinig  <sam@webkit.org>

        Reviewed by Steve Falkenburg.

        Remove dead youtube site specific hack that was commented out.

        * bindings/js/JSNavigatorCustom.cpp:
        * page/Navigator.idl:

2009-05-15  Sam Weinig  <sam@webkit.org>

        Reviewed by Beth Dakin.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=25826
        <rdar://problem/6884742> 
        REGRESSION: In Gmail's Edit Link dialog, I can't type in the Link To: field (due to <input type=url> support)

        Added a site specific quirk for mail.google.com which returns "text" when getting the type of an <input type=url>

        * bindings/js/JSHTMLInputElementCustom.cpp:
        (WebCore::needsGmailQuirk):
        (WebCore::JSHTMLInputElement::type):
        * html/HTMLInputElement.idl:

2009-05-14  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=25810
        Upstream V8 DOM Wrapper map declarations.

        No behavior change, so no tests.

        * bindings/v8/V8DOMMap.h:
        (WebCore::WeakReferenceMap::WeakReferenceMap): Added.
        (WebCore::WeakReferenceMap::~WeakReferenceMap): Added.
        (WebCore::WeakReferenceMap::get): Added.
        (WebCore::WeakReferenceMap::set): Added.
        (WebCore::WeakReferenceMap::forget): Added.
        (WebCore::WeakReferenceMap::contains): Added.
        (WebCore::WeakReferenceMap::impl): Added.
        (WebCore::DOMWrapperMap::DOMWrapperMap): Added.

2009-05-15  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dave Hyatt
        
        https://bugs.webkit.org/show_bug.cgi?id=25773
        
        Rename GraphicsLayer::graphicsContextsFlipped() to 
        GraphicsLayer::compositingCoordinatesOrientation() in order to clarify the usage.

        Clean up code around the GraphicsLayer "contents" layer that makes use of this
        flag, by removing the setHasContentsLayer() method, and just using setContentsLayer(),
        which can then always do the flipping if necessary.

        Only affects ACCELERATED_COMPOSITING builds.
        
        * platform/graphics/GraphicsLayer.h:
        (WebCore::GraphicsLayer::):
        * platform/graphics/mac/GraphicsLayerCA.h:
        (WebCore::GraphicsLayerCA::contentsLayer):
        * platform/graphics/mac/GraphicsLayerCA.mm:
        (WebCore::GraphicsLayer::compositingCoordinatesOrientation):
        (WebCore::GraphicsLayerCA::setBackgroundColor):
        (WebCore::GraphicsLayerCA::clearBackgroundColor):
        (WebCore::GraphicsLayerCA::setContentsToImage):
        (WebCore::GraphicsLayerCA::clearContents):
        (WebCore::GraphicsLayerCA::swapFromOrToTiledLayer):
        (WebCore::GraphicsLayerCA::setContentsLayer):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::ensureRootPlatformLayer):

2009-05-15  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Simon Fraser.

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

        Avoid calling setNeedsStyleRecalc() when we are
        putting an animated page in the cache. This avoids
        the assert and subsequent problems with a dirty 
        page going into the cache.

        * page/animation/KeyframeAnimation.cpp:
        (WebCore::KeyframeAnimation::endAnimation):

2009-05-15  Francisco Tolmasky  <francisco@280north.com>

        BUG 25467: JavaScript debugger should use function.displayName as the function's name in the call stack
        <https://bugs.webkit.org/show_bug.cgi?id=25467>
        
        Reviewed by Adam Roben.

        * inspector/JavaScriptCallFrame.cpp:
        (WebCore::JavaScriptCallFrame::functionName): Use calculatedFunctionName which takes into account displayName
        * inspector/front-end/CallStackSidebarPane.js: Remove "|| anonymous function" since it is handled internally just like in profiles
        (WebInspector.CallStackSidebarPane.prototype.update):

2009-05-15  Alexey Proskuryakov  <ap@webkit.org>

        Windows build fix (and a matching Mac change, to avoid unnecessarily diverging the implementations).

        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::ResourceHandle::start):
        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::start):
        Check strings with isEmpty(), not relying on any implicit conversions.

2009-05-15  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin Adler, Brady Eidson and Eric Carlson.

        <rdar://problem/6875643> REGRESSION: Unable to download file with FTP URL that includes
        username and password (Lightwave 9.6 for Mac from Newtek site)

        CFNetwork only invokes didReceiveAuthenticationChallenge for HTTP requests. Credentials
        for other protocols (including FTP) should be included as part of the URL.

        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::ResourceHandle::start):
        (WebCore::WebCoreSynchronousLoader::load):
        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::start):
        (+[WebCoreSynchronousLoader loadRequest:allowStoredCredentials:returningResponse:error:]):
        Put credentials in URL for non-HTTP requests.

        * xml/XMLHttpRequest.cpp: (WebCore::XMLHttpRequest::makeSimpleCrossOriginAccessRequest):
        Bail out quickly if the URL is non-HTTP. Cross-origin requests require specific HTTP
        headers to be received, so they cannot work with other protocols.

2009-05-15  Ariya Hidayat  <ariya.hidayat@nokia.com>

        Reviewed by Holger Freyther.

        [Qt] In the image decoder, remove the raw image data represented as QImage
        once the image is converted to QPixmap and inserted in the pixmap cache.
        This effectively reduces the heap usage when running on graphics system
        other than raster (i.e the case where QImage != QPixmap).

        * platform/graphics/qt/ImageDecoderQt.cpp:
        (WebCore::ImageDecoderQt::imageAtIndex): Nullified the image on purpose.
        * platform/graphics/qt/ImageDecoderQt.h: Made m_imageList mutable.

2009-05-15  Ariya Hidayat  <ariya.hidayat@nokia.com>

        Reviewed by Holger Freyther.

        [Qt] Refactor alpha channel detection the image decoder.
        Sets the boolean flag as soon as the image is being read.

        * platform/graphics/qt/ImageDecoderQt.cpp:
        (WebCore::ImageDecoderQt::ImageDecoderQt): Initialized m_hasAlphaChannel.
        (WebCore::ImageDecoderQt::setData): Set the flag when appropriate.
        (WebCore::ImageDecoderQt::supportsAlpha): Simplified.
        (WebCore::ImageDecoderQt::reset): Resetted the flag.
        * platform/graphics/qt/ImageDecoderQt.h: Added m_hasAlphaChannel.

2009-05-15  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Darin Adler.

        Finish support for disabling the JavaScript Debugger and Profiler 
        at compile time in WebCore
        https://bugs.webkit.org/show_bug.cgi?id=24917

        * bindings/js/JSInspectorControllerCustom.cpp: ENABLE_JAVASCRIPT_DEBUGGER guard
        * bindings/js/JSJavaScriptCallFrameCustom.cpp: Ditto.
        * inspector/JavaScriptCallFrame.cpp: Ditto.
        * inspector/JavaScriptCallFrame.h: Ditto.
        * inspector/JavaScriptCallFrame.idl: Ditto.
        * inspector/JavaScriptDebugListener.h: Ditto.
        * inspector/JavaScriptDebugServer.cpp: Ditto.
        * inspector/JavaScriptDebugServer.h: Ditto.
        * inspector/JavaScriptProfile.cpp: Ditto.
        * inspector/JavaScriptProfile.h: Ditto.
        * inspector/JavaScriptProfileNode.cpp: Ditto.
        * inspector/JavaScriptProfileNode.h: Ditto.
        * page/Console.cpp: Use guard ENABLE(JAVASCRIPT_DEBUGGER) instead of USE(JSC)
        * page/Console.h: Ditto.
        * page/Console.idl: Use guard ENABLE(JAVASCRIPT_DEBUGGER) instead of !defined(V8_BINDING)

2009-05-15  Jungshik Shin  <jshin@chromium.org>

        Reviewed by Dimitri Glazkov

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

        Improve the font fallback for characters belonging to 'common' scripts
        in ChromiumWin port. Make characters like Danda, Double Danda (punctuation
        marks in North Indian scripts) and currency signs (e.g. Thai Baht)
        rendered correctly in Chromium on Win. 

        Tests: fast/text/international/danda-space.html
               fast/text/international/thai-baht-space.html

        * platform/graphics/chromium/FontUtilsChromiumWin.cpp:
        (WebCore::FontMap::getScriptBasedOnUnicodeBlock):
        (WebCore::FontMap::getScript):
        (WebCore::getFallbackFamily):

2009-05-15  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Holger Freyther.

        https://bugs.webkit.org/show_bug.cgi?id=25731
        [Qt] Cleanup - move files exclusive to XPATH and XSLT under the
        appropriate build section

        * WebCore.pro:

2009-05-14  Evan Martin  <evan@chromium.org>

        Reviewed by Eric Seidel and Darin Fisher.

        Fix a font-related leak in Chromium's Skia backend found by Valgrind.
        https://bugs.webkit.org/show_bug.cgi?id=25760

        * platform/graphics/chromium/FontCacheLinux.cpp:
        (WebCore::FontCache::getFontDataForCharacters):
        Use caches instead of "new" on every call.

2009-05-14  Rahul Kuchhal  <kuchhal@chromium.org>

        Reviewed by Eric Seidel.

        Initialize m_spreadMethod in the second constructor too. Not sure if
        a test case can be written, so no test case.
        https://bugs.webkit.org/show_bug.cgi?id=25814

        No test possible: spreadMethod() is only used by SVG, doesn't seem possible to hit
        this case, since several other SVG tests already should be calling
        spreadMethod().

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

2009-05-14  Simon Fraser  <simon.fraser@apple.com>

        No review.

        Fix Windows build after renaming MediaControlElements to MediaControlElementType.

        * rendering/RenderMediaControls.cpp:
        (WebCore::RenderMediaControls::paintMediaControlsPart):
        * rendering/RenderMediaControls.h:

2009-05-14  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Darin Adler
        
        <rdar://problem/6739671> Movie controller’s play button does not change into a pause
        button

        Fix a controls repaint issue when the playing state of a video changes by
        educating the MediaControlInputElements about the state they are currently
        displaying, and making them repaint when that state changes. This applies
        to the play/pause and mute/unmute buttons, which both have two states.
        
        * rendering/MediaControlElements.cpp:
        (WebCore::MediaControlInputElement::MediaControlInputElement):
        (WebCore::MediaControlSeekButtonElement::MediaControlSeekButtonElement):
        (WebCore::MediaControlTimelineElement::MediaControlTimelineElement):
        (WebCore::MediaControlFullscreenButtonElement::MediaControlFullscreenButtonElement):
        Pass in and initialize the MediaControlElementType.
        
        (WebCore::MediaControlInputElement::update):
        Update the display type too
        
        (WebCore::MediaControlInputElement::setDisplayType):
        (WebCore::MediaControlMuteButtonElement::MediaControlMuteButtonElement):
        (WebCore::MediaControlMuteButtonElement::updateDisplayType):
        Choose muted vs. unmuted display.
        
        (WebCore::MediaControlPlayButtonElement::MediaControlPlayButtonElement):
        (WebCore::MediaControlPlayButtonElement::updateDisplayType):
        Choose play vs. paused display.

        * rendering/MediaControlElements.h:
        Renamed the MediaControlElements enum to MediaControlElementType.
        (WebCore::MediaControlInputElement::updateDisplayType):
        Add a MediaControlElementType member variable with a setter to allow
        the element to know what type it is displaying.

2009-05-14  Dean Jackson  <dino@apple.com>

        Reviewed by Simon Fraser.

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

        Add support for aspect-ratio and orientation
        media queries.

        Tests: fast/media/mq-aspect-ratio.html
               fast/media/mq-orientation.html

        * css/MediaFeatureNames.h:
        * css/MediaQueryEvaluator.cpp:
        (WebCore::orientationMediaFeatureEval):
        (WebCore::aspect_ratioMediaFeatureEval):
        (WebCore::min_aspect_ratioMediaFeatureEval):
        (WebCore::max_aspect_ratioMediaFeatureEval):
        * css/MediaQueryExp.h:
        (WebCore::MediaQueryExp::isViewportDependent):

2009-05-14  Kevin McCullough  <kmccullough@apple.com>

        - Resubmitting previous patch, correctly this time.

        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::splitTreeToNode):
        * editing/IndentOutdentCommand.cpp:
        (WebCore::IndentOutdentCommand::outdentParagraph):

2009-05-14  Kevin McCullough  <kmccullough@apple.com>

        - Rolling out to fix a bug and the build

        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::splitTreeToNode):
        * editing/IndentOutdentCommand.cpp:
        (WebCore::IndentOutdentCommand::outdentParagraph):

2009-05-14  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Dan Bernstein.

        <rdar://problem/6510362> In some situations message content is messed up
        when indentation is decreased

        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::splitTreeToNode): Calling recursively
        here served to do nothing because this function will return if the
        second argument is the parent of the first.  Not only does this now work
        as intended, but is necessary for the rest of this fix.
        * editing/IndentOutdentCommand.cpp:
        (WebCore::IndentOutdentCommand::outdentParagraph): To determine if we 
        are the last node in a <blockquote>, and can therefore remove the
        <blockquote> we need the endOfEnclosingBlock to extend to the end of
        the <blockquote> not just the next block, which could be a <div>, for
        example. 
        - Also If a <blockquote> is removed, but it's the child of another
        <blockquote> then its children are now children of the top <blockquote>.
        In this case we want to split the parent <blockquote> because the next
        paragraph assumes that it is the first node in its <blockquote> and if
        that is not true, various bugs arise.

2009-05-14  Brady Eidson  <beidson@apple.com>

        Build fix.

        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::setDefaultMIMEType):

2009-05-14  Brady Eidson  <beidson@apple.com>

        Reviewed by Adam Roben.

        Fix http/tests/xmlhttprequest/cache-override.html on Windows

        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::setDefaultMIMEType): Modify the previous response so it maintains all of its data.
        (WebCore::didReceiveResponse): Call setDefaultMIMEType() when needed.
        (WebCore::WebCoreSynchronousLoader::load): Ditto.

2009-05-14  Paul Godavari  <paul@chromium.org>

        Reviewed by Dimitri Glazkov.

        Bug: Mac Chromium popup menus are not positioned correctly
        on scrolled pages:
        https://bugs.webkit.org/show_bug.cgi?id=25772

        Fix Mac Chromium popup menu placement by taking into
        account any scrolling in the current window. This mirrors
        the positioning done in PopupContainer::show(), which is
        used on Chromium Windows and linux.

        Also fixed indenting for this method.

        * platform/chromium/PopupMenuChromium.cpp:
        (WebCore::PopupContainer::showExternal):

2009-05-14  Drew Wilson  <atwilson@google.com>

        Reviewed by Dimitri Glazkov.

        https://bugs.webkit.org/show_bug.cgi?id=25774
        Upstream V8MessagePortCustom.cpp from the chromium repository.

        * bindings/v8/custom/V8MessagePortCustom.cpp: Added.
        (WebCore::ACCESSOR_GETTER):
        (WebCore::ACCESSOR_SETTER):
        (WebCore::CALLBACK_FUNC_DECL):

2009-05-14  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Darin Adler

        https://bugs.webkit.org/show_bug.cgi?id=25777
        
        StyleGeneratedImage::imageSize() needs to take zooming into account for
        fixed-size images (i.e. canvas) so that canvas-as-image-background
        renders correctly with zooming.

        Test: fast/canvas/canvas-bg-zoom.html

        * rendering/style/StyleGeneratedImage.cpp:
        (WebCore::StyleGeneratedImage::imageSize):

2009-05-14  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin Adler.

        Patch originally by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=25796
        <rdar://problem/6886654> Shouldn't set referer and origin in Loader::Host::servePendingRequests().

        Test: http/tests/security/credentials-in-referer.html

        * loader/loader.cpp: (WebCore::Loader::Host::servePendingRequests): This will be done in
        SubresourceLoader::create() anyway.

2009-05-14  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Darin Adler.

        Bug 25797: Pages with image maps are not properly read with Voiceover
        https://bugs.webkit.org/show_bug.cgi?id=25797

        * page/AccessibilityImageMapLink.h:
        (WebCore::AccessibilityImageMapLink::isEnabled):

2009-05-14  Brady Eidson  <beidson@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/6887762> and https://bugs.webkit.org/show_bug.cgi?id=25790 

        Nuke the bogus ASSERT and add a legitimate ASSERT with a little help from a new accessor.

        * platform/network/ResourceHandle.cpp:
        (WebCore::ResourceHandle::shouldContentSniff):
        * platform/network/ResourceHandle.h:

        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::createCFURLResponseWithDefaultMIMEType):
        (WebCore::didReceiveResponse):

2009-05-14  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=25791
        Bug 25791: HTMLMediaElement: implement 'startTime' attribute
        
        Support the recently added HTMLMediaElement 'startTime' attribute. This is a read-only 
        value that only the media engine can know, so we just need to add the attribute 
        to HTMLMediaElement and add methods to MediaPlayer and MediaPlayerPrivateInterface so 
        the engine can make it available.

        Test: media/media-startTime.html

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::startTime): New.
        * html/HTMLMediaElement.h:
        * html/HTMLMediaElement.idl:

        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::startTime): New.
        * platform/graphics/MediaPlayer.h:

        * platform/graphics/MediaPlayerPrivate.h:
        (WebCore::MediaPlayerPrivateInterface::startTime): New.

2009-05-14  Kenneth Rohde Christiansen  <kenneth.christiansen@openbossa.org>

        Reviewed by Ariya Hidayat.

        Only create a QWidget wrapper for the plugin in the case it is not
        in the Qt window mapper, and thus receiving events from the Qt
        event system. Native Qt based plugins running in process, will
        already be in the window mapper, and thus creating a wrapper,
        stops them from getting events from Qt, as they are redirected
        to the wrapper.

        * plugins/qt/PluginContainerQt.cpp:
        (PluginContainerQt::on_clientIsEmbedded):

2009-05-14  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=25784
        Leaks seen on HTTP tests

        We should change ResourceHandleMac.mm to use smart pointers some day, but this is a minimal fix.

        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::loadResourceSynchronously): Release mutable request copy made for
        disabling content sniffing, matching the normal code path.
        (-[WebCoreSynchronousLoader connection:willSendRequest:redirectResponse:]): Release m_user
        and m_pass before overwriting.
        (-[WebCoreSynchronousLoader connection:didReceiveAuthenticationChallenge:]): Ditto.

2009-05-14  Yury Semikhatsky <yurys@chromium.org>

        Reviewed by Dimitri Glazkov.

        https://bugs.webkit.org/show_bug.cgi?id=25418
        Remove new lines from event handler wrapper to make line numbers
        in the wrapped script conside with the lines in the original script.

        * bindings/v8/V8LazyEventListener.cpp:
        (WebCore::V8LazyEventListener::getListenerFunction):
        (WebCore::V8LazyEventListener::getWrappedListenerFunction):

2009-05-14  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Alexey Proskuryakov.

        Remove a JSC-specific include that is already added by including
        ScriptController.

        No change in behavior, so no tests.

        * dom/Document.cpp: Removed JSDOMBinding include.

2009-05-14  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Brady Eidson.

        <rdar://problem/4072827> Downloaded non-ASCII file name becomes garbled

        Hopefully, a final stroke. When updating ResourceRequest from a platform request, a wrong
        CFString function was used, so a user-friendly name was stored in encoding fallback array.

        * platform/network/cf/ResourceRequestCFNet.cpp: (WebCore::ResourceRequest::doUpdateResourceRequest):
        * platform/network/mac/ResourceRequestMac.mm: (WebCore::ResourceRequest::doUpdateResourceRequest):

2009-05-14  Ben Murdoch  <benm@google.com>

        Reviewed by Darin Adler.

        Add more ENABLE_DATABASE guards.
        https://bugs.webkit.org/show_bug.cgi?id=25616

        See also https://bugs.webkit.org/show_bug.cgi?id=24776 (original set of guards)

        * bindings/js/JSSQLResultSetRowListCustom.cpp:
        * bindings/v8/custom/V8CustomSQLStatementCallback.cpp:
        * bindings/v8/custom/V8CustomSQLStatementCallback.h:
        * bindings/v8/custom/V8CustomSQLStatementErrorCallback.cpp:
        * bindings/v8/custom/V8CustomSQLStatementErrorCallback.h:
        * bindings/v8/custom/V8CustomSQLTransactionCallback.cpp:
        * bindings/v8/custom/V8CustomSQLTransactionCallback.h:
        * bindings/v8/custom/V8CustomSQLTransactionErrorCallback.cpp:
        * bindings/v8/custom/V8CustomSQLTransactionErrorCallback.h:
        * bindings/v8/custom/V8DatabaseCustom.cpp:
        * bindings/v8/custom/V8SQLResultSetRowListCustom.cpp:
        * bindings/v8/custom/V8SQLTransactionCustom.cpp:
        * storage/Database.cpp:
        * storage/DatabaseDetails.h:
        * storage/OriginUsageRecord.cpp:
        * storage/OriginUsageRecord.h:
        * storage/SQLError.h:
        * storage/SQLError.idl:
        * storage/SQLResultSet.cpp:
        * storage/SQLResultSet.h:
        * storage/SQLResultSet.idl:
        * storage/SQLResultSetRowList.cpp:
        * storage/SQLResultSetRowList.h:
        * storage/SQLResultSetRowList.idl:
        * storage/SQLStatementCallback.h:
        * storage/SQLStatementErrorCallback.h:
        * storage/SQLTransactionCallback.h:
        * storage/SQLTransactionErrorCallback.h:

2009-05-11  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Darin Adler.

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

        Gtk was the last platform to not unregister plugins when
        the plugin is stopped. Catch up with r43550.

        * plugins/gtk/PluginViewGtk.cpp:
        (WebCore::PluginView::stop):

2009-05-14  Adam Roben  <aroben@apple.com>

        Make WebCore.vcproj's pre-build event work again

        * WebCore.vcproj/WebCore.vcproj: Removed empty override of the
        pre-build event that was accidentally left in when the pre-build event
        was moved to WebCoreCommon.vsprops.

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

        * manual-tests/right-click-crash.html: Added.

2009-05-14  Mark Rowe  <mrowe@apple.com>

        Rubber-stamped by Darin Adler.

        <rdar://problem/6681868> When building with Xcode 3.1.3 should be using gcc 4.2

        The meaning of XCODE_VERSION_ACTUAL is more sensible in newer versions of Xcode.
        Update our logic to select the compiler version to use the more appropriate XCODE_VERSION_MINOR
        if the version of Xcode supports it, and fall back to XCODE_VERSION_ACTUAL if not.

        * Configurations/Base.xcconfig:

2009-05-13  Anders Carlsson  <andersca@apple.com>

        Fix build.

        * WebCore.NPAPI.exp:

2009-05-13  Eric Seidel  <eric@webkit.org>

        Reviewed by Oliver Hunt.

        Fix invalid memory write seen in HTMLCanvasElement by Valgrind
        https://bugs.webkit.org/show_bug.cgi?id=25759

        I can't think of any way to catch this with a layout test, so no test.

        * css/CSSCanvasValue.cpp:
        (WebCore::CSSCanvasValue::canvasDestroyed):
        * css/CSSCanvasValue.h:
        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::~HTMLCanvasElement):
        * html/HTMLCanvasElement.h:

2009-05-13  Dan Bernstein  <mitz@apple.com>

        Reviewed by Anders Carlsson.

        - fix <rdar://problem/5483015> Replies in Mail are drawn first without
          the user style sheet and then redrawn with the style sheet

        Test: platform/mac/fast/loader/user-stylesheet-fast-path.html

        * page/mac/FrameMac.mm:
        (WebCore::Frame::setUserStyleSheetLocation): For data URLs with
        base64-encoded UTF-8 data, just decode the style sheet here an apply
        it synchronously instead of invoking an asynchronous loader.

2009-05-13  Chris Fleizach  <cfleizach@apple.com>

        Bug 25755: Implement ARIA grid role
        https://bugs.webkit.org/show_bug.cgi?id=25755

        Fix build bustage from last checkin.

        * page/AccessibilityAriaGrid.cpp:
        (WebCore::AccessibilityAriaGrid::addChild):

2009-05-13  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Beth Dakin.

        Bug 25755: Implement ARIA grid role
        https://bugs.webkit.org/show_bug.cgi?id=25755

        Test: accessibility/aria-tables.html

        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * page/AXObjectCache.cpp:
        (WebCore::AXObjectCache::nodeIsAriaType):
        (WebCore::AXObjectCache::getOrCreate):
        * page/AXObjectCache.h:
        * page/AccessibilityAriaGrid.cpp: Added.
        (WebCore::AccessibilityAriaGrid::AccessibilityAriaGrid):
        (WebCore::AccessibilityAriaGrid::~AccessibilityAriaGrid):
        (WebCore::AccessibilityAriaGrid::create):
        (WebCore::AccessibilityAriaGrid::addChild):
        (WebCore::AccessibilityAriaGrid::addChildren):
        (WebCore::AccessibilityAriaGrid::cellForColumnAndRow):
        * page/AccessibilityAriaGrid.h: Added.
        (WebCore::AccessibilityAriaGrid::isAriaTable):
        * page/AccessibilityAriaGridCell.cpp: Added.
        (WebCore::AccessibilityAriaGridCell::AccessibilityAriaGridCell):
        (WebCore::AccessibilityAriaGridCell::~AccessibilityAriaGridCell):
        (WebCore::AccessibilityAriaGridCell::create):
        (WebCore::AccessibilityAriaGridCell::parentTable):
        (WebCore::AccessibilityAriaGridCell::rowIndexRange):
        (WebCore::AccessibilityAriaGridCell::columnIndexRange):
        * page/AccessibilityAriaGridCell.h: Added.
        * page/AccessibilityAriaGridRow.cpp: Added.
        (WebCore::AccessibilityAriaGridRow::AccessibilityAriaGridRow):
        (WebCore::AccessibilityAriaGridRow::~AccessibilityAriaGridRow):
        (WebCore::AccessibilityAriaGridRow::create):
        (WebCore::AccessibilityAriaGridRow::parentTable):
        (WebCore::AccessibilityAriaGridRow::headerObject):
        * page/AccessibilityAriaGridRow.h: Added.
        * page/AccessibilityList.cpp:
        (WebCore::AccessibilityList::accessibilityIsIgnored):
        * page/AccessibilityList.h:
        * page/AccessibilityObject.h:
        (WebCore::):
        * page/AccessibilityRenderObject.cpp:
        (WebCore::RoleEntry::):
        * page/AccessibilityTable.cpp:
        (WebCore::AccessibilityTable::AccessibilityTable):
        (WebCore::AccessibilityTable::isTableExposableThroughAccessibility):
        * page/AccessibilityTable.h:
        (WebCore::AccessibilityTable::isAriaTable):
        * page/AccessibilityTableCell.cpp:
        (WebCore::AccessibilityTableCell::parentTable):
        (WebCore::AccessibilityTableCell::isTableCell):
        (WebCore::AccessibilityTableCell::titleUIElement):
        * page/AccessibilityTableCell.h:
        * page/AccessibilityTableColumn.cpp:
        (WebCore::AccessibilityTableColumn::setParentTable):
        (WebCore::AccessibilityTableColumn::headerObject):
        * page/AccessibilityTableRow.cpp:
        (WebCore::AccessibilityTableRow::isTableRow):
        (WebCore::AccessibilityTableRow::parentTable):
        * page/AccessibilityTableRow.h:
        * page/mac/AccessibilityObjectWrapper.mm:
        (RoleEntry::):

2009-05-13  David Levin  <levin@chromium.org>

        Reviewed by Dimitri Glazkov.

        Bug 25763: Need to move v8 custom binding to the custom directory.
        https://bugs.webkit.org/show_bug.cgi?id=25763

        No test due to no change in behavior.

        * bindings/v8/custom/V8CanvasPixelArrayCustom.cpp: Renamed from WebCore/bindings/v8/V8CanvasPixelArrayCustom.cpp.

2009-05-13  Nate Chapin  <japhet@google.com>

        Reviewed by Dimitri Glazkov.

        Fix LayoutTests/fast/dom/Element/attr-param-typechecking.html crashing with V8.
        https://bugs.webkit.org/show_bug.cgi?id=25758

        * bindings/v8/custom/V8ElementCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL): return the result of throwError() if it is called.

2009-05-13  Jeremy Moskovich  <jeremy@chromium.org>

        Reviewed by Dave Hyatt.

        Fix a number of bugs relating to RTL and text-overflow:ellipsis.
        Also refactor the relevant code to make it a little clearer.

        This CL fixes 3 fundamental issues:
        - Corrects behavior if the truncated InlineTextBox's directionality is
          different from the overall flow direction - bug 25135.
        - Make decoration drawing in InlineFlowbox RTL-aware - bug 24206.
        - Full truncation on InlineBoxes in RTL flow - bug 24186
        - Add tests for the above + reorder/cleanup tests for easier
          interpretation of outcome.

        The code for placing ellipsis has been refactored to use
        left/right notation rather than a single variable whose meaning
        could differ based on flow directionality.

        To support differing inline directionality vs flow directionality,
        different variables are now used in InlineTextBox::placeEllipsisBox to
        track the two.

        The drawing mode for underlines in standards mode now correctly handles
        RTL truncation and relevant test where added.

        https://bugs.webkit.org/show_bug.cgi?id=24186
        https://bugs.webkit.org/show_bug.cgi?id=25135
        https://bugs.webkit.org/show_bug.cgi?id=24206

        Tests: fast/css/text-overflow-ellipsis-bidi.html
               fast/css/text-overflow-ellipsis-strict.html

        * rendering/InlineBox.cpp:
        (WebCore::InlineBox::placeEllipsisBox):
        * rendering/InlineBox.h:
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::paintTextDecorations):
        (WebCore::InlineFlowBox::placeEllipsisBox):
        * rendering/InlineFlowBox.h:
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::placeEllipsisBox):
        (WebCore::InlineTextBox::paint):
        * rendering/InlineTextBox.h:
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::layoutVerticalBox):
        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::placeEllipsis):
        (WebCore::RootInlineBox::placeEllipsisBox):
        * rendering/RootInlineBox.h:
        * rendering/bidi.cpp:
        (WebCore::RenderBlock::checkLinesForTextOverflow):

2009-05-13  Dmitry Titov  <dimich@chromium.org>

        Rubber-stamped by Mark Rowe.

        https://bugs.webkit.org/show_bug.cgi?id=25746
        Revert http://trac.webkit.org/changeset/43507 which caused crash in PPC nightlies with Safari 4.

        * dom/XMLTokenizerLibxml2.cpp:
        (WebCore::matchFunc):
        (WebCore::openFunc):
        (WebCore::createStringParser):
        (WebCore::createMemoryParser):
        * loader/icon/IconDatabase.cpp:
        (WebCore::IconDatabase::open):
        * platform/sql/SQLiteDatabase.cpp:
        (WebCore::SQLiteDatabase::SQLiteDatabase):
        (WebCore::SQLiteDatabase::close):
        * storage/DatabaseThread.cpp:
        (WebCore::DatabaseThread::DatabaseThread):
        (WebCore::DatabaseThread::start):
        (WebCore::DatabaseThread::databaseThread):
        * storage/LocalStorageThread.cpp:
        (WebCore::LocalStorageThread::LocalStorageThread):
        (WebCore::LocalStorageThread::start):
        (WebCore::LocalStorageThread::localStorageThread):
        (WebCore::LocalStorageThread::scheduleImport):
        (WebCore::LocalStorageThread::scheduleSync):
        (WebCore::LocalStorageThread::terminate):
        * workers/WorkerThread.cpp:
        (WebCore::WorkerThread::WorkerThread):
        (WebCore::WorkerThread::start):

2009-05-13  David Hyatt  <hyatt@apple.com>

        Reviewed by Beth Dakin.

        Fix for <rdar://problem/6872894> REGRESSION (r41896-42143): First letter cut off in styled select menus
        
        Make sure to do rounded clipping for overflow and controls relative to the border box and not to the overflow/control clip rect
        (which is typically clipped to the padding or content box).  Doing so was causing rounded clips to be incorrectly applied to padding and
        content.
    
        Added fast/overflow/border-radius-clipping.html

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::pushContentsClip):

2009-05-13  Darin Adler  <darin@apple.com>

        Revert the parser arena change. It was a slowdown, not a speedup.
        Better luck next time (I'll break it up into pieces).

2009-05-13  David Hyatt  <hyatt@apple.com>

        Reviewed by Beth Dakin and Darin Adler.

        Fix for <rdar://problem/6869687> REGRESSION (r41203): Facebook friend suggestions disappear on update.
        
        Make sure that renderers are marked for layout if a style change causes them to switch from having a self-painting layer
        to a non-self-painting layer (and vice versa).
        
        Move misplaced layer repainting code that was in RenderBox up into RenderBoxModelObject so that inlines with layers
        repaint properly on opacity changes, etc.

        Added fast/repaint/opacity-change-on-overflow-float.html.

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::styleWillChange):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::styleWillChange):
        (WebCore::RenderBoxModelObject::styleDidChange):
        * rendering/RenderBoxModelObject.h:

2009-05-13  Dimitri Glazkov  <dglazkov@chromium.org>

        Not reviewed, build fix.

        Move an include, needed by Debugger under the corresponding guard.

        * inspector/InspectorController.cpp: Moved parser/SourceCode under JAVASCRIPT_DEBUGGER
            guard.

2009-05-13  David Levin  <levin@chromium.org>

        Reviewed by Darin Adler.

        Bug 25394: REGRESSION: crash in DocumentLoader::addResponse due to bad |this| pointer
        https://bugs.webkit.org/show_bug.cgi?id=25394

        Test: http/tests/xmlhttprequest/frame-unload-abort-crash.html

        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::create):
        Add another check to subresource loader to avoid doing any loads in frames
        when the loaders are being stopped.

2009-05-13  Stephan Haller  <nomad@froevel.de>

        Reviewed by Gustavo Noronha.

        Wrong handling of file upload if no file selected
        https://bugs.webkit.org/show_bug.cgi?id=25649

        Fixed returned path if path is empty

        * WebCore/platform/gtk/FileSystemGtk.cpp:

2009-05-13  Dan Bernstein  <mitz@apple.com>

        Reviewed by Dave Hyatt.

        - fix <rdar://problem/6805567> REGRESSION (r42348): Notes flicker white
          when loading

        Tests: fast/frames/content-opacity-1.html
               fast/frames/content-opacity-2.html

        * page/FrameView.cpp:
        (WebCore::FrameView::reset): Reset m_contentIsOpaque to false.
        (WebCore::FrameView::useSlowRepaints): Use slow repaints if the content
        is not known to be opaque.
        (WebCore::FrameView::setContentIsOpaque): Added. Sets m_contentIsOpaque
        and enables or disables fast repaints accordingly.
        * page/FrameView.h:
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintFillLayerExtended): Removed the
        document()->haveStylesheetsLoaded() condition in determining whether the
        root is opaque. This is what was causing the bug, as iframes were
        considered to be opaque, and thus painted an opaque white background,
        whenever they were pending a style sheet load.
        Changed to call FrameView::setContentIsOpaqe() instead of
        setUseSlowRepaints(), which allows the frame to go back to fast repaints
        if the content becomes opaque.
        Corrected the check for background color opacity: any alpha value other
        than 255--not just zero--is not opaque.

2009-05-13  Ariya Hidayat  <ariya.hidayat@nokia.com>

        Reviewed by Sam Weinig.

        [Qt] Fix "lighther" composition mode.
        QPainter::CompositionMode_Plus is the right match.

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

2009-05-13  Darin Adler  <darin@apple.com>

        Reviewed by Cameron Zwarich.

        Bug 25674: syntax tree nodes should use arena allocation
        https://bugs.webkit.org/show_bug.cgi?id=25674

        * bindings/js/JSDOMBinding.h: Removed include of JSFunction.h.
        We don't want the entire DOM binding to depend on that file.

        * bindings/js/JSAudioConstructor.cpp: Added include of Error.h.
        Before we inherited this automatically because JDDOMBinding.h
        included JSFunction.h, but that was excessive.
        * bindings/js/JSDOMWindowCustom.cpp: Ditto.
        * bindings/js/JSHTMLInputElementCustom.cpp: Ditto.
        * bindings/js/JSImageConstructor.cpp: Ditto.
        * bindings/js/JSLazyEventListener.cpp: Ditto, but for JSFunction.h.
        * bindings/js/JSMessageChannelConstructor.cpp: Ditto.
        * bindings/js/JSOptionConstructor.cpp: Ditto.
        * bindings/js/JSWorkerConstructor.cpp: Ditto.
        * bindings/js/JSXMLHttpRequestConstructor.cpp: Ditto.
        * bridge/jni/jni_jsobject.mm: Ditto, but for SourceCode.h.
        * inspector/InspectorController.cpp: Ditto.

        * inspector/JavaScriptDebugServer.cpp:
        (WebCore::JavaScriptDebugServer::recompileAllJSFunctions):
        Moved mose of this function into the base class in JavaScriptCore,
        so the details of compilation don't have to be exposed.

2009-05-13  Douglas R. Davidson  <ddavidso@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/6879145>
        Generate a contextual menu item allowing autocorrections to
        easily be changed back.  Refrain from re-correcting items
        that have already been autocorrected once.

        * dom/DocumentMarker.h:
        * editing/Editor.cpp:
        (WebCore::Editor::markAllMisspellingsAndBadGrammarInRanges):
        (WebCore::Editor::changeBackToReplacedString):
        * editing/Editor.h:
        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::contextMenuItemSelected):
        * page/mac/WebCoreViewFactory.h:
        * platform/ContextMenu.cpp:
        (WebCore::ContextMenu::populate):
        (WebCore::ContextMenu::checkOrEnableIfNeeded):
        * platform/ContextMenuItem.h:
        * platform/LocalizedStrings.h:
        * platform/mac/LocalizedStringsMac.mm:
        (WebCore::contextMenuItemTagChangeBack):
        * rendering/HitTestResult.cpp:
        (WebCore::HitTestResult::replacedString):
        * rendering/HitTestResult.h:
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::computeRectForReplacementMarker):
        (WebCore::InlineTextBox::paintDocumentMarkers):
        * rendering/InlineTextBox.h:

2009-05-13  Holger Hans Peter Freyther  <zecke@selfish.org>

        Rubber Stamped by Oliver Hunt.

        [GTK] Fix Gtk+/X11 build on OSX

        Including the CoreFoundation header here and X11 headers
        later will result in different definitions of Boolean. The
        CoreFoundation include does not seem to be necessary here
        and my mac build was successfull without it. I will remove
        it for now. If the build bots disagree this will be replaced
        by a #if PLATFORM(CF).

        * platform/FileSystem.h:

2009-05-13  Holger Hans Peter Freyther  <zecke@selfish.org>

        Rubber Stamped by Gustavo Noronha.

        [GTK] Move the #ifdef around for a buildfix for Gtk+ on OSX

        When building Gtk+ on OSX we ended up declaring
        setNPWindowIfNeeded twice. Fix that by moving
        the #if PLATFORM(GTK) up and using elif instead of
        else.

        * plugins/PluginView.h:

2009-05-13  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Xan Lopez.

        https://bugs.webkit.org/show_bug.cgi?id=25685
        [GTK] Middle click paste form the pasteboard

        The kit wants to paste from at least two different
        clipboards. By introducing getCurrentTarget to the
        PasteboardHelper interface we can make this decision
        in the kit.
        Use the new method in PasteboardGtk to get the right
        GdkClipboard for the paste operation.

        * platform/gtk/PasteboardGtk.cpp:
        (WebCore::Pasteboard::documentFragment):
        (WebCore::Pasteboard::plainText):
        * platform/gtk/PasteboardHelper.h:

2009-05-13  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/6438177> QTMoviePreferredTransformAttribute only supported on SnowLeopard
        <rdar://problem/6872468> QTMovieOpenForPlaybackAttribute only supported on SnowLeopard

        QTMoviePreferredTransformAttribute and QTMovieOpenForPlaybackAttribute are not supported
        on Tiger or Leopard.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::setNetworkState): Remove invalid ASSERT.

        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivate::createQTMovie): Only request QTMoviePreferredTransformAttribute
        when !BUILDING_ON_TIGER and !BUILDING_ON_LEOPARD.
        (WebCore::MediaPlayerPrivate::cacheMovieScale): Only ask for QTMovieOpenForPlaybackAttribute 
        when !BUILDING_ON_TIGER and !BUILDING_ON_LEOPARD,

2009-05-12  Roland Steiner <rolandsteiner@google.com>

        Reviewed by Eric Seidel.

        Bug 25738: Skia: CSS border style not cleared for SVG object
        https://bugs.webkit.org/show_bug.cgi?id=25738

        If no dashing is set, this change reverts to solid stroke
        (previously the code bailed and left the old setting, whatever it was)

        Test case listed in above bug entry.
        (Additional complications due to each platform rendering dotted lines differently -
        c.f. https://bugs.webkit.org/show_bug.cgi?id=25737)

        * platform/graphics/skia/GraphicsContextSkia.cpp:
        (WebCore::GraphicsContext::setLineDash):

2009-05-11  Erik Arvidsson  <arv@chromium.org>

        Reviewed by Eric Seidel.

        Bug 21903: Adds DOM bindings for the placeholder property of the
        HTMLInputElement.
        https://bugs.webkit.org/show_bug.cgi?id=21903

        Test: fast/forms/placeholder-dom-property.html

        * dom/InputElement.cpp:
        (WebCore::InputElement::updatePlaceholderVisibility):
        * dom/InputElement.h:
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::placeholder):
        (WebCore::HTMLInputElement::setPlaceholder):
        * html/HTMLInputElement.h:
        * html/HTMLInputElement.idl:
        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::updateFromElement):
        * wml/WMLInputElement.h:
        (WebCore::WMLInputElement::placeholder):
        (WebCore::WMLInputElement::setPlaceholder):

2009-05-12  Adam Barth  <abarth@webkit.org>

        Reviewed by Dimitri Glazkov.

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

        Change V8 bindings to match JSC bindings with respect to using
        the lexical or dynamic global object.

        Tests: http/tests/security/aboutBlank/security-context-grandchildren-lexical.html
               http/tests/security/aboutBlank/security-context-grandchildren-write-lexical.html
               http/tests/security/aboutBlank/security-context-grandchildren-writeln-lexical.html

        * bindings/v8/custom/V8HTMLDocumentCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):

2009-03-19  Oliver Hunt  <oliver@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/6702386> Incorrect bound check in SVGList::insertItemBefore

        SVGList::insertItemBefore would not perform a bounds check on the
        index it was provided, potentially leading to a buffer overflow. 

        Test: svg/dom/svglist-exception-on-out-bounds-error.html

        * svg/SVGList.h:
        (WebCore::SVGList::insertItemBefore):

2009-05-12  Paul Godavari  <paul@chromium.org>

        Reviewed by Dimitri Glazkov.

        Bug 25708: Cannot choose menu items in popups with many entries in Chromium
        https://bugs.webkit.org/show_bug.cgi?id=25708

        This change sets the window size for popups on Mac to include all items
        in the menu. This is required for hit testing on Mac, where we use native
        controls to manage the popups and don't want to artificially limit the
        valid hit testing region to a limited scroll window.

        * platform/chromium/PopupMenuChromium.cpp:
        (WebCore::PopupListBox::layout):

2009-05-12  Stephen White  <senorblanco@chromium.org>

        Reviewed by Dimitri Glazkov.

        Fixes to build with latest skia:  SkTypeface::Create() is now
        SkTypeface::CreateFromName(); computeBounds() has been reworked
        as getBounds().  The changes are placed behind an #ifdef for now,
        so that we can roll back the skia version in Chromium if necessary
        without having to roll back this change.

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

        * platform/graphics/chromium/FontCacheLinux.cpp:
        (WebCore::FontCache::createFontPlatformData):
        * platform/graphics/skia/PathSkia.cpp:
        (WebCore::Path::boundingRect):
        (WebCore::boundingBoxForCurrentStroke):
        * platform/graphics/skia/SkiaUtils.cpp:
        (WebCore::SkPathContainsPoint):

2009-05-12  Nate Chapin  <japhet@google.com>

        Reviewed by Dimitri Glazkov.

        https://bugs.webkit.org/show_bug.cgi?id=25732
        Update V8ElementCustom.cpp to match the current API of V8Proxy.

        (WebCore::ACCESSOR_SETTER): Change retrieveActiveFrame() to retrieveFrameForEnteredContext().

2009-05-12  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=25694
        HTMLParser::createHead() ASSERT: Creating an element, calling  document.open() and writing
        to the document NULL ptr

        Test: fast/parser/implicit-head-in-fragment-crash.html

        * html/HTMLParser.cpp: (WebCore::HTMLParser::bodyCreateErrorCheck): Do not try to implicitly
        create <head> when parsing a fragment.

2009-05-12  Soren Gjesse  <sgjesse@chromium.org>

        Reviewed by Dimitri Glazkov.

        https://bugs.webkit.org/show_bug.cgi?id=25687
        Missing check for valid function in V8 bindings for toString function for event listeners.

        * bindings/v8/V8LazyEventListener.cpp:
        (WebCore::V8LazyEventListener::getWrappedListenerFunction): Added empty handle checks.

2009-05-11  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Holger Freyther.

        Change Qt port to match the mac and windows ports, and unregister plugins when plugins are stopped.
        Not doing that can cause assersion failure.
        https://bugs.webkit.org/show_bug.cgi?id=25702

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

2009-05-11  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Holger Freyther.

        Bug 25714: [Qt] Decouple HTML5 Database support from the
        SQLite/generic database support in the Qt port

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

        * WebCore.pro:

2009-05-11  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Beth Dakin.

        Bug 25713: AX: Control Elements not identified in HTML content
        https://bugs.webkit.org/show_bug.cgi?id=25713

        Test: accessibility/onclick-handlers.html

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

2009-05-11  Darin Adler  <darin@apple.com>

        Reviewed by Dan Bernstein.

        <rdar://problem/6276843> REGRESSION: TextIterator generates
        an extra newline for ranges that start outside of body

        * editing/TextIterator.cpp:
        (WebCore::TextIterator::shouldRepresentNodeOffsetZero):
        Check startPos for null, not just currPos.

2009-05-11  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Darin Adler.

        Bug 25700: Regression:WebKit:cmd-left and cmd-right use to go to the beginning and end of a line in Mail
        https://bugs.webkit.org/show_bug.cgi?id=25700

        Keyboard selection movement handlers need to also watch for the Cmd key when Accessibility is enabled.
        Note: This code is only used when accessibility is enabled.

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

2009-05-11  David Kilzer  <ddkilzer@apple.com>

        Bug 25087: Test for ENABLE_FOO macros consistently in IDL files

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

        Reviewed by Timothy Hatcher.

        Change tests for ENABLE macros to check for both existence and
        value:

        - Negative:  #if !defined(ENABLE_FOO) || !ENABLE_FOO
        - Positive:  #if defined(ENABLE_FOO) && ENABLE_FOO

        * css/CSSCharsetRule.idl:
        * css/CSSPrimitiveValue.idl:
        * css/RGBColor.idl:
        * dom/Attr.idl:
        * dom/DOMCoreException.idl:
        * dom/DOMImplementation.idl:
        * dom/Document.idl:
        * dom/Element.idl:
        * dom/Event.idl:
        * dom/EventException.idl:
        * dom/KeyboardEvent.idl:
        * dom/MessagePort.idl:
        * dom/MouseEvent.idl:
        * dom/Node.idl:
        * dom/ProcessingInstruction.idl:
        * dom/Range.idl:
        * dom/RangeException.idl:
        * dom/WheelEvent.idl:
        * html/CanvasPixelArray.idl:
        * html/HTMLAnchorElement.idl:
        * html/HTMLAppletElement.idl:
        * html/HTMLAreaElement.idl:
        * html/HTMLBaseFontElement.idl:
        * html/HTMLCanvasElement.idl:
        * html/HTMLDocument.idl:
        * html/HTMLElement.idl:
        * html/HTMLEmbedElement.idl:
        * html/HTMLFrameElement.idl:
        * html/HTMLIFrameElement.idl:
        * html/HTMLImageElement.idl:
        * html/HTMLInputElement.idl:
        * html/HTMLLinkElement.idl:
        * html/HTMLObjectElement.idl:
        * html/HTMLOptionElement.idl:
        * html/HTMLOptionsCollection.idl:
        * html/HTMLSelectElement.idl:
        * html/HTMLStyleElement.idl:
        * html/ImageData.idl:
        * inspector/InspectorController.idl:
        * loader/appcache/DOMApplicationCache.idl:
        * page/Console.idl:
        * page/Coordinates.idl:
        * page/DOMSelection.idl:
        * page/DOMWindow.idl:
        * page/Geoposition.idl:
        * page/History.idl:
        * page/Location.idl:
        * page/Navigator.idl:
        * svg/SVGElementInstance.idl:
        * svg/SVGException.idl:
        * workers/WorkerContext.idl:
        * xml/XMLHttpRequestException.idl:
        * xml/XPathException.idl:

2009-05-11  Norbert Leser  <norbert.leser@nokia.com>

        Reviewed by Darin Adler.

        Bug 24538: class/struct mixup in forward declarations
        https://bugs.webkit.org/show_bug.cgi?id=24538

        * inspector/InspectorResource.h:
        * loader/CachedFont.h:
        * loader/appcache/ApplicationCache.h:
        * rendering/RenderBlock.h:
        * rendering/RootInlineBox.h:
        * rendering/SVGInlineTextBox.h:
        * svg/SVGGlyphElement.h:
        * svg/SVGHKernElement.h:

2009-05-11  Norbert Leser  <norbert.leser@nokia.com>

        Reviewed by Darin Adler.

        Bug 24539: Unresolved CSSMutableStyleDeclaration
        https://bugs.webkit.org/show_bug.cgi?id=24539

        The Symbian tools can't compile and link this without this include.
        It's not clear why this is different from other toolsets or why it affects
        only this header file, but adding the include for now.

        * editing/RemoveCSSPropertyCommand.h: Added include of CSSMutableStyleDeclaration.h.

2009-05-11  Alice Liu  <alice.liu@apple.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=25701
        REGRESSION(r38788 & r42020): styled searchfields look wrong on Windows, affects Facebook

        Test: fast/forms/search-styled.html

        * css/themeWin.css:
        Remove the overriding of -webkit-appearance for searchfields. This will cause background
        images to not be honored when styling searchfields

        * rendering/RenderThemeWin.cpp:
        (WebCore::RenderThemeWin::adjustSearchFieldStyle):
        * rendering/RenderThemeWin.h:
        Re-instate final adjustments to searchfield styling that were removed in r42020

2009-05-11  Brady Eidson  <beidson@apple.com>

        Fix Windows build

        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::createCFURLResponseWithDefaultMIMEType):

2009-05-11  Nate Chapin  <japhet@google.com>

        Reviewed by Dimitri Glazkov.

        https://bugs.webkit.org/show_bug.cgi?id=25626
        Update V8ElementCustom.cpp to match the current API of Node.

        * bindings/v8/custom/V8ElementCustom.cpp:
        (WebCore::ACCESSOR_SETTER): Changed a couple of method names to match current names.
        (WebCore::ACCESSOR_GETTER): Changed a method name to match current name.

2009-05-11  Brady Eidson  <beidson@apple.com>

        Fix Windows build

        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::createCFURLResponseWithDefaultMIMEType):
        (WebCore::WebCoreSynchronousLoader::load):

2009-05-11  Brady Eidson  <beidson@apple.com>

        Fix Windows build

        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::createCFURLResponseWithDefaultMIMEType):

2009-05-11  Nate Chapin  <japhet@google.com>

        Reviewed by Dimitri Glazkov.

        V8CustomBinding.cpp is missing a header file

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

        * bindings/v8/custom/V8CustomBinding.cpp: Added #include "V8Proxy.h".

2009-05-11  Aaron Boodman  <aa@chromium.org>

        Reviewed by Darin Fisher.

        https://bugs.webkit.org/show_bug.cgi?id=25634
        Change V8Proxy::retrieveActiveFrame() call sites to V8Proxy::retrieveFrameForEnteredContext().

        Also, change instances of ScriptController::retrieveActiveFrame() to
        V8::retrieveFrameForEnteredContext() for consistency.


        See http://codereview.chromium.org/113085 for the corresponding Chromium change.

        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::V8Custom::WindowSetLocation):
        * bindings/v8/custom/V8HTMLDocumentCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8LocationCustom.cpp:
        (WebCore::navigateIfAllowed):
        (WebCore::ACCESSOR_SETTER):
        (WebCore::CALLBACK_FUNC_DECL):

2009-05-11  Brady Eidson  <beidson@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/5972751> Local image files (BMP, ico) can be misidentified as HTML.

        First part of the fix - Disable content sniffing for file resources which never should've been happening anyways.
        Second part of the fix - If the networking layer doesn't give us back a MIME type default to "application/octet-stream".

        * platform/MIMETypeRegistry.cpp:
        (WebCore::defaultMIMEType): "application/octet-stream"
        * platform/MIMETypeRegistry.h:

        * platform/network/ResourceHandle.cpp:
        (WebCore::ResourceHandle::create): If content sniffing is true, double check with "shouldContentSniffRequest()" which
          might override it to false.
        (WebCore::ResourceHandle::shouldContentSniffURL): Return false for file:// urls, true for everything else.
        * platform/network/ResourceHandle.h:

        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::createCFURLResponseWithDefaultMIMEType): Create a copy of the CFURLRequest with the default MIME type instead
          of null.
        (WebCore::didReceiveResponse): If the MIME type for the response is null, create a copy with the default MIME type.
        (WebCore::WebCoreSynchronousLoader::load): Use shouldContentSniffRequest() to make synchronous loads have the same 
          sniffing policy as asynchronous loads.  Also, correct a null MIME type by creating a copy with the default type.

        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::loadResourceSynchronously): Use shouldContentSniffRequest() to make synchronous loads have the
          same sniffing policy as asynchronous loads.
        (-[WebCoreResourceHandleAsDelegate connection:didReceiveResponse:]): Set up the [NSURLResponse MIMEType] swizzling if
          it hasn't been set up yet.
        (_web_NSURLResponse_MIMEType): Either return the actual MIME type of the response, or the default MIME type if it's nil.

        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::loadRequestAsynchronously): Remove the workaround added in r29370 as it will now be covered by
          the new mechanism.

2009-05-11  David Kilzer  <ddkilzer@apple.com>

        Fix typo "APPLICATION_CAHE_DYNAMIC_ENTRIES" to "APPLICATION_CACHE_DYNAMIC_ENTRIES"

        This was added in r39816 to disable dynamic entries.  They are
        still disabled after fixing the typo since this feature define
        is never set anywhere.

        * bindings/js/JSDOMApplicationCacheCustom.cpp:
        * loader/appcache/DOMApplicationCache.idl:

2009-05-11  Dmitry Titov  <dimich@chromium.org>

        Reviewed by Alexey Proskuryakov and Adam Roben.

        https://bugs.webkit.org/show_bug.cgi?id=25348
        Change WTF::ThreadIdentifier to be an actual (but wrapped) thread id, remove ThreadMap.

        Most of the change is in WTF.
        Unless noted, all the following files changed to use the new ThreadIdentifier::isValid()
        method instead of just doing 'if(m_threadID)' kind of checks, since ThreadIdentifier
        is now a class rather then an integer.
        Also, there is no need to initialize threadID in constructors to 0 now.

        * dom/XMLTokenizerLibxml2.cpp:
        (WebCore::libxmlLoaderThread): use DEFINE_STATIC_LOCAL and accessor function for static thread id,
        since now ThreadIdentifier needs construction and we avoid having global initializers.
        (WebCore::matchFunc): use the new accessor function.
        (WebCore::openFunc): ditto.
        (WebCore::createStringParser): ditto.
        (WebCore::createMemoryParser): ditto.
        * loader/icon/IconDatabase.cpp:
        (WebCore::IconDatabase::open):
        * platform/sql/SQLiteDatabase.cpp:
        (WebCore::SQLiteDatabase::SQLiteDatabase):
        (WebCore::SQLiteDatabase::close):
        * storage/DatabaseThread.cpp:
        (WebCore::DatabaseThread::start):
        (WebCore::DatabaseThread::databaseThread): remove m_threadID from debug output.
        * storage/LocalStorageThread.cpp:
        (WebCore::LocalStorageThread::start):
        (WebCore::LocalStorageThread::scheduleImport):
        (WebCore::LocalStorageThread::scheduleSync):
        (WebCore::LocalStorageThread::terminate):
        * workers/WorkerThread.cpp:
        (WebCore::WorkerThread::start):
        (WebCore::WorkerThread::WorkerThread):
        (WebCore::WorkerThread::start):

2009-05-11  Brady Eidson  <beidson@apple.com>

        Reviewed by Darin Adler.

        Remove unused header that declared one function which was never defined anywhere.

        * WebCore.vcproj/WebCore.vcproj:
        * platform/network/cf/ResourceResponseCFNet.cpp: Change to include ResourceResponse.h (which really means
          platform/network/cf/ResourceResponse.h)
        * platform/network/cf/ResourceResponseCFNet.h: Removed.

2009-05-11  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Timothy Hatcher.

        https://bugs.webkit.org/show_bug.cgi?id=25213
        Fix assert during Inspector destruction.

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::inspectedPageDestroyed): Moved closing
            inspector above removing InspectorController object to fix JS errors,
            added clearing inspector page ptr.

2009-05-11  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Holger Freyther.

        [Qt] Make sure that public APIs are properly exported on all Qt platforms
        https://bugs.webkit.org/show_bug.cgi?id=25601

        * WebCore.pro: Define QT_MAKEDLL for all non-static builds, not just for win

2009-05-11  Csaba Osztrogonac  <oszi@inf.u-szeged.hu>

        Reviewed by Holger Freyther.

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

        * WebCore.pro: duplicated values removed from INCLUDEPATH

2009-05-11  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Eric Seidel.

        Build fix Symbian; clean Up WebKit/Qt if ENABLE_NETSCAPE_PLUGIN_API=0
        https://bugs.webkit.org/show_bug.cgi?id=24688

        * WebCore.pro: Use platform independent plugin stubs if ENABLE_NETSCAPE_PLUGIN_API=0
        * platform/qt/TemporaryLinkStubs.cpp: Remove stub functions for plugins

2009-05-10  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        - fix a crash when deactivating a document that had adopted a <form>
          element

        Test: fast/dom/HTMLFormElement/document-deactivation-callback-crash.html

        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::didMoveToNewOwnerDocument): Corrected the
        logic here: <form> elements should be registered for document activation
        callbacks if and only if autocomplete is off.

2009-05-10  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Dan Bernstein.

        <rdar://problem/6867598> REGRESSION (r42483): Have to enter credentials twice when trying
        to view protected MobileMe video

        Add a temporary workaround.

        * platform/network/ResourceHandleInternal.h:
        (WebCore::ResourceHandleInternal::ResourceHandleInternal):
        Added an m_useSiteSpecificQuirks boolean (Mac-only). A Frame pointer is only available when
        starting a request, so we need to store this data for later use.

        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::start): Initialize m_useSiteSpecificQuirks.
        (WebCore::ResourceHandle::receivedCredential): Use per-session credentials with gallery.me.com.

2009-05-10  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Dan Bernstein.

        <rdar://problem/6870383> Have to enter credentials twice when downloading from a protected page

        * platform/network/cf/AuthenticationCF.cpp:
        * platform/network/cf/AuthenticationCF.h:
        (WebCore::WebCoreCredentialStorage::set):
        (WebCore::WebCoreCredentialStorage::get):
        * platform/network/cf/ResourceHandleCFNet.cpp:
        Move WebCore credential storage to AuthenticationCF, so that WebKit could use it (macthing
        an earlier Mac change).

2009-05-10  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Dan Bernstein.

        Match newer XMLHttpRequest draft and make withCredential setter raise an exception when
        called at a wrong time.

        No test, because we are waiting for a newer version of system frameworks to test the attribute.

        * xml/XMLHttpRequest.cpp: (WebCore::XMLHttpRequest::setWithCredentials):
        * xml/XMLHttpRequest.h:
        * xml/XMLHttpRequest.idl:
        Raise INVALID_STATE_ERR if the state is not OPENED, or if the send() flag is true.

2009-05-10  Dan Bernstein  <mitz@apple.com>

        Reviewed by Dave Kilzer.

        - fix https://bugs.webkit.org/show_bug.cgi?id=25602
          REGRESSION: fast/overflow/overflow-focus-ring.html seems double-drawn
          on ToT

        Test: fast/layers/self-painting-outline.html

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paintLayer): Paint the layer's own outline only
        if it is a self-painting layer.

2009-05-09  Dan Bernstein  <mitz@apple.com>

        Reviewed by Geoffrey Garen and Mark Rowe.

        - fix https://bugs.webkit.org/show_bug.cgi?id=25666
          Assertion failure in Node::setDocument()
          (willMoveToNewOwnerDocumentWasCalled) when adopting a <form> element

        Test: fast/dom/HTMLFormElement/adopt-assertion.html

        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::willMoveToNewOwnerDocument): Overrides of
        this method are required to call the base class implementation. Do it.
        (WebCore::HTMLFormElement::didMoveToNewOwnerDocument): Ditto.

2009-03-29  Kevin Ollivier  <kevino@theolliviers.com>

        Reviewed by Maciej Stachowiak.

        WebCore::DocumentLoader::mainReceivedError now asserts if error.isNull(), so
        make sure CURL does not create empty ResourceError() objects.
        
        https://bugs.webkit.org/show_bug.cgi?id=24927

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

2009-05-09  Gustavo Noronha Silva  <gns@gnome.org>

        Build fix, adding missing files to make dist.

        * GNUmakefile.am:

2009-05-08  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein
        
        https://bugs.webkit.org/show_bug.cgi?id=25656
        
        Reduce the inline capacity of CSSParserValueList's m_values
        vector to reduce the size of CSSParserValueList from 544 to 160 bytes in 64-bit.

        * css/CSSParserValues.h:

2009-05-08  Nikolas Zimmermann  <nikolas.zimmermann@torchmobile.com>

        Not reviewed. Used sort-Xcode-project-file to sort the XCode project file - it hasn't been done for a while.

        * WebCore.xcodeproj/project.pbxproj:

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

        Reviewed by Darin Adler.

        - fix <rdar://problem/6864786> REGRESSION: Crash below
          ApplyStyleCommand::applyInlineStyleToRange when reviewing a patch in
          Bugzilla

        Test: editing/style/apply-through-end-of-document.html

        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::applyInlineStyleToRange): Added a null
        check for the case of a range extending through the end of the document,
        in which pastEndNode is 0.

2009-05-08  Douglas R. Davidson  <ddavidso@apple.com>

        Reviewed by Beth Dakin.

        <rdar://problem/6857446> REGRESSION (Safari 3-4): Contraction base 
        marked as misspelled even though contraction is a word
        Make sure spelling underline does not persist on words like 
        <doesn't>.  

        * editing/TypingCommand.cpp:
        (WebCore::TypingCommand::typingAddedToOpenCommand):

2009-05-08  Kevin Watters  <kevinwatters@gmail.com>

        Reviewed by Kevin Ollivier.

        Make sure the path's refdata isn't deleted before we're done with the object.
        
        https://bugs.webkit.org/show_bug.cgi?id=25652

        * platform/graphics/wx/PathWx.cpp:
        (WebCore::Path::~Path):
        (WebCore::Path::Path):
        (WebCore::Path::translate):

2009-05-08  Kevin Watters  <kevinwatters@gmail.com>

        Reviewed by Darin Adler.

        Fix for memory leak on Mac.
        
        https://bugs.webkit.org/show_bug.cgi?id=25650

        * platform/wx/wxcode/mac/carbon/fontprops.cpp:
        (wxFontProperties::wxFontProperties):

2009-05-08  Beth Dakin  <bdakin@apple.com>

        Reviewed by Dan Bernstein.

        <rdar://problem/6857446> REGRESSION (r37591): Cannot print or 
        preview from maps.yandex.ru

        We need to fall into the stretchesToViewHeight() quirk when we are 
        printing and we are the root and the root has percentage height OR 
        when we are the body and the root has percentage height. Otherwise 
        we have a height of 0 and can run into painting troubles.

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::calcHeight):

2009-05-08  Douglas Davidson  <ddavidso@apple.com>

        Reviewed by Darin Adler.

        Fixes for <rdar://problem/6852771>.
        Prevent text checking replacement immediately after an apostrophe
        and automatic link addition except immediately after typing.

        * editing/Editor.cpp:
        (WebCore::Editor::markAllMisspellingsAndBadGrammarInRanges):

2009-05-08  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Darin Adler.
        
        https://bugs.webkit.org/show_bug.cgi?id=25627
        Bug 25627: HTMLMediaElement: some errors should fire on <source> elements

        Update for HTML5 spec change to fire 'error' events on <source> element
        when there is a failure while processing/loading a <source>.

        Test: media/video-source-error.html

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::enqueueEvent): Remove white-space.
        (WebCore::HTMLMediaElement::loadInternal): Call cancelPendingEventsAndCallbacks instead
        of just calling m_pendingEvents.clear() as we now also need to cancel pending errors on
        all <source> element. 
        (WebCore::HTMLMediaElement::selectMediaResource): Call isSafeToLoadURL() here instead of in
        loadResource() as we need to report errors differently depending on the type of failure. Use
        KURL instead of String.
        (WebCore::HTMLMediaElement::loadNextSourceChild): nextSourceChild -> selectNextSourceChild.
        Fail silently when there are no more <source> canditates because that is what spec mandates.
        Keep url as KURL instead of converting to String.
        (WebCore::HTMLMediaElement::loadResource): ASSERT that the URL is safe to load as we now 
        assume the safety check now done before this function. Takes KURL instead of String.
        (WebCore::HTMLMediaElement::isSafeToLoadURL): New, checks to see if a url is safe to load, logs
        failure if not.
        (WebCore::HTMLMediaElement::noneSupported): MEDIA_ERR_NONE_SUPPORTED -> MEDIA_ERR_SRC_NOT_SUPPORTED
        (WebCore::HTMLMediaElement::cancelPendingEventsAndCallbacks): New, clear all events pending on
        the media and all source elements.
        (WebCore::HTMLMediaElement::setNetworkState): Fire an error on the source element when the 
        the failure happened while processing one. Only call nonSupported() when the failure happened
        while processing media element 'src' attribute.
        (WebCore::HTMLMediaElement::havePotentialSourceChild): nextSourceChild -> selectNextSourceChild.
        Deal with selectNextSourceChild returning a KURL instead of a String.
        (WebCore::HTMLMediaElement::selectNextSourceChild): Renamed from nextSourceChild, add optional
        param to control whether or not errors are fired on a source element when it will not be used.
        Check safety of url here instead of waiting until loadResource(). Return a KURL instead of a
        String.
        (WebCore::HTMLMediaElement::initialURL): nextSourceChild -> selectNextSourceChild. Keep url as
        a KURL instead of a String.
        * html/HTMLMediaElement.h:
        (WebCore::HTMLMediaElement::):

        * html/HTMLSourceElement.cpp:
        (WebCore::HTMLSourceElement::HTMLSourceElement): Initialize timer related variables.
        (WebCore::HTMLSourceElement::scheduleErrorEvent): New, start one-shot timer to fire an error
        event ASAP.
        (WebCore::HTMLSourceElement::cancelPendingErrorEvent): New, cancel pending error event.
        (WebCore::HTMLSourceElement::errorEventTimerFired): New, fire error event if it has not been
        cancelled.
        * html/HTMLSourceElement.h:

        * html/MediaError.h: 
        (WebCore::MediaError::): MEDIA_ERR_NONE_SUPPORTED -> MEDIA_ERR_SRC_NOT_SUPPORTED
        * html/MediaError.idl: Ditto

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

        Reviewed by Maciej Stachowiak.

        - fix <rdar://problem/6859955> Undoing typed text after selecting all
          leaves non-text areas highlighted

        Test: fast/repaint/selection-clear.html

        When RenderView::clearSelection() is called from
        SelectionController::nodeWillBeRemoved(), selected renderers may already
        be marked for layout, which means that they can no longer compute
        their selection repaint info. Instead, an empty IntRect (or GapRects) is
        returned, leading to incomplete repaint.

        The fix is not to rely on individual renderers when clearing the
        selection, but instead, cache the bounding rectangle of the selected
        blocks' GapRects when setting the selection, and invalidate that
        entire rectangle when clearing it.

        * rendering/RenderView.cpp:
        (WebCore::RenderView::setSelection): Added a parameter saying whether
        the repainting of selected blocks should include both
        previously-selected areas and newly-selected areas or only
        newly-selected areas. The default is both. Also compute
        m_cachedSelectionBounds to be the bounding rectangle of the
        new selection's BlockSelectionInfos' GapRects.
        (WebCore::RenderView::clearSelection): Repaint m_cachedSelectionBounds,
        and tell setSelection() that it should not paint areas that were in
        the old selection's BlockSelectionInfos' GapRects.
        * rendering/RenderView.h:
        (WebCore::RenderView::):

2009-05-08  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Maciej Stachowiak.

        <rdar://problem/6868773> NPN_GetAuthenticationInfo does not work with non-permanent credentials

        * WebCore.base.exp:
        * platform/network/mac/AuthenticationMac.h:
        (WebCore::WebCoreCredentialStorage::set):
        (WebCore::WebCoreCredentialStorage::get):
        * platform/network/mac/AuthenticationMac.mm:
        * platform/network/mac/ResourceHandleMac.mm:
        Moved WebCoreCredentialStorage to AuthenticationMac, so that it could be used from WebKit.

2009-05-08  Jedrzej Nowacki  <jedrzej.nowacki@nokia.com>

        Reviewed by Simon Hausmann.

        Fix the Qt build, add missing JSC_HOST_CALL macros to the runtime
        call methods.

        * bridge/qt/qt_runtime.h:

2009-05-08  Jan Michael Alonzo  <jmalonzo@webkit.org>

        Reviewed by Mark Rowe.

        Add missing strings to localizedStrings.js
        https://bugs.webkit.org/show_bug.cgi?id=25635

        Add the strings "Delete", "Key", "Refresh" and "Value".

        * English.lproj/localizedStrings.js:

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

        Reviewed, tweaked and landed by Alexey Proskuryakov.

        https://bugs.webkit.org/show_bug.cgi?id=24992
        [Qt] crash at http://browserspy.dk/browser.php

        This cannot be easily tested in DRT, because it relies on interaction with QApplication,
        but the added assertions guard against re-introducing this issue.

        * loader/FrameLoader.cpp: (WebCore::FrameLoader::didOpenURL): Don't make client calls
        while the frame is being constructed, because the intermediate state without a document
        is something we don't want to expose.

        * page/Frame.cpp:
        (WebCore::Frame::setJSStatusBarText): Assert that the frame has a document, which is an
        approximation of it being in a consistent state for client calls.
        (WebCore::Frame::setJSDefaultStatusBarText): Ditto.

2009-05-07  Mark Rowe  <mrowe@apple.com>

        Rubber-stamped by Oliver Hunt.

        Fix <https://bugs.webkit.org/show_bug.cgi?id=25640>.
        Bug 25640: Crash on quit in r43384 nightly build on Leopard w/ Safari 4 beta installed
        
        Roll out r43366 as it removed symbols that Safari 4 Beta uses.

        * dom/XMLTokenizerLibxml2.cpp:
        (WebCore::matchFunc):
        (WebCore::openFunc):
        (WebCore::createStringParser):
        (WebCore::createMemoryParser):
        * loader/icon/IconDatabase.cpp:
        (WebCore::IconDatabase::open):
        * platform/sql/SQLiteDatabase.cpp:
        (WebCore::SQLiteDatabase::SQLiteDatabase):
        (WebCore::SQLiteDatabase::close):
        * storage/DatabaseThread.cpp:
        (WebCore::DatabaseThread::DatabaseThread):
        (WebCore::DatabaseThread::start):
        (WebCore::DatabaseThread::databaseThread):
        * storage/LocalStorageThread.cpp:
        (WebCore::LocalStorageThread::LocalStorageThread):
        (WebCore::LocalStorageThread::start):
        (WebCore::LocalStorageThread::localStorageThread):
        (WebCore::LocalStorageThread::scheduleImport):
        (WebCore::LocalStorageThread::scheduleSync):
        (WebCore::LocalStorageThread::terminate):
        * workers/WorkerThread.cpp:
        (WebCore::WorkerThread::WorkerThread):
        (WebCore::WorkerThread::start):

2009-05-08  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        Unify scrolling code via adjustments and keys. Use the WebCore
        defined constants, since that's what people are most used to at
        this point.

        * platform/gtk/ScrollViewGtk.cpp:
        (WebCore::ScrollView::platformHandleHorizontalAdjustment):
        (WebCore::ScrollView::platformHandleVerticalAdjustment):

2009-05-07  David Levin  <levin@chromium.org>

        Reviewed by NOBODY.
        Suggested by Oliver Hunt.

        Rolling back http://trac.webkit.org/changeset/43385
        because we have to use mac artwork for the underline on OSX.

        * platform/graphics/cg/GraphicsContextCG.cpp:
        * platform/graphics/mac/GraphicsContextMac.mm:
        (WebCore::createPatternColor):
        (WebCore::GraphicsContext::drawLineForMisspellingOrBadGrammar):
        * platform/graphics/win/GraphicsContextCGWin.cpp:
        (WebCore::setCGStrokeColor):
        (WebCore::spellingPatternColor):
        (WebCore::grammarPatternColor):
        (WebCore::GraphicsContext::drawLineForMisspellingOrBadGrammar):

2009-05-07  John Grabowski  <jrg@chromium.org>

        Reviewed by Simon Fraser.
  
        https://bugs.webkit.org/show_bug.cgi?id=25573
        Unify use of CG-common routine for drawLineForMisspellingOrBadGrammar.
        Cleanup for WebKit, but required for Chromium happiness.

        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::spellingPatternColor):
        (WebCore::grammarPatternColor):
        (WebCore::GraphicsContext::drawLineForMisspellingOrBadGrammar):
        * platform/graphics/mac/GraphicsContextMac.mm:
        * platform/graphics/win/GraphicsContextCGWin.cpp:

2009-05-07  Darin Adler  <darin@apple.com>

        Reviewed by Simon Fraser.

        Bug 25575: Registered mutation event listener crashes HTMLMediaElement
        https://bugs.webkit.org/show_bug.cgi?id=25575

        Test: fast/media/video-controls-with-mutation-event-handler.html

        * rendering/MediaControlElements.cpp:
        (WebCore::MediaControlTimelineElement::MediaControlTimelineElement): Don't call setAttribute.
        * rendering/RenderMedia.cpp:
        (WebCore::RenderMedia::createTimeline): Call setAttribute here.

2009-05-07  Simon Fraser  <simon.fraser@apple.com>

        Rubber Stamped by Dave Hyatt
        
        Shuffle the data members to minimize padding.

        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::RenderTableSection):
        * rendering/RenderTableSection.h:

2009-05-07  Simon Fraser  <simon.fraser@apple.com>

        Rubber Stamped by Dave Hyatt
        
        Shuffle the data members to make Events 8 bytes smaller in 64-bit.

        * dom/Event.cpp:
        (WebCore::Event::Event):
        * dom/Event.h:

2009-05-07  Eric Seidel  <eric@webkit.org>

        Reviewed by Beth Dakin.

        Fix regression caused by r41469, add test case to prevent it from 
        happening again.
        https://bugs.webkit.org/show_bug.cgi?id=25252
  
        hasLayer() was true during removeOnlyThisLayer()/
        updateLayerPositions()
        which caused updateLayerPosition()'s walk up the render tree to 
        include offsets from the layer we were about to remove.
  
        I'm not 100% convinced that this wasn't a bug in 
        updateLayerPosition() or in RenderBoxModelObject::styleDidChange, 
        because the layer in question is not the containing block for the 
        block which gets laid out wrong. But this restores the previous 
        behavior and adds a test.  So the next time someone is in here re-
        factoring, they will at least know if they break something.
  
        Test: fast/layers/remove-only-this-layer-update.html

        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::destroyLayer):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::removeOnlyThisLayer):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::destroy):
        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::destroy):

2009-05-07  Dmitry Titov  <dimich@chromium.org>

        Attempt to fix GTK build.

        * platform/graphics/GlyphPageTreeNode.h: add #include <string.h> to ensure memcpy and memset are defined.

2009-05-07  Oliver Hunt  <oliver@apple.com>

        Reviewed by Gavin Barraclough.

        Improve native call performance

        Add calling convention declarations where necessary, and update bindings
        script to generate them as well.

        * bindings/js/JSHTMLCollectionCustom.cpp:
        (WebCore::callHTMLCollection):
        * bindings/js/JSNodeListCustom.cpp:
        (WebCore::callNodeList):
        * bindings/js/JSPluginElementFunctions.cpp:
        (WebCore::callPlugin):
        * bindings/js/JSQuarantinedObjectWrapper.h:
        * bindings/scripts/CodeGeneratorJS.pm:
        * bridge/runtime_method.cpp:
        (JSC::callRuntimeMethod):
        * bridge/runtime_object.cpp:
        (JSC::callRuntimeObject):

2009-05-07  Nikolas Zimmermann  <nikolas.zimmermann@torchmobile.com>

        Reviewed by Dave Hyatt.

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

        Fix memory/performance regression because of too much form control related abstraction just for WMLs sake.

        Remove FormControlElement and FormControlElementWithState base classes, as the overhead is too high for the
        gain. HTML has no benefit of that kind of abstraction, so we're going to move the functionality to Element directly.

        The functions now living in FormControlElement(WithState) lived in Node/Element/HTMLFormControlElement before.
        This patches moves all of them in a central place in Element.h, as virtual functions with an inline default implementation.
        To avoid confusion like isEnabled() living on Node, before the creation of the FormControlElement abstraction layer, all
        methods are renamed to clarify where they belong to. All renames are listed here:

        From FormControlElement:
        - isEnabled() -> isEnabledFormControl()
        - isReadOnly() -> isReadOnlyFormControl()
        - isTextControl() -> isTextFormControl()
        - valueMatchesRenderer() -> formControlValueMatchesRenderer()
        - setValueMatchesRenderer() -> setFormControlValueMatchesRenderer()
        - name() -> formControlName()
        - type() -> formControlType()

        From FormControlElementWithState:
        - saveState() -> saveFormControlState()
        - restoreState() -> restoreFormControlState()

        A lot of Element -> FormControlElement(WithState) casting is gone again, so it's not only a memory, but also a performance progression.

        No testcases affected, no new tests needed.

        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::canShareStyleWithElement):
        (WebCore::CSSStyleSelector::SelectorChecker::checkOneSelector):
        * dom/Document.cpp:
        (WebCore::Document::formElementsState):
        * dom/Document.h:
        (WebCore::Document::registerFormElementWithState):
        (WebCore::Document::unregisterFormElementWithState):
        * dom/Element.h:
        (WebCore::Element::isFormControlElement):
        (WebCore::Element::isEnabledFormControl):
        (WebCore::Element::isReadOnlyFormControl):
        (WebCore::Element::isTextFormControl):
        (WebCore::Element::formControlValueMatchesRenderer):
        (WebCore::Element::setFormControlValueMatchesRenderer):
        (WebCore::Element::formControlName):
        (WebCore::Element::formControlType):
        (WebCore::Element::saveFormControlState):
        (WebCore::Element::restoreFormControlState):
        * dom/FormControlElement.cpp: Removed.
        * dom/FormControlElement.h: Removed.
        * dom/FormControlElementWithState.cpp: Removed.
        * dom/FormControlElementWithState.h: Removed.
        * dom/InputElement.cpp:
        (WebCore::InputElement::setValueFromRenderer):
        * html/HTMLButtonElement.cpp:
        (WebCore::HTMLButtonElement::formControlType):
        * html/HTMLButtonElement.h:
        * html/HTMLFieldSetElement.cpp:
        (WebCore::HTMLFieldSetElement::formControlType):
        * html/HTMLFieldSetElement.h:
        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::attach):
        (WebCore::HTMLFormControlElement::formControlName):
        (WebCore::HTMLFormControlElement::willValidate):
        (WebCore::HTMLFormControlElementWithState::HTMLFormControlElementWithState):
        (WebCore::HTMLFormControlElementWithState::~HTMLFormControlElementWithState):
        (WebCore::HTMLFormControlElementWithState::willMoveToNewOwnerDocument):
        (WebCore::HTMLFormControlElementWithState::didMoveToNewOwnerDocument):
        (WebCore::HTMLFormControlElementWithState::finishParsingChildren):
        * html/HTMLFormControlElement.h:
        (WebCore::HTMLFormControlElement::isTextFormControl):
        (WebCore::HTMLFormControlElement::isEnabledFormControl):
        (WebCore::HTMLFormControlElement::formControlValueMatchesRenderer):
        (WebCore::HTMLFormControlElement::setFormControlValueMatchesRenderer):
        (WebCore::HTMLFormControlElement::isReadOnlyFormControl):
        (WebCore::HTMLFormControlElement::type):
        (WebCore::HTMLFormControlElement::name):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::formControlName):
        (WebCore::HTMLInputElement::formControlType):
        (WebCore::HTMLInputElement::saveFormControlState):
        (WebCore::HTMLInputElement::restoreFormControlState):
        (WebCore::HTMLInputElement::parseMappedAttribute):
        (WebCore::HTMLInputElement::detach):
        (WebCore::HTMLInputElement::setValue):
        (WebCore::HTMLInputElement::setFileListFromRenderer):
        * html/HTMLInputElement.h:
        (WebCore::HTMLInputElement::readOnly):
        (WebCore::HTMLInputElement::isTextFormControl):
        * html/HTMLKeygenElement.cpp:
        (WebCore::HTMLKeygenElement::formControlType):
        * html/HTMLKeygenElement.h:
        * html/HTMLLegendElement.cpp:
        (WebCore::HTMLLegendElement::formControlType):
        * html/HTMLLegendElement.h:
        * html/HTMLOptGroupElement.cpp:
        (WebCore::HTMLOptGroupElement::formControlType):
        * html/HTMLOptGroupElement.h:
        * html/HTMLOptionElement.cpp:
        (WebCore::HTMLOptionElement::formControlType):
        * html/HTMLOptionElement.h:
        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::formControlType):
        (WebCore::HTMLSelectElement::saveFormControlState):
        (WebCore::HTMLSelectElement::restoreFormControlState):
        * html/HTMLSelectElement.h:
        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::HTMLTextAreaElement):
        (WebCore::HTMLTextAreaElement::formControlType):
        (WebCore::HTMLTextAreaElement::saveFormControlState):
        (WebCore::HTMLTextAreaElement::restoreFormControlState):
        (WebCore::HTMLTextAreaElement::updateValue):
        (WebCore::HTMLTextAreaElement::setValue):
        * html/HTMLTextAreaElement.h:
        (WebCore::HTMLTextAreaElement::readOnly):
        (WebCore::HTMLTextAreaElement::isTextFormControl):
        * page/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::isEnabled):
        (WebCore::AccessibilityRenderObject::canSetFocusAttribute):
        * page/DragController.cpp:
        (WebCore::DragController::concludeEditDrag):
        * rendering/RenderMenuList.cpp:
        (WebCore::RenderMenuList::itemIsEnabled):
        * rendering/RenderTextControl.cpp:
        (WebCore::updateUserModifyProperty):
        (WebCore::RenderTextControl::setInnerTextValue):
        * rendering/RenderTextControl.h:
        * rendering/RenderTextControlMultiLine.cpp:
        (WebCore::RenderTextControlMultiLine::subtreeHasChanged):
        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::updateFromElement):
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::isEnabled):
        (WebCore::RenderTheme::isReadOnlyControl):
        * rendering/RenderThemeChromiumMac.mm:
        (WebCore::RenderThemeChromiumMac::adjustMenuListStyle):
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::adjustMenuListStyle):
        * rendering/RenderThemeSafari.cpp:
        (WebCore::RenderThemeSafari::adjustMenuListStyle):
        * wml/WMLFormControlElement.cpp:
        * wml/WMLFormControlElement.h:
        (WebCore::WMLFormControlElement::isReadOnlyFormControl):
        (WebCore::WMLFormControlElement::isTextFormControl):
        (WebCore::WMLFormControlElement::formControlValueMatchesRenderer):
        (WebCore::WMLFormControlElement::setFormControlValueMatchesRenderer):
        * wml/WMLInputElement.cpp:
        (WebCore::WMLInputElement::WMLInputElement):
        (WebCore::WMLInputElement::isKeyboardFocusable):
        (WebCore::WMLInputElement::isMouseFocusable):
        (WebCore::WMLInputElement::dispatchBlurEvent):
        (WebCore::WMLInputElement::formControlType):
        (WebCore::WMLInputElement::formControlName):
        (WebCore::WMLInputElement::setValue):
        (WebCore::WMLInputElement::saveFormControlState):
        (WebCore::WMLInputElement::restoreFormControlState):
        (WebCore::WMLInputElement::parseMappedAttribute):
        (WebCore::WMLInputElement::detach):
        (WebCore::WMLInputElement::appendFormData):
        (WebCore::WMLInputElement::init):
        * wml/WMLInputElement.h:
        (WebCore::WMLInputElement::isTextFormControl):
        * wml/WMLOptGroupElement.cpp:
        (WebCore::WMLOptGroupElement::formControlType):
        * wml/WMLOptGroupElement.h:
        * wml/WMLOptionElement.cpp:
        (WebCore::WMLOptionElement::formControlType):
        * wml/WMLOptionElement.h:

2009-05-07  Dmitry Titov  <dimich@chromium.org>

        Reviewed by Alexey Proskuryakov and Adam Roben.

        https://bugs.webkit.org/show_bug.cgi?id=25348
        Change WTF::ThreadIdentifier to be an actual (but wrapped) thread id, remove ThreadMap.

        Most of the change is in WTF.
        Unless noted, all the following files changed to use the new ThreadIdentifier::isValid()
        method instead of just doing 'if(m_threadID)' kind of checks, since ThreadIdentifier
        is now a class rather then an integer.
        Also, there is no need to initialize threadID in constructors to 0 now.

        * dom/XMLTokenizerLibxml2.cpp:
        (WebCore::libxmlLoaderThread): use DEFINE_STATIC_LOCAL and accessor function for static thread id,
        since now ThreadIdentifier needs construction and we avoid having global initializers.
        (WebCore::matchFunc): use the new accessor function.
        (WebCore::openFunc): ditto.
        (WebCore::createStringParser): ditto.
        (WebCore::createMemoryParser): ditto.
        * loader/icon/IconDatabase.cpp:
        (WebCore::IconDatabase::open):
        * platform/sql/SQLiteDatabase.cpp:
        (WebCore::SQLiteDatabase::SQLiteDatabase):
        (WebCore::SQLiteDatabase::close):
        * storage/DatabaseThread.cpp:
        (WebCore::DatabaseThread::start):
        (WebCore::DatabaseThread::databaseThread): remove m_threadID from debug output.
        * storage/LocalStorageThread.cpp:
        (WebCore::LocalStorageThread::start):
        (WebCore::LocalStorageThread::scheduleImport):
        (WebCore::LocalStorageThread::scheduleSync):
        (WebCore::LocalStorageThread::terminate):
        * workers/WorkerThread.cpp:
        (WebCore::WorkerThread::start):
        (WebCore::WorkerThread::WorkerThread):
        (WebCore::WorkerThread::start):

2009-05-07  Simon Fraser  <simon.fraser@apple.com>

        Rubber Stamped by Dave Hyatt
        
        Shuffle the data members to minimize padding.

        * dom/ClassNames.h:

2009-05-07  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Darin Adler

        <rdar://problem/6864062> Shrink GlyphPage from 4112 to 2576 bytes in 64-bit
        https://bugs.webkit.org/show_bug.cgi?id=25605

        Shrink GlyphPage by splitting the array of GlyphData, which has lots
        of padding, into separate Glyph and SimpleFontData* arrays.

        * platform/graphics/Font.h:
        glyphDataForCharacter has to return a GlyphData by value now.
        
        * platform/graphics/FontFastPath.cpp:
        (WebCore::Font::glyphDataForCharacter):
        Return GlyphData by value.
        
        * platform/graphics/GlyphPageTreeNode.cpp:
        (WebCore::GlyphPageTreeNode::initializePage):
        Better encapsulation of GlyphPage, using the new methods.

        * platform/graphics/Font.h:
        * platform/graphics/FontFastPath.cpp:
        (WebCore::Font::glyphDataForCharacter):
        * platform/graphics/GlyphPageTreeNode.cpp:
        (WebCore::GlyphPageTreeNode::initializePage):
        * platform/graphics/GlyphPageTreeNode.h:
        (WebCore::GlyphData::GlyphData):
        (WebCore::GlyphPage::indexForCharacter):
        (WebCore::GlyphPage::glyphDataForCharacter):
        (WebCore::GlyphPage::glyphDataForIndex):
        (WebCore::GlyphPage::glyphAt):
        (WebCore::GlyphPage::fontDataForCharacter):
        (WebCore::GlyphPage::setGlyphDataForCharacter):
        (WebCore::GlyphPage::setGlyphDataForIndex):
        (WebCore::GlyphPage::copyFrom):
        (WebCore::GlyphPage::clear):

2009-05-07  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Darin Fisher.

        https://bugs.webkit.org/show_bug.cgi?id=25625
        Implement Image/Option constructors in V8 bindings.

        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::NAMED_PROPERTY_GETTER): Removed old JS-based code.
        * bindings/v8/custom/V8HTMLImageElementConstructor.cpp: Added.
        * bindings/v8/custom/V8HTMLOptionElementConstructor.cpp: Added.

2009-05-07  Brady Eidson  <beidson@apple.com>

        I hate myself for doing this, but need to fix that ChangeLog entry.

        * ChangeLog:

2009-05-07  Brady Eidson  <beidson@apple.com>

        Rubberstamped by Darin Adler

        * html/HTMLParser.cpp: Use the correct style of BUILDING_ON_* for WebCore.
        * html/HTMLParser.h: Ditto

2009-05-07  David Hyatt  <hyatt@apple.com>

        Restore intrinsic margins to all form controls on Mac and Windows.  Some of this regressed in 43007
        when textareas were given explicit margins.  Some of it had already regressed earlier whenever intrinsic
        margins were turned off in themeWin.css.

        Reviewed by Beth Dakin.

        * css/html4.css:
        * css/themeWin.css:

2009-05-07  Brady Eidson  <beidson@apple.com>

        Reviewed by Darin Adler and Alexey Proskuryakov.

        <rdar://problem/6863795> Exception occurs in Mail when attempting to create signatures due to <head> element creation

        * dom/Document.cpp:
        (WebCore::Document::implicitClose): Check shouldCreateImplicitHead() before creating it.

        * html/HTMLParser.cpp:
        (WebCore::HTMLParser::handleError): Check shouldCreateImplicitHead() before creating it.
        (WebCore::HTMLParser::bodyCreateErrorCheck): Ditto.
        (WebCore::shouldCreateImplicitHead): For Tiger/Leopard when running under Mail, the implicit <head> shouldn't be created.
        * html/HTMLParser.h:
        (WebCore::shouldCreateImplicitHead): Inline implementation for non-Tiger/Leopard platforms

2009-05-07  Antony Sargent  <asargent@chromium.org>

        Reviewed by Darin Fisher.

        Fix a memory leak in V8EventListenerList::remove.

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

        No new functionality so no new tests. 

        * bindings/v8/V8EventListenerList.cpp:
        (WebCore::V8EventListenerList::remove):

2009-05-07  Darin Fisher  <darin@chromium.org>

        Fix Chromium build bustage.

        * bindings/v8/custom/V8HTMLFormElementCustom.cpp: Add missing
        HTMLCollection.h include.

2009-05-07  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Beth Dakin.

        Bug 25598: AX: if a radio button has a label and a title, the label is not exposed
        https://bugs.webkit.org/show_bug.cgi?id=25598

        Test: accessibility/radio-button-title-label.html

        * page/AccessibilityObject.h:
        (WebCore::AccessibilityObject::exposesTitleUIElement):
        * page/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::exposesTitleUIElement):
        (WebCore::AccessibilityRenderObject::titleUIElement):
        (WebCore::AccessibilityRenderObject::accessibilityIsIgnored):
        * page/AccessibilityRenderObject.h:

2009-05-07  Darin Fisher  <darin@chromium.org>

        Fix Chromium build bustage.

        * bindings/v8/custom/V8HTMLFormElementCustom.cpp:
        (WebCore::INDEXED_PROPERTY_GETTER): ":" should be "::"

2009-05-07  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        https://bugs.webkit.org/show_bug.cgi?id=25610
        [GTK] text.caretOffset is reportedly always 0

        Use the right function to get the caret offset in an
        element. selectionStart() would only work for text
        controls (there's even an ASSERT when calculating the selected
        text range). Instead just get the selection and get the offset of
        the start position.

        * page/gtk/AccessibilityObjectWrapperAtk.cpp:

2009-05-07  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Fix support for antialiased CSS border-radius
        
        WebKit implements border-radius by drawing a double-size border,
        and then letting the clip constrain the border to the right width
        and position. This requires support for antialiased clipping, as
        well as painting, to get a nice smooth border.
        
        Qt only does antialiased clipping if the anti-alias flag is set
        at the time of clipping, so we have to enable this in the method
        addInnerRoundedRectClip(), as well as when we draw the border.
        
        Currently the raster-engine is the only Qt paint engine to support
        anti-aliased clipping, but the OpenGL and Mac paint engines could
        potentially support this in the future.

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

2009-05-07  Adam Langley  <agl@google.com>

        Reviewed by Eric Seidel.

        Render empty optgroup elements.

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

        Currently, optgroup elements which are empty are not rendered. The
        HTML specification gives no guidance on this situation.

        However, the test for being empty is that they have no children, thus
        this will not render:
          <optgroup label="test"></optgroup>
        while this /will/ render (because of the text node child):
          <optgroup label="test"> </optgroup>

        This patch will cause both cases to render which matches IE's and
        Firefox's behaviour.

        The difference only appears when opening the select element and does
        not appear in the render tree. Thus, a manual layout-test is required.

        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::recalcListItems):
        * manual-tests/optgroup-empty-and-nested.html: Added.

2009-05-06  Julie Parent  <jparent@google.com>

        Reviewed by Eric Seidel.

        Bug 25608: Unused m_frame in ChromiumClipboard.
        https://bugs.webkit.org/show_bug.cgi?id=25608

        * platform/chromium/ClipboardChromium.h:
        
        No tests added as this is only removing dead code, no functional changes.

2009-05-06  Dan Bernstein  <mitz@apple.com>

        Reviewed by Simon Fraser and Justin Garcia.

        - fix another part of <rdar://problem/6703873> Triple-click quoted line
          and type Return creates an extra quoted blank line

        Test: editing/inserting/6703873-2.html

        * editing/BreakBlockquoteCommand.cpp:
        (WebCore::BreakBlockquoteCommand::doApply): Corrected the logic for
        determining the first node that should go into the new blockquote
        given the split position: if it is at the end of a container, use the
        next node after the container. Otherwise, use the child at the
        position's offset.

2009-05-06  Kevin Ollivier  <kevino@theolliviers.com>

        wx build fix, fixes for wx trunk builds.

        * platform/graphics/wx/ImageWx.cpp:
        (WebCore::BitmapImage::draw):
        * platform/wx/RenderThemeWx.cpp:
        * platform/wx/wxcode/mac/carbon/fontprops.cpp:
        (wxFontProperties::wxFontProperties):

2009-05-06  Albert J. Wong  <ajwong@chromium.org>

        Reviewed by Darin Fisher.

        https://bugs.webkit.org/show_bug.cgi?id=25597
        Fix API drift compile errors that occurred while this was ifdef-ed out.
        The two big issues were that RenderObject::element() became
        RenderObject::node() and some of the wk* drawing functions had
        an extra theme parameter added to the argument list.

        * rendering/RenderThemeChromiumMac.mm:
        (WebCore::RenderThemeChromiumMac::paintMediaFullscreenButton):
        (WebCore::RenderThemeChromiumMac::paintMediaMuteButton):
        (WebCore::RenderThemeChromiumMac::paintMediaPlayButton):
        (WebCore::RenderThemeChromiumMac::paintMediaSeekBackButton):
        (WebCore::RenderThemeChromiumMac::paintMediaSeekForwardButton):
        (WebCore::RenderThemeChromiumMac::paintMediaSliderTrack):
        (WebCore::RenderThemeChromiumMac::paintMediaSliderThumb):

2009-05-06  Jian Li  <jianli@chromium.org>

        Reviewed by Dimitri Glazkov.

        https://bugs.webkit.org/show_bug.cgi?id=25385
        Upstream changes to V8 bindings for supporting nested workers.

        * bindings/v8/WorkerContextExecutionProxy.cpp:
        (WebCore::WorkerContextExecutionProxy::ToV8Object):
        (WebCore::WorkerContextExecutionProxy::EventTargetToV8Object):
        * bindings/v8/custom/V8WorkerCustom.cpp:
        (WebCore::getEventListener):
        (WebCore::ACCESSOR_SETTER WorkerOnmessage):
        (WebCore::CALLBACK_FUNC_DECL WorkerAddEventListener):

2009-05-06  Dave Moore  <davemoore@google.com>

        Reviewed by Dimitri Glazkov.

        https://bugs.webkit.org/show_bug.cgi?id=25513
        The V8 bindings convert every javascript property to its associated css style
        name. It then calls functions that convert that name to an id. This makes
        getting or setting css styles on elements slow.
        
        The patch fixes this by caching the results of the transformation, mapping a
        javascript property name to its css property id. It then calls the already
        public webkit methods that take the id in place of the string property names.

        * bindings/v8/custom/V8CSSStyleDeclarationCustom.cpp:

2009-05-06  Nate Chapin  <japhet@google.com>

        Reviewed by Dimitri Glazkov.

        https://bugs.webkit.org/show_bug.cgi?id=25591
        Upstream V8HTMLFormElement from the Chromium repository.

        * bindings/v8/custom/V8HTMLFormElementCustom.cpp:
        (WebCore::INDEXED_PROPERTY_GETTER HTMLFormElement): Upstreamed from Chromium repository
        (WebCore::NAMED_PROPERTY_GETTER HTMLFormElement): Changed empty element return case to return notHandledByInterceptor();
        (WebCore::CALLBACK_FUNC_DECL HTMLFormElementSubmit): Upstreamed from Chromium repository

2009-05-06  Albert J. Wong  <ajwong@chromium.org>

        Reviewed by Dimitri Glazkov.

        https://bugs.webkit.org/show_bug.cgi?id=25595
        Upstream V8CanvasPixelArrayCustom from chromium port tree.

        * bindings/v8/V8CanvasPixelArrayCustom.cpp: Added.

2009-05-06  Simon Fraser  <simon.fraser@apple.com>

        Rubber-stampted by Eric Seidel

        Add braces to clarify logic flow in RenderObject::adjustStyleDifference.
        Only affects ACCELERATED_COMPOSITING builds.

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

2009-05-06  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein

        <rdar://problem/6862550> Reduce size of RenderText in 64-bit
        
        Rearrange data members of RenderText so that an int comes
        first, to minimize padding.

        * rendering/RenderText.cpp:
        (WebCore::RenderText::RenderText):
        * rendering/RenderText.h:

2009-05-06  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein

        <rdar://problem/6862823> Reduce size of RenderStyle in 64-bit
        
        Rearrange data members of RenderStyle to minimize padding
        when building for 64-bit.

        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::RenderStyle):
        * rendering/style/RenderStyle.h:
        (WebCore::):

2009-05-06  Darin Fisher  <darin@chromium.org>

        Reviewed by Dimitri Glazkov.

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

        Fixes Chromium build bustage caused by r43317 (making
        RefCountedBase::m_refCount private)

        * page/chromium/AccessibilityObjectWrapper.h:
        (WebCore::AccessibilityObjectWrapper::AccessibilityObjectWrapper):

2009-05-06  Hin-Chung Lam  <hclam@chromium.org>

        Reviewed by Darin Fisher.

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

        Refactor for MediaPlayerPrivate for Chromium port. Remove
        the implementation of MediaPlayerPrivateInferface from it.

        * platform\graphics\chromium\MediaPlayerPrivateChromium.h:

2009-05-06  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dave Hyatt, Dan Bernstein
        
        <rdar://problem/6860197> Reduce the size of FontFallbackList in 64-bit

        Re-order the data members of FontFallbackList to save 8 bytes when building 64-bit.

        * platform/graphics/FontFallbackList.cpp:
        (WebCore::FontFallbackList::FontFallbackList):
        * platform/graphics/FontFallbackList.h:

2009-05-06  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Darin Adler, Dan Bernstein

        <rdar://problem/6860068> Reduce size of InlineBox in 64-bit

        Re-order the data members of InlineBox to save 8 bytes when building 64-bit.

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

2009-05-06  David Levin  <levin@chromium.org>

        Reviewed by Dimitri Glazkov.

        https://bugs.webkit.org/show_bug.cgi?id=25588
        Adding the custom v8 bindings Document.location.

        * bindings/v8/custom/V8DocumentLocationCustom.cpp: Added.

2009-05-06  Kevin McCullough  <kmccullough@apple.com>

        -Clarified a comment

        * editing/InsertParagraphSeparatorCommand.cpp:
        (WebCore::InsertParagraphSeparatorCommand::doApply):

2009-05-06  Nikolas Zimmermann  <nikolas.zimmermann@torchmobile.com>

        Not reviewed. Fix WML enabled builds by including "MappedAttribute.h" in several places.

        * wml/WMLAElement.cpp:
        * wml/WMLAccessElement.cpp:
        * wml/WMLBRElement.cpp:
        * wml/WMLCardElement.cpp:
        * wml/WMLDoElement.cpp:
        * wml/WMLElement.cpp:
        * wml/WMLFieldSetElement.cpp:
        * wml/WMLGoElement.cpp:
        * wml/WMLImageElement.cpp:
        * wml/WMLInputElement.cpp:
        * wml/WMLMetaElement.cpp:
        * wml/WMLOnEventElement.cpp:
        * wml/WMLOptGroupElement.cpp:
        * wml/WMLOptionElement.cpp:
        * wml/WMLPElement.cpp:
        * wml/WMLPostfieldElement.cpp:
        * wml/WMLSetvarElement.cpp:
        * wml/WMLTableElement.cpp:
        * wml/WMLTemplateElement.cpp:
        * wml/WMLTimerElement.cpp:

2009-05-06  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        https://bugs.webkit.org/show_bug.cgi?id=25526
        [Gtk] Additional support is needed for caret browsing

        Emit AtkText::text-selection-changed when the selection changes
        and the current selection is of Range (ie, the start and end
        positions are different) type. This seems to match what Gecko
        does.

        * editing/gtk/SelectionControllerGtk.cpp:
        (WebCore::SelectionController::notifyAccessibilityForSelectionChange):

2009-05-05  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        https://bugs.webkit.org/show_bug.cgi?id=25526
        [Gtk] Additional support is needed for caret browsing

        Emit AtkText::text-caret-moved when selection changes.

        * GNUmakefile.am:
        * editing/SelectionController.h:
        * editing/gtk/SelectionController.cpp: Added.
        (WebCore::SelectionController::notifyAccessibilityForSelectionChange):

2009-05-06  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Gustavo Noronha.

        Use mozilla cursors for the previously not implemented
        cursors. The manual-tests/cursor.html is looking complete
        now.

        * platform/gtk/CursorGtk.cpp:
        (WebCore::cellCursor):
        (WebCore::noDropCursor):
        (WebCore::progressCursor):
        (WebCore::noneCursor):
        (WebCore::notAllowedCursor):
        (WebCore::grabCursor):
        (WebCore::grabbingCursor):
        * platform/gtk/CursorGtk.h:

2009-05-06  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Xan Lopez.

        Properly indent the header file.

        * platform/gtk/CursorGtk.h:

2009-05-06  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Gustavo Noronha.

        Use the mozilla copyright header. Use MPL1.1/GPL2.0
        and LGPL2.1 as the license compared to LGPL2.0.

        * platform/gtk/CursorGtk.h:

2009-05-06  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Gustavo Noronha.

        Move PluginView::invalidateRegion from the
        TemporaryLinkStubs to PluginViewGtk.cpp and implement
        it with a call to Widget::invalidate() just like
        mac is doing. Optimisations would have to be window
        system specific.

        * platform/gtk/TemporaryLinkStubs.cpp:
        * plugins/gtk/PluginViewGtk.cpp:
        (WebCore::PluginView::invalidateRegion):

2009-05-06  Jan Michael Alonzo  <jmalonzo@webkit.org>

        Reviewed by Holger Freyther.

        Misc fixes to InspectorClientGtk.

        * GNUmakefile.am: Add localizedStrings.js to webinspector_DATA.
        This prevents copious amounts "Localized string not found" errors
        in the console

2009-05-06  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Ariya Hidayat.

        Fix the Qt build on Windows.

        * platform/graphics/GraphicsContext.h:
        (WebCore::GraphicsContext::shouldIncludeChildWindows): Implemented dummy accessor.

2009-05-06  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Tor Arne Vestbø.

        Tweak WebCore.pro for being able to override the generated sources dir for the
        generated_files target.

        * WebCore.pro:

2009-05-06  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Holger Freyther.

        Fix the Qt/Windows build, use iface instead of interface to avoid conflict
        with VS2005 headers.

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::SelectorChecker::checkPseudoState):

2009-05-06  Joerg Bornemann  <joerg.bornemann@trolltech.com>

        Reviewed by Simon Hausmann.

        We need to include StringExtras.h on Windows CE to access the strdup function.

        * plugins/PluginStream.cpp:

2009-05-06  Soren Gjesse  <sgjesse@chromium.org>

        Reviewed by Eric Seidel.

        Changed the toString behaviour for non document dom node event handlers in the V8 bindings.
        https://bugs.webkit.org/show_bug.cgi?id=25544

        In the V8 bindings non document dom node event handlers are wrapped in a number of with blocks and uses an inner
        function. This causes the default toString on such a handler to return all this wrapper code. As some web sites
        use the source of an event handler to create new functions this wrapper code causes compatibility problems.

        Create a specific toString function for these handlers which will return a function source compatible with the
        source returned by the JSC bindings and other browsers.

        Test: fast/events/event-function-toString.html

        * bindings/v8/ScriptEventListener.cpp:
        (WebCore::createAttributeEventListener):
        * bindings/v8/V8LazyEventListener.cpp:
        (WebCore::V8LazyEventListener::V8LazyEventListener):
        (WebCore::V8LazyEventListener::getListenerFunction):
        (WebCore::V8LazyEventListenerToString):
        (WebCore::V8LazyEventListener::getWrappedListenerFunction):
        * bindings/v8/V8LazyEventListener.h:
        (WebCore::V8LazyEventListener::create):

2009-05-06  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reviewed by Simon Hausmann.

        Build QtWebKit as a framework on Mac

        This implies both debug and release build by default, unless
        one of the --debug or --release config options are passed to
        the build-webkit script.

        Frameworks can be disabled by passing CONFIG+=webkit_no_framework
        to the build-webkit script.

        To be able to build both debug and release targets in parallel
        we have to use separate output directories for the generated
        sources, which is not optimal, but required to avoid race conditions.

        An optimization would be to only require this spit-up on Mac.

        * WebCore.pro:

2009-05-06  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Use $$GENERATED_SOURCES_DIR as output when running bison

        A couple of the generators left the bison output file in the source
        tree, and then moved it into $$GENERATED_SOURCES_DIR, which did not
        work well when building release and debug configurations in parallel.

        * WebCore.pro:

2009-05-06  Dan Bernstein  <mitz@apple.com>

        Reviewed by Justin Garcia.

        - fix an assertion failure in RemoveNodeCommand() when deleting a <br>
          between a block and a mail blockquote

        Test: editing/deleting/removeNodeCommand-assert.html

        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::mergeParagraphs): Pass the start block
        to prune() instead of passing m_upstreamStart.node(), because the latter
        may have been removed already.

2009-05-05  Eric Seidel  <eric@webkit.org>

        No review, roll out only.

        Roll out r23072 since it broke layout tests

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

2009-05-05  Ben Murdoch  <benm@google.com>

        Reviewed by Eric Seidel.
        
        Add #if ENABLE(DATABASE) guards around database code so toggling ENABLE_DATABASE off does not break builds.
        https://bugs.webkit.org/show_bug.cgi?id=24776

        No functional changes, thus no tests.

        * bindings/js/JSCustomSQLStatementCallback.cpp:
        * bindings/js/JSCustomSQLStatementCallback.h:
        * bindings/js/JSCustomSQLStatementErrorCallback.cpp:
        * bindings/js/JSCustomSQLStatementErrorCallback.h:
        * bindings/js/JSCustomSQLTransactionCallback.cpp:
        * bindings/js/JSCustomSQLTransactionCallback.h:
        * bindings/js/JSCustomSQLTransactionErrorCallback.cpp:
        * bindings/js/JSCustomSQLTransactionErrorCallback.h:
        * bindings/js/JSDatabaseCustom.cpp:
        * bindings/js/JSSQLTransactionCustom.cpp:
        * loader/EmptyClients.h:
        * page/ChromeClient.h:
        * storage/ChangeVersionWrapper.cpp:
        * storage/ChangeVersionWrapper.h:
        * storage/Database.cpp:
        (WebCore::Database::databaseInfoTableName):
        * storage/Database.h:
        * storage/Database.idl:
        * storage/DatabaseTask.cpp:
        * storage/DatabaseTask.h:
        * storage/DatabaseThread.cpp:
        * storage/DatabaseThread.h:
        * storage/DatabaseTracker.cpp:
        * storage/DatabaseTracker.h:
        * storage/DatabaseTrackerClient.h:
        * storage/OriginQuotaManager.cpp:
        * storage/OriginQuotaManager.h:
        * storage/SQLStatement.cpp:
        * storage/SQLStatement.h:
        * storage/SQLTransaction.cpp:
        * storage/SQLTransaction.h:
        * storage/SQLTransaction.idl:

2009-05-05  Jeremy Moskovich  <jeremy@chromium.org>

        Reviewed by Eric Seidel.

        Add some documentation to InlineBox::x(),y().
        https://bugs.webkit.org/show_bug.cgi?id=25378

        * rendering/InlineBox.h:

2009-05-05  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Eric Seidel.

        Disable all the SVG features for WebKit/Qt if ENABLE_SVG=0 
        https://bugs.webkit.org/show_bug.cgi?id=24693

        * WebCore.pro:

2009-05-05  Sankar Aditya Tanguturi  <sankaraditya@gmail.com>

        Reviewed by Eric Seidel.

        Anonymous blocks should not be exposed in accessibility tree.
        Part of https://bugs.webkit.org/show_bug.cgi?id=23072

        Tests: accessibility/ignore-anonymous-block.html
               platform/win/accessibility/document-role.html

        * page/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::accessibilityIsIgnored):Return
        true for Anonymous blocks. Matching Firefox 2.0.0.14

2009-05-05  Jungshik Shin  <jshin@chromium.org>

        Reviewed by Alexey Proskuryakov.

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

        For euc-kr and other 8bit Korean encodings
        (similar to euc-kr/windows-949), make document.charset return
        EUC-KR instead of windows-949. The latter is not recognized by
        Korean web servers.

        Add domName method to TextEncoding to deal with cases where
        our internal encoding name does not match what's widely recognized
        by web servers. Currently, the only case is 'windows-949' (internal
        name) vs 'EUC-KR'.

        Test: fast/encoding/euckr-name.html

        * dom/Document.cpp:
        (WebCore::Document::encoding): Call TextEncoding.domName() instead
        of TextEncoding.name().
        * platform/text/TextEncoding.cpp:
        (WebCore::TextEncoding::domName): For the canonical name 'windows-949',
        return 'EUC-KR'. Otherwise, just return the canonical name.
        * platform/text/TextEncoding.h:

2009-05-05  Adam Langley  <agl@google.com>

        Reviewed by Darin Adler.

        Rendering fix for <select> elements.
        https://bugs.webkit.org/show_bug.cgi?id=25558

        When switching a <select> element from display:none to default
        display, we would fail to invalidate the parent's pref widths in some
        situations:

        When attaching the element, RenderMenuList::updateOptionsWidth would
        call setNeedsLayoutAndPrefWidthsRecalc before the parent pointer was
        set. This would mark the pref widths as dirty, but not for any parent
        objects.

        When RenderObjectChildList::appendChildNode later calls
        setNeedsLayoutAndPrefWidthsRecalc again, with a valid parent pointer,
        nothing would be done because the pref widths were already dirty for.
        the RenderMenuList.

        * rendering/RenderMenuList.cpp:
        (WebCore::RenderMenuList::updateOptionsWidth):

2009-05-05  Antony Sargent  <asargent@chromium.org>

        Reviewed by Dimitri Glazkov.

        Switch V8EventListenerList to use HashTable<T>.
        https://bugs.webkit.org/show_bug.cgi?id=25496
        
        This avoids some tricky issues with event listener removal in the 
        current implementation and has slightly better performance.

        No new functionality so no new tests.

        * bindings/v8/V8EventListenerList.cpp: Added V8EventListenerListIterator.
        * bindings/v8/V8EventListenerList.h:
        (WebCore::V8EventListenerList::size):
        * bindings/v8/WorkerContextExecutionProxy.cpp:
        (WebCore::WorkerContextExecutionProxy::initContextIfNeeded):

2009-05-05  Darin Fisher  <darin@chromium.org>

        Fixing build bustage.

        Add some missing includes to fix the Chromium build.

        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        * bindings/v8/custom/V8HTMLDocumentCustom.cpp:

2009-05-05  Darin Fisher  <darin@chromium.org>

        Reviewed by Darin Adler.

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

        history.{back,forward,go} should always be dispatched asynchronously,
        even when the history navigation would just result in scrolling the
        page.  This matches the behavior of other browsers like IE and FF.

        Test: fast/history/back-forward-is-asynchronous.html

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

2009-05-05  Eric Seidel  <eric@webkit.org>

        Reviewed by Simon Fraser.

        Add an ASSERT(useTransforms) to mapLocalToContainer implementations in SVG.
        https://bugs.webkit.org/show_bug.cgi?id=25532
        https://bugs.webkit.org/show_bug.cgi?id=25568

        Adding this ASSERT exposed a bug in SVGPaintServerPattern::setup
        which was causing transformed SVG text when filled/stroked with a
        pattern using patternUnits=objectBoundingBox to draw incorrectly.

        I fixed the incorrect drawing (by removing the broken code) and added
        two test cases to test the fix:
        * svg/transforms/text-with-pattern-inside-transformed-html.xhtml
        * svg/transforms/text-with-pattern-with-svg-transform.svg

        * rendering/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::mapLocalToContainer):
        * rendering/SVGRenderSupport.cpp:
        (WebCore::SVGRenderBase::mapLocalToContainer):
        * svg/graphics/SVGPaintServerPattern.cpp:
        (WebCore::SVGPaintServerPattern::setup):

2009-05-05  Greg Bolsinga  <bolsinga@apple.com>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=25554
        
        Support HTML5 text control input types: email, number, tel, url

        Test: fast/html/text-field-input-types.html

        * bindings/objc/DOMHTML.mm:
        (-[DOMHTMLInputElement _isTextField]): Call HTMLInputElement::isTextField directly.
        * html/HTMLInputElement.cpp: Use the new types where appropriate.
        (WebCore::HTMLInputElement::setInputType):
        (WebCore::HTMLInputElement::type):
        (WebCore::HTMLInputElement::saveState):
        (WebCore::HTMLInputElement::restoreState):
        (WebCore::HTMLInputElement::accessKeyAction):
        (WebCore::HTMLInputElement::rendererIsNeeded):
        (WebCore::HTMLInputElement::createRenderer):
        (WebCore::HTMLInputElement::appendFormData):
        (WebCore::HTMLInputElement::valueWithDefault):
        (WebCore::HTMLInputElement::storesValueSeparateFromAttribute):
        (WebCore::HTMLInputElement::defaultEventHandler):
        * html/HTMLInputElement.h: Ditto.
        (WebCore::HTMLInputElement::):
        (WebCore::HTMLInputElement::isTextField):

2009-04-01  miggilin  <mr.diggilin@gmail.com>

        Reviewed by Kevin Ollivier.

        Mouse wheel scrolling and keyboard shortcut support for wx.
        
        https://bugs.webkit.org/show_bug.cgi?id=24797

        * platform/ScrollView.cpp:
        (WebCore::ScrollView::wheelEvent):
        * platform/wx/KeyboardEventWx.cpp:
        (WebCore::windowsKeyCodeForKeyEvent):
        (WebCore::PlatformKeyboardEvent::PlatformKeyboardEvent):
        * platform/wx/ScrollViewWx.cpp:
        (WebCore::ScrollView::platformSetScrollPosition):

2009-05-05  Kevin Ollivier  <kevino@theolliviers.com>

        wx build fix for Windows, add missing include.
        
        https://bugs.webkit.org/show_bug.cgi?id=24798

        * platform/wx/wxcode/win/non-kerned-drawing.cpp:

2009-05-05  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Beth Dakin.

        Bug 25574: AXImageMap children links don't respond properly to accessibilityHitTest:
        https://bugs.webkit.org/show_bug.cgi?id=25574

        Enable accessibility hit-testing for image map links. 
        Allow image map links to return AXURLs and AXAccessKey information.

        Test: platform/mac/accessibility/imagemap-hittest.html

        * page/AccessibilityImageMapLink.cpp:
        (WebCore::AccessibilityImageMapLink::url):
        * page/AccessibilityImageMapLink.h:
        * page/AccessibilityObject.h:
        (WebCore::AccessibilityObject::minValueForRange):
        * page/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::accessibilityParentForImageMap):
        (WebCore::AccessibilityRenderObject::accessibilityImageMapHitTest):
        (WebCore::AccessibilityRenderObject::doAccessibilityHitTest):
        * page/AccessibilityRenderObject.h:
        * page/mac/AccessibilityObjectWrapper.mm:
        (-[AccessibilityObjectWrapper accessibilityAttributeNames]):

2009-05-05  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Dan Bernstein.

        <rdar://problem/6552129> Select a quote line and paste elsewhere, you
        get that line and an extra quoted blank line
        <rdar://problem/6609308> Triple-click a quoted header line, copy, paste
        onto an empty line makes an extra quoted line

        - When pasting a blockquote with a newline, make sure we put the newline
        outside of the blockquote so that it is not quoted.

        * editing/InsertParagraphSeparatorCommand.cpp:
        (WebCore::InsertParagraphSeparatorCommand::doApply):

2009-05-05  Jan Michael Alonzo  <jmalonzo@webkit.org>

        Reviewed by Xan Lopez.

        Call moz_gtk_shutdown on RenderThemeGtk destruction.

        * platform/gtk/RenderThemeGtk.cpp:
        (WebCore::RenderThemeGtk::~RenderThemeGtk):
        * platform/gtk/RenderThemeGtk.h:

2009-05-05  Darin Adler  <darin@apple.com>

        Reviewed by Steve Falkenburg.

        <rdar://problem/6858340> REGRESSION: can't drag local HTML files into Safari because CFURLCreateWithFileSystemPath inserts "localhost"

        * platform/win/ClipboardUtilitiesWin.cpp: (WebCore::urlFromPath): Remove localhost.

2009-05-05  Peter Kasting  <pkasting@google.com>

        Reviewed by Brady Eidson.

        Safety-check m_documentLoader before dereferencing.  While it seems
        unlikely this could fail (as Safari 3 shipped without this),
        technically almost any call can change or reset m_documentLoader.

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

2009-05-05  Dan Bernstein  <mitz@apple.com>

        - Tiger build fix

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

2009-05-05  Peter Kasting  <pkasting@google.com>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=25303
        No need to ref the internal buffer inside the Skia ImageDecoder.

        * platform/image-decoders/skia/ImageDecoder.h:
        (WebCore::RGBA32Buffer::RGBA32Buffer):
        (WebCore::RGBA32Buffer::operator=):
        (WebCore::RGBA32Buffer::clear):
        (WebCore::RGBA32Buffer::copyBitmapData):
        (WebCore::RGBA32Buffer::bitmap):
        (WebCore::RGBA32Buffer::setSize):
        (WebCore::RGBA32Buffer::width):
        (WebCore::RGBA32Buffer::height):
        (WebCore::RGBA32Buffer::hasAlpha):
        (WebCore::RGBA32Buffer::setStatus):
        (WebCore::RGBA32Buffer::setHasAlpha):
        (WebCore::RGBA32Buffer::setRGBA):

2009-05-05  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        - fix https://bugs.webkit.org/show_bug.cgi?id=24192
          <rdar://problem/5760774> Replying to a Mail message that contains
          fixed width text can change the size of the text

        Covered by existing tests: editing/pasteboard/5027857.html
                                   editing/pasteboard/paste-pre-002.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getFontSizeCSSValuePreferringKeyword):
        Added. If the font-size is keyword-based, returns the keyword value
        instead of the pixel size.
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue): If
        font-family is a generic family, return the generic family instead of
        the the internal string -webkit-[serif|sans-serif|cursive|fantasy
        |monospace].
        (WebCore::CSSComputedStyleDeclaration::copyInheritableProperties):
        For the font-size property, prefer a keyword value over a pixel size.
        * css/CSSComputedStyleDeclaration.h:
        * editing/ApplyStyleCommand.cpp:
        (WebCore::StyleChange::currentlyHasStyle): For the font-size property,
        call getFontSizeCSSValuePreferringKeyword().
        * platform/graphics/FontDescription.h:
        (WebCore::FontDescription::keywordSize): Changed the return type to
        unsigned.
        (WebCore::FontDescription::setKeywordSize): Changed the parameter type
        to unsigned.
        (WebCore::FontDescription::m_keywordSize): Changed the type of this
        4-bit field to unsigned, because it takes values as high as 8.

2009-05-05  Oliver Hunt  <oliver@apple.com>

        Reviewed by Maciej Stachowiak.

        Fix http/tests/misc/DOMContentLoaded-event.html

        The native call performance improvement removed a few places where we
        unintentionally performed a toThisObject conversion.  This patch updates
        the bindings codegen to not rely on this bug.

        * bindings/scripts/CodeGeneratorJS.pm:

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

        Reviewed by Xan Lopez and Gustavo Noronha.

        Implement WebCore::directoryName for Gtk+.

        * platform/gtk/FileSystemGtk.cpp:
        (WebCore::directoryName):

2009-05-05  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Roben.

        Fix mappedAttributes() access without NULL check
        https://bugs.webkit.org/show_bug.cgi?id=25553

        SVGStyledElement::getPresentationAttribute was using mappedAttributes()
        without checking for NULL.

        HTMLInputElement::setInputType also doesn't NULL check, but I was not
        able to get it to crash with a test case so I just added an ASSERT.

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::setInputType):
        * svg/SVGStyledElement.cpp:
        (WebCore::SVGStyledElement::getPresentationAttribute):

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

        Reviewed by Xan Lopez.

        Implement WebCore::imageTitle for Gtk+.

        * platform/gtk/LocalizedStringsGtk.cpp:
        (WebCore::imageTitle):

2009-05-05  Oliver Hunt  <oliver@apple.com>

        Reviewed by Gavin Barraclough.

        Bug 25559: Improve native function call performance
        <https://bugs.webkit.org/show_bug.cgi?id=25559>

        Add forwarding header necessary for compilation, and fix debugger
        to correctly account for change in JSFunction behaviour.

        * ForwardingHeaders/jit/JITCode.h: Added.
        * inspector/JavaScriptDebugServer.cpp:
        (WebCore::JavaScriptDebugServer::recompileAllJSFunctions):

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

        Reviewed by Ariya Hidayat.

        Make convertValueToQVariant more robust against null JSValues.

        Don't require the caller to do the null check.

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

2009-05-05  Eric Seidel  <eric@webkit.org>

        No review, just a revert.

        Roll out http://trac.webkit.org/changeset/43213 as it caused 4 tests to crash.

        * rendering/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::mapLocalToContainer):
        * rendering/SVGRenderSupport.cpp:
        (WebCore::SVGRenderBase::mapLocalToContainer):

2009-05-04  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Dave Hyatt.

        <rdar://problem/6576889> REGRESSION (r35185): Cannot watch Flash movies on omg.yahoo.com

        The problem was caused by missing <head> element - we used to create it when moving a
        misplaced <style> element, but we now handle those in place. Other browsers always create
        a <head> element.

        There is no guarantee that a <head> element always exists - first, it can be removed with
        removeChild or innerHTML, and also, we don't currently create it for frameset documents, or
        for manually created ones (e.g. ImageDocument).

        Test: fast/parser/head-element-for-yahoo-player.html

        * dom/Document.cpp: (WebCore::Document::implicitClose): Create a <head> element for about:blank.
        A removed comment talked about rdar://3758785, but that problem doesn't re-occur even if this
        code is removed completely.

        * html/HTMLHtmlElement.cpp: (WebCore::HTMLHtmlElement::checkDTD): No longer allow <script>
        elements as children of <html>. This isn't directly related to this bug, but it was easier
        to fix both at once (IE and Firefox both don't allow such mispositioned <script> elements).

        * html/HTMLParser.cpp:
        (WebCore::HTMLParser::handleError): Move <script> to <head> if <body> hasn't been created yet.
        Create a <head> it a <body> is created implicitly to contain some other element.
        (WebCore::HTMLParser::bodyCreateErrorCheck): Ensure that a <head> exists when <body> is
        explicitly present in source.
        (WebCore::HTMLParser::createHead): Do the work even if <html> element hasn't been created yet.

2009-05-04  Jakub Wieczorek  <faw217@gmail.com>

        Reviewed by Simon Hausmann.

        As Qtish implementation of MIMETypeRegistry::getMIMETypeForExtension()
        returns the application/octet-stream mimetype when it can't associate
        extension with any mimetype, it can happen that the application/octet-stream
        mimetype will hit the list of supported image formats. For instance,
        it is possible when QImageReader or QImageWriter support an extension
        that is not in the extensions map.

        Make sure that this mimetype is not treated as displayable image type.

        * platform/MIMETypeRegistry.cpp:
        (WebCore::initializeSupportedImageMIMETypes):
        (WebCore::initializeSupportedImageMIMETypesForEncoding):

2009-05-03  Eric Seidel  <eric@webkit.org>

        Reviewed by Simon Fraser.

        ASSERT(useTransforms) in SVG mapLocalToContainer implementations
        https://bugs.webkit.org/show_bug.cgi?id=25532

        * rendering/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::mapLocalToContainer):
        * rendering/SVGRenderSupport.cpp:
        (WebCore::SVGRenderBase::mapLocalToContainer):

2009-05-03  Eric Seidel  <eric@webkit.org>

        Reviewed by Simon Fraser.

        Remove m_absoluteBounds hack from RenderSVGText
        https://bugs.webkit.org/show_bug.cgi?id=25532

        No functional changes (SVGs inside CSS transformed HTML should theoretically repaint better)

        * rendering/RenderSVGText.cpp:
        (WebCore::RenderSVGText::layout):
        * rendering/RenderSVGText.h:

2009-05-03  Eric Seidel  <eric@webkit.org>

        Reviewed by Simon Fraser.

        Remove the vestigial calculateLocalTransform()
        https://bugs.webkit.org/show_bug.cgi?id=25532

        RenderSVGContainer is now the only render which needs this
        function, but it no longer returns the unused bool.

        calculateLocalTransform() previously was called by the DOM before
        transform updates were part of layout().

        * rendering/RenderForeignObject.cpp:
        (WebCore::RenderForeignObject::layout):
        * rendering/RenderForeignObject.h:
        (WebCore::RenderForeignObject::localTransform):
        * rendering/RenderPath.cpp:
        (WebCore::RenderPath::layout):
        * rendering/RenderPath.h:
        * rendering/RenderSVGContainer.cpp:
        * rendering/RenderSVGContainer.h:
        (WebCore::RenderSVGContainer::calculateLocalTransform):
        * rendering/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::layout):
        * rendering/RenderSVGImage.h:
        * rendering/RenderSVGText.cpp:
        (WebCore::RenderSVGText::layout):
        * rendering/RenderSVGText.h:
        * rendering/RenderSVGTransformableContainer.cpp:
        (WebCore::RenderSVGTransformableContainer::calculateLocalTransform):
        * rendering/RenderSVGTransformableContainer.h:

2009-05-03  Eric Seidel  <eric@webkit.org>

        Reviewed by Simon Fraser.

        Move more code into SVGRenderBase
        https://bugs.webkit.org/show_bug.cgi?id=25532

        clippedOverflowRectForRepaint, computeRectForRepaint and mapLocalToContainer
        are now all shared via SVGRenderBase.

        RenderForeignObject should also be sharing this code, but I've left it
        alone for now, as changing that would likely cause test changes.

        No test changes.  It's possible that transformed <svg:image> elements will
        now show up with better metrics in the inspector.

        * rendering/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::clippedOverflowRectForRepaint):
        (WebCore::RenderSVGImage::computeRectForRepaint):
        (WebCore::RenderSVGImage::mapLocalToContainer):
        * rendering/RenderSVGImage.h:
        * rendering/RenderSVGModelObject.cpp:
        (WebCore::RenderSVGModelObject::clippedOverflowRectForRepaint):
        (WebCore::RenderSVGModelObject::computeRectForRepaint):
        (WebCore::RenderSVGModelObject::mapLocalToContainer):
        * rendering/RenderSVGText.cpp:
        (WebCore::RenderSVGText::clippedOverflowRectForRepaint):
        (WebCore::RenderSVGText::computeRectForRepaint):
        (WebCore::RenderSVGText::mapLocalToContainer):
        * rendering/SVGRenderSupport.cpp:
        (WebCore::SVGRenderBase::clippedOverflowRectForRepaint):
        (WebCore::SVGRenderBase::computeRectForRepaint):
        (WebCore::SVGRenderBase::mapLocalToContainer):
        * rendering/SVGRenderSupport.h:

2009-05-03  Eric Seidel  <eric@webkit.org>

        Reviewed by Simon Fraser.

        Add SVGRenderBase to share logic between SVG renderers
        https://bugs.webkit.org/show_bug.cgi?id=25532

        I've added an SVGRenderBase base class which is shared by
        all of the SVG renders now.  This patch is just moving code
        there are no functional changes in this patch.

        Currently I've left these functions in SVGRenderSupport.h
        In a later patch I will rename SVGRenderSupport.* to SVGRenderBase.*

        clampImageBufferSizeToViewport now takes a FrameView* which makes some code easier to read.

        * rendering/RenderSVGBlock.h:
        * rendering/RenderSVGImage.h:
        * rendering/RenderSVGModelObject.h:
        * rendering/RenderSVGRoot.h:
        * rendering/SVGRenderSupport.cpp:
        (WebCore::SVGRenderBase::prepareToRenderSVGContent):
        (WebCore::SVGRenderBase::finishRenderSVGContent):
        (WebCore::clampImageBufferSizeToViewport):
        (WebCore::SVGRenderBase::computeContainerBoundingBox):
        (WebCore::SVGRenderBase::filterBoundingBoxForRenderer):
        * rendering/SVGRenderSupport.h:
        * rendering/SVGRootInlineBox.cpp:
        (WebCore::SVGRootInlineBoxPaintWalker::chunkStartCallback):
        (WebCore::SVGRootInlineBoxPaintWalker::chunkEndCallback):
        (WebCore::SVGRootInlineBox::paint):
        * svg/SVGMaskElement.cpp:
        (WebCore::SVGMaskElement::drawMaskerContent):
        * svg/SVGPatternElement.cpp:
        (WebCore::SVGPatternElement::buildPattern):
        * svg/graphics/SVGPaintServerGradient.cpp:
        (WebCore::createMaskAndSwapContextForTextGradient):
        (WebCore::clipToTextMask):

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

        Unreviewed SVG build fix.

        Include MappedAttribute.h after r43187.

        * svg/SVGComponentTransferFunctionElement.cpp:
        * svg/SVGFEBlendElement.cpp:
        * svg/SVGFEColorMatrixElement.cpp:
        * svg/SVGFEComponentTransferElement.cpp:
        * svg/SVGFECompositeElement.cpp:
        * svg/SVGFEDiffuseLightingElement.cpp:
        * svg/SVGFEDisplacementMapElement.cpp:
        * svg/SVGFEGaussianBlurElement.cpp:
        * svg/SVGFEImageElement.cpp:
        * svg/SVGFELightElement.cpp:
        * svg/SVGFEMergeNodeElement.cpp:
        * svg/SVGFEOffsetElement.cpp:
        * svg/SVGFESpecularLightingElement.cpp:
        * svg/SVGFETileElement.cpp:
        * svg/SVGFETurbulenceElement.cpp:
        * svg/SVGFilterElement.cpp:
        * svg/SVGFilterPrimitiveStandardAttributes.cpp:

2009-05-04  Brady Eidson  <beidson@apple.com>

        Reviewed by Sam 'The Belly' Weinig

        <rdar://problem/6828894> - Facebook photo uploader applet broken on Leopard only

        In r41568 we started adding a default codebase attribute to <applet> tags if they didn't specify one
        themselves.  Leopard's Java plug-in mishandles this case and fails to load code for the applet.

        The spirit of r41568 can be maintained by removing the "default codebase" piece and only performing
        the canLoad() check if a codebase was actually set on the applet tag.

        * html/HTMLAppletElement.cpp:
        (WebCore::HTMLAppletElement::createRenderer): Don't create a default codebase attribute.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::createJavaAppletWidget): Only perform the canLoad() check if the codebase was set.

2009-05-04  Adam Roben  <aroben@apple.com>

        Windows build fix

        * html/HTMLCollection.h:
        * html/HTMLFormElement.h:
        Declare CollectionCache as a struct, not a class, to match its
        definition.

2009-05-04  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Beth Dakin, Oliver Hunt.

        Bug 25557: REGRESSION: Canvas elements are ignored instead of being exposed as AXImage
        https://bugs.webkit.org/show_bug.cgi?id=25557

        Test: accessibility/canvas.html

        * page/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::accessibilityIsIgnored):
        (WebCore::AccessibilityRenderObject::roleValue):

2009-05-04  Brady Eidson  <beidson@apple.com>

        Fix an ancient Changelog entry where Sam Weinig flat out lied and confused my exploration of a bug.

        * ChangeLog

2009-05-04  Kai Brüning  <kai@granus.net>

        Reviewed by Eric Seidel.
        
        https://bugs.webkit.org/show_bug.cgi?id=24883
        24883: Bad success test in parseXMLDocumentFragment in XMLTokenizerLibxml2.cpp
        
        Fixed test whether all the chunk has been processed to correctly count utf8 bytes.

        Test: fast/innerHTML/innerHTML-nbsp.xhtml

        * dom/XMLTokenizerLibxml2.cpp:
        (WebCore::parseXMLDocumentFragment):

2009-05-04  Darin Adler  <darin@apple.com>

        Reviewed by Eric Seidel.

        Bug 24924: remove Document.h include of Attr.h and HTMLCollection.h,
        and NamedMappedAttrMap.h include of MappedAttribute.h
        https://bugs.webkit.org/show_bug.cgi?id=24924

        Make compiles faster, and debugging info smaller.

        * GNUmakefile.am: Added new source files.
        * WebCore.pro: Ditto.
        * WebCore.scons: Ditto.
        * WebCore.vcproj/WebCore.vcproj: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * WebCoreSources.bkl: Ditto.

        * bindings/js/JSHTMLCollectionCustom.cpp:
        (WebCore::toJS): Updated for new collection type names.

        * dom/Document.cpp:
        (WebCore::Document::createAttribute): Added. No longer inline.
        (WebCore::Document::images): Updated for new collection type names.
        (WebCore::Document::applets): Ditto.
        (WebCore::Document::embeds): Ditto.
        (WebCore::Document::plugins): Ditto.
        (WebCore::Document::objects): Ditto.
        (WebCore::Document::scripts): Ditto.
        (WebCore::Document::links): Ditto.
        (WebCore::Document::forms): Ditto.
        (WebCore::Document::anchors): Ditto.
        (WebCore::Document::all): Ditto.
        (WebCore::Document::windowNamedItems): Ditto.
        (WebCore::Document::documentNamedItems): Ditto.
        (WebCore::Document::nameCollectionInfo): Ditto.

        * dom/Document.h: Changed around includes and forward declarations.
        Updated for changes to collection types.

        * dom/NamedMappedAttrMap.h: Removed include of MappedAttribute.h.

        * html/CollectionCache.cpp: Copied from WebCore/html/HTMLCollection.cpp.
        Contains the class that used to be HTMLCollection::CollectionInfo.
        * html/CollectionCache.h: Copied from WebCore/html/HTMLCollection.h.
        Ditto.

        * html/CollectionType.h: Copied from WebCore/html/HTMLCollection.h.
        Has the enum that used to be HTMLCollection::Type.

        * html/HTMLCollection.cpp:
        (WebCore::HTMLCollection::HTMLCollection): Update for collection type change.
        (WebCore::HTMLCollection::create): Ditto.
        (WebCore::HTMLCollection::resetCollectionInfo): Ditto.
        (WebCore::HTMLCollection::itemAfter): Ditto.
        * html/HTMLCollection.h: Ditto.

        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::children): Updated for new collection type names.
        * html/HTMLFormCollection.cpp:
        (WebCore::HTMLFormCollection::formCollectionInfo): Ditto.
        (WebCore::HTMLFormCollection::HTMLFormCollection): Ditto.
        * html/HTMLFormCollection.h: Ditto.
        * html/HTMLFormElement.h: Ditto.
        * html/HTMLMapElement.cpp:
        (WebCore::HTMLMapElement::areas): Ditto.
        * html/HTMLNameCollection.cpp:
        (WebCore::HTMLNameCollection::HTMLNameCollection): Ditto.
        * html/HTMLNameCollection.h:
        (WebCore::HTMLNameCollection::create): Ditto.
        * html/HTMLSelectElement.h:
        (WebCore::HTMLSelectElement::collectionInfo): Ditto.
        * html/HTMLTableElement.cpp:
        (WebCore::HTMLTableElement::tBodies):Ditto.
        * html/HTMLTableRowElement.cpp:
        (WebCore::HTMLTableRowElement::cells):Ditto.
        * html/HTMLTableRowsCollection.cpp:
        (WebCore::HTMLTableRowsCollection::HTMLTableRowsCollection): Ditto.
        * html/HTMLTableSectionElement.cpp:
        (WebCore::HTMLTableSectionElement::rows): Ditto.

        * bindings/js/JSDOMWindowBase.cpp: Added newly-needed includes.
        * bindings/js/JSHTMLFrameSetElementCustom.cpp: Ditto.
        * css/CSSStyleSelector.cpp: Ditto.
        * dom/Element.cpp: Ditto.
        * dom/InputElement.cpp: Ditto.
        * dom/NamedAttrMap.cpp: Ditto.
        * dom/NamedMappedAttrMap.cpp: Ditto.
        * dom/Node.cpp: Ditto.
        * dom/StyledElement.cpp: Ditto.
        * dom/StyledElement.h: Ditto.
        * editing/ApplyStyleCommand.cpp: Ditto.
        * editing/DeleteSelectionCommand.cpp: Ditto.
        * editing/Editor.cpp: Ditto.
        * editing/EditorCommand.cpp: Ditto.
        * editing/InsertParagraphSeparatorCommand.cpp: Ditto.
        * editing/ReplaceSelectionCommand.cpp: Ditto.
        * editing/markup.cpp: Ditto.
        * html/CanvasRenderingContext2D.cpp: Ditto.
        * html/HTMLAnchorElement.cpp: Ditto.
        * html/HTMLAppletElement.cpp: Ditto.
        * html/HTMLAreaElement.cpp: Ditto.
        * html/HTMLBRElement.cpp: Ditto.
        * html/HTMLBaseElement.cpp: Ditto.
        * html/HTMLBodyElement.cpp: Ditto.
        * html/HTMLButtonElement.cpp: Ditto.
        * html/HTMLCanvasElement.cpp: Ditto.
        * html/HTMLDivElement.cpp: Ditto.
        * html/HTMLEmbedElement.cpp: Ditto.
        * html/HTMLFontElement.cpp: Ditto.
        * html/HTMLFormControlElement.cpp: Ditto.
        * html/HTMLFormElement.cpp: Ditto.
        * html/HTMLFrameElement.cpp: Ditto.
        * html/HTMLFrameElementBase.cpp: Ditto.
        * html/HTMLFrameSetElement.cpp: Ditto.
        * html/HTMLHRElement.cpp: Ditto.
        * html/HTMLIFrameElement.cpp: Ditto.
        * html/HTMLImageElement.cpp: Ditto.
        * html/HTMLInputElement.cpp: Ditto.
        * html/HTMLIsIndexElement.cpp: Ditto.
        * html/HTMLKeygenElement.cpp: Ditto.
        * html/HTMLLIElement.cpp: Ditto.
        * html/HTMLLinkElement.cpp: Ditto.
        * html/HTMLMarqueeElement.cpp: Ditto.
        * html/HTMLMetaElement.cpp: Ditto.
        * html/HTMLOListElement.cpp: Ditto.
        * html/HTMLObjectElement.cpp: Ditto.
        * html/HTMLOptionElement.cpp: Ditto.
        * html/HTMLParagraphElement.cpp: Ditto.
        * html/HTMLParamElement.cpp: Ditto.
        * html/HTMLPlugInElement.cpp: Ditto.
        * html/HTMLPreElement.cpp: Ditto.
        * html/HTMLScriptElement.cpp: Ditto.
        * html/HTMLSelectElement.cpp: Ditto.
        * html/HTMLStyleElement.cpp: Ditto.
        * html/HTMLTableCaptionElement.cpp: Ditto.
        * html/HTMLTableCellElement.cpp: Ditto.
        * html/HTMLTableColElement.cpp: Ditto.
        * html/HTMLTablePartElement.cpp: Ditto.
        * html/HTMLTextAreaElement.cpp: Ditto.
        * html/HTMLTokenizer.cpp: Ditto.
        * html/HTMLUListElement.cpp: Ditto.
        * html/HTMLVideoElement.cpp: Ditto.
        * html/HTMLViewSourceDocument.cpp: Ditto.
        * loader/ImageDocument.cpp: Ditto.
        * page/Frame.cpp: Ditto.
        * rendering/RenderTreeAsText.cpp: Ditto.
        * svg/SVGAElement.cpp: Ditto.
        * svg/SVGAnimateMotionElement.cpp: Ditto.
        * svg/SVGAnimateTransformElement.cpp: Ditto.
        * svg/SVGAnimationElement.cpp: Ditto.
        * svg/SVGCircleElement.cpp: Ditto.
        * svg/SVGClipPathElement.cpp: Ditto.
        * svg/SVGCursorElement.cpp: Ditto.
        * svg/SVGElement.cpp: Ditto.
        * svg/SVGEllipseElement.cpp: Ditto.
        * svg/SVGExternalResourcesRequired.cpp: Ditto.
        * svg/SVGFitToViewBox.cpp: Ditto.
        * svg/SVGFontFaceElement.cpp: Ditto.
        * svg/SVGFontFaceUriElement.cpp: Ditto.
        * svg/SVGForeignObjectElement.cpp: Ditto.
        * svg/SVGGlyphElement.cpp: Ditto.
        * svg/SVGGradientElement.cpp: Ditto.
        * svg/SVGImageElement.cpp: Ditto.
        * svg/SVGLangSpace.cpp: Ditto.
        * svg/SVGLineElement.cpp: Ditto.
        * svg/SVGLinearGradientElement.cpp: Ditto.
        * svg/SVGMarkerElement.cpp: Ditto.
        * svg/SVGMaskElement.cpp: Ditto.
        * svg/SVGPathElement.cpp: Ditto.
        * svg/SVGPatternElement.cpp: Ditto.
        * svg/SVGPolyElement.cpp: Ditto.
        * svg/SVGRadialGradientElement.cpp: Ditto.
        * svg/SVGRectElement.cpp: Ditto.
        * svg/SVGSVGElement.cpp: Ditto.
        * svg/SVGScriptElement.cpp: Ditto.
        * svg/SVGStopElement.cpp: Ditto.
        * svg/SVGStyleElement.cpp: Ditto.
        * svg/SVGStyledElement.cpp: Ditto.
        * svg/SVGStyledTransformableElement.cpp: Ditto.
        * svg/SVGTests.cpp: Ditto.
        * svg/SVGTextContentElement.cpp: Ditto.
        * svg/SVGTextElement.cpp: Ditto.
        * svg/SVGTextPathElement.cpp: Ditto.
        * svg/SVGTextPositioningElement.cpp: Ditto.
        * svg/SVGURIReference.cpp: Ditto.
        * svg/SVGUseElement.cpp: Ditto.
        * svg/SVGViewElement.cpp: Ditto.
        * svg/animation/SVGSMILElement.cpp: Ditto.
        * xml/XPathStep.cpp: Ditto.

2009-05-04  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Do not instantiate hidden WebInspector panels. Otherwise they are hitting unimplemented InspectorController methods.
        https://bugs.webkit.org/show_bug.cgi?id=25520

        * inspector/front-end/inspector.js:
        (WebInspector.loaded):

2009-05-04  Brady Eidson <beidson@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/6839881> With "Mail Contents of This Page" in Safari images don't appear in the Tiger Mail compose window

        DocumentLoader::subresource() is the implementation for the WebKit API [WebDataSource subresourceForURL:] and has 
        particularly sticky behavior.  

        If the DocumentLoader represents a WebArchive, this method should return ArchiveResources from that archive.  However, we 
        prefer CachedResources over ArchiveResources because they might represent fresher data than what was originally loaded 
        from the WebArchive.

        In some instances, CachedResources are created and associated with the DocumentLoader but not immediately run through the 
        loading delegate machinery.  This was always a possibility, but the Preload Scanner made this significantly more likely.

        When this happens and someone asks the WebDataSource for a subresource, it would prefer the CachedResource over an 
        ArchiveResource it has even if the CachedResource hasn't been loaded yet.  The CachedResource has nil data, so no
        WebResource is returned, and the client thinks the subresource doesn't exist even though it does.

        This broke Tiger Mail and probably various other WebKit applications but has a fairly straightforward fix.

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::subresource): If there is a CachedResource but it hasn't been loaded yet, fallback to the
          ArchiveResource.

2009-05-04  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Adam Roben.
        
        https://bugs.webkit.org/show_bug.cgi?id=25545
        Bug 25545: HTMLMediaElement: display anamorphic video correctly
        
        Tell QuickTime to use clean aperture mode so movies with non-square pixels are sized
        and displayed correctly.

        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivate::createQTMovie): Ask QuickTime to use clean aperture mode.
        * platform/graphics/win/QTMovieWin.cpp:
        (QTMovieWin::load): Ditto. Add ASSERT to ensure that static movie property array isn't 
        filled beyond capacity.

2009-05-03  Mark Rowe  <mrowe@apple.com>

        Reviewed by Darin Adler.

        Fix <https://bugs.webkit.org/show_bug.cgi?id=25332>.
        Bug 25332: Plug-in inserted in to DOM of PluginDocument fails to load

        Only the first plug-in in a PluginDocument can use the main resource data.  For all
        subsequent plug-ins, such as the plug-in that ClickToFlash inserts when swapping itself
        out for the real Flash plug-in, we need to load the resource data in the same manner
        as for other embedded plug-ins.

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

2009-05-04  Simon Hausmann  <simon.hausmann@nokia.com>

        Rubber-stamped by Ariya Hidayat.

        Update the qrc file for the Web Inspector in the Qt build
        with missing files.

        * inspector/front-end/WebKit.qrc:

2009-05-03  Eric Seidel  <eric@webkit.org>

        Reviewed by George Staikos.

        Move absoluteRects and absoluteQuads into RenderSVGInline and remove absoluteTransform() usage
        https://bugs.webkit.org/show_bug.cgi?id=25532

        * rendering/RenderSVGInline.cpp:
        (WebCore::RenderSVGInline::absoluteRects):
        (WebCore::RenderSVGInline::absoluteQuads):
        * rendering/RenderSVGInline.h:
        * rendering/RenderSVGTSpan.cpp:
        * rendering/RenderSVGTSpan.h:
        * rendering/RenderSVGTextPath.cpp:
        * rendering/RenderSVGTextPath.h:

2009-05-03  Eric Seidel  <eric@webkit.org>

        Reviewed by George Staikos.

        Move RenderSVGText off of localToAbsolute()
        https://bugs.webkit.org/show_bug.cgi?id=25532

        * rendering/RenderSVGText.cpp:
        (WebCore::RenderSVGText::absoluteRects):
        (WebCore::RenderSVGText::absoluteQuads):

2009-05-03  Eric Seidel  <eric@webkit.org>

        Reviewed by George Staikos.

        Remove broken absoluteTransform() code from RenderSVGInlineText
        https://bugs.webkit.org/show_bug.cgi?id=25532

        This improved SVG text focus rings.
        This also improved SVG.getScreenCTM() results.

        SVGSVGElement::getScreenCTM was passing "true" for the second argument in
        localToAbsolute, which is "fixed" it meant to pass "true" for the
        third argument (useTransforms).  That change alone caused no layout test changes, however
        before I fixed this, it was hitting ASSERT(!fixed) in RenderSVGRoot::mapLocalToContainer

        mapLocalToContainer implementations really should be shared,
        but I'll do that in a later patch.

        * rendering/RenderSVGInlineText.cpp:
        (WebCore::RenderSVGInlineText::styleDidChange):
        (WebCore::RenderSVGInlineText::absoluteQuads):
        (WebCore::RenderSVGInlineText::computeRepaintRectForRange):
        (WebCore::RenderSVGInlineText::computeRepaintQuadForRange):
        * rendering/RenderSVGInlineText.h:
        * rendering/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::mapLocalToContainer):
        * rendering/RenderSVGRoot.h:
        * rendering/RenderSVGText.cpp:
        (WebCore::RenderSVGText::mapLocalToContainer):
        * rendering/RenderSVGText.h:
        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::getScreenCTM):

2009-05-03  Eric Seidel  <eric@webkit.org>

        Reviewed by George Staikos.

        Remove dead code from RenderPath
        https://bugs.webkit.org/show_bug.cgi?id=25532

        * rendering/RenderPath.cpp:
        * rendering/RenderPath.h:

2009-05-03  Eric Seidel  <eric@webkit.org>

        Reviewed by George Staikos.

        Share layout code between RenderSVGViewportContainer and RenderSVGContainer
        https://bugs.webkit.org/show_bug.cgi?id=25532

        * rendering/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::layout):
        * rendering/RenderSVGContainer.h:
        (WebCore::RenderSVGContainer::calcViewport):
        * rendering/RenderSVGViewportContainer.cpp:
        (WebCore::RenderSVGViewportContainer::applyViewportClip):
        * rendering/RenderSVGViewportContainer.h:

2009-05-03  Eric Seidel  <eric@webkit.org>

        Reviewed by George Staikos.

        Remove redundant disableLayoutState() calls
        https://bugs.webkit.org/show_bug.cgi?id=25532

        * rendering/RenderForeignObject.cpp:
        (WebCore::RenderForeignObject::layout):
        * rendering/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::layout):
        * rendering/RenderSVGViewportContainer.cpp:
        (WebCore::RenderSVGViewportContainer::layout):

2009-05-03  Eric Seidel  <eric@webkit.org>

        Reviewed by George Staikos.

        Simplify RenderForeignObject::paint and fix a repaint bug.
        Paint now calls applyTransformToPaintInfo which correctly transforms the damage rect.
        https://bugs.webkit.org/show_bug.cgi?id=16939

        * rendering/RenderForeignObject.cpp:
        (WebCore::RenderForeignObject::paint):

2009-05-03  Hironori Bono  <hbono@chromium.org>

        Reviewed by Eric Seidel.

        Test: editing/spelling/spellcheck-attribute.html

        Bug 14552: Add a way to disable spell checking for specific element
        https://bugs.webkit.org/show_bug.cgi?id=14552

        For compatibility with Firefox, this code ascends the DOM tree when an element does
        not have its "spellcheck" attribute.

        * editing/Editor.cpp:
        (WebCore::markMisspellingsOrBadGrammar): Retrieve the value of the "spellcheck"
        attribute of an element before calling a spell checker or a grammar checker.
        * html/HTMLAttributeNames.in: Add a "spellcheck" attribute.

2009-05-03  Sam Weinig  <sam@webkit.org>

        Roll JSC API number marshaling back in one last time (I hope).

2009-05-03  Sam Weinig  <sam@webkit.org>

        Roll JSC API number marshaling back out. It still breaks windows.

2009-05-03  Sam Weinig  <sam@webkit.org>

        Roll JSC API number marshaling back in.

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

        Reviewed by Darin Adler.

        - another fix for <rdar://problem/6617298> Typing delete on an unquoted
          blank line unquotes the preceding, quoted blank line

        Test: editing/deleting/type-delete-after-quote-2.html

        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::DeleteSelectionCommand): Initialize
        m_startsAtEmptyLine.
        (WebCore::DeleteSelectionCommand::handleSpecialCaseBRDelete): When the
        selection starts at an empty line, do not prevent the merging of blocks.
        This is what allows the text after the line break to be merged into the
        block containing the line break. Also set m_startsAtEmptyLine to true.
        (WebCore::DeleteSelectionCommand::mergeParagraphs): If
        m_startsAtEmptyLine is true, create a placeholder BR to serve as the
        merge destination.
        * editing/DeleteSelectionCommand.h:

2009-05-02  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig.

        Simplified null-ish JSValues.
        
        Replaced calls to noValue() with calls to JSValue() (which is what
        noValue() returned). Removed noValue().
        
        Removed "JSValue()" initialiazers, since default construction happens...
        by default.

        * bindings/js/JSDOMBinding.cpp:
        (WebCore::setDOMException):
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::open):
        (WebCore::JSDOMWindow::showModalDialog):
        * bindings/js/JSEventListener.cpp:
        (WebCore::JSEventListener::handleEvent):
        * bindings/js/JSJavaScriptCallFrameCustom.cpp:
        (WebCore::JSJavaScriptCallFrame::evaluate):
        * bindings/js/JSSQLResultSetRowListCustom.cpp:
        (WebCore::JSSQLResultSetRowList::item):
        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::evaluate):
        * bindings/js/ScriptValue.h:
        (WebCore::ScriptValue::ScriptValue):
        (WebCore::ScriptValue::hasNoValue):
        * bindings/js/WorkerScriptController.cpp:
        (WebCore::WorkerScriptController::evaluate):
        * bridge/jni/jni_instance.cpp:
        (JavaInstance::invokeMethod):
        * bridge/jni/jni_runtime.cpp:
        (JavaField::dispatchValueFromInstance):
        (JavaField::dispatchSetValueToInstance):
        * bridge/runtime.h:
        (JSC::Bindings::Instance::invokeConstruct):

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

        Reviewed by Dan Bernstein.

        <rdar://problem/6631735> Crash in WebCore::CSSStyleSelector::applyProperty(int, WebCore::CSSValue*) (RenderStyle.h:454)
        
        Avoid re-entering style selector from load delegates by not issuing resource loads synchronously during attach().

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::suspendPostAttachCallbacks):
        (WebCore::ContainerNode::resumePostAttachCallbacks):
        (WebCore::ContainerNode::attach):
        * dom/Element.cpp:
        (WebCore::Element::attach):
        * loader/loader.cpp:
        (WebCore::Loader::Loader):
        (WebCore::Loader::servePendingRequests):
        (WebCore::Loader::suspendPendingRequests):
        (WebCore::Loader::resumePendingRequests):
        (WebCore::Loader::Host::servePendingRequests):
        * loader/loader.h:
        (WebCore::Loader::isSuspendingPendingRequests):

2009-05-02  Darin Adler  <darin@apple.com>

        Reviewed by Dan Bernstein.

        Bug 25352: REGRESSION(r42322): style isn't applied at bmwusa.com
        https://bugs.webkit.org/show_bug.cgi?id=25352
        rdar://problem/6823239

        Test: http/tests/mime/standard-mode-loads-stylesheet-with-text-css-and-invalid-type.html

        * platform/network/HTTPParsers.cpp:
        (WebCore::extractMIMETypeFromMediaType): Allow comma as a separator.

2009-05-02  Darin Adler  <darin@apple.com>

        Reviewed by Brady Eidson.

        Bug 25491: WebFrame leak when a subframe removes itself
        https://bugs.webkit.org/show_bug.cgi?id=25491
        rdar://problem/6833859

        Test: fast/loading/subframe-removes-itself.html

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::checkLoadCompleteForThisFrame): When isStopping is true,
        treat load as complete, even if isLoadingInAPISense is still returning true.

2009-05-01  Sam Weinig  <sam@webkit.org>

        Roll out JavaScriptCore API number marshaling.

        * bindings/js/ScriptValue.cpp:
        (WebCore::ScriptValue::isEqual):
        * inspector/JavaScriptProfile.cpp:
        (WebCore::getHeadCallback):
        * inspector/JavaScriptProfileNode.cpp:
        (WebCore::getChildren):
        (WebCore::getParent):
        (WebCore::getHead):

2009-05-01  Sam Weinig  <sam@webkit.org>

        Fix build.

        * workers/WorkerContext.idl:

2009-05-01  Sam Weinig  <sam@webkit.org>

        Reviewed by Oliver Hunt.

        Cleanup workers code a bit.

        * bindings/js/JSWorkerContextBase.cpp:
        (WebCore::toJS):
        * bindings/js/JSWorkerContextBase.h:
        * bindings/js/JSWorkerContextCustom.cpp:
        (WebCore::JSWorkerContext::customGetOwnPropertySlot):
        * workers/WorkerContext.h:
        (WebCore::WorkerContext::toWorkerContext):
        (WebCore::WorkerContext::self):
        (WebCore::WorkerContext::setOnmessage):
        (WebCore::WorkerContext::onmessage):
        * workers/WorkerContext.idl:

2009-05-01  Sam Weinig  <sam@webkit.org>

        Reviewed by Darin Adler.

        A little clean up.

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

2009-05-01  Sam Weinig  <sam@webkit.org>

        Fix the build.

        * bindings/js/ScriptValue.cpp:
        (WebCore::ScriptValue::isEqual):
        * inspector/JavaScriptProfile.cpp:
        (WebCore::getHeadCallback):
        * inspector/JavaScriptProfileNode.cpp:
        (WebCore::getChildren):
        (WebCore::getParent):
        (WebCore::getHead):

2009-05-01  Brady Eidson  <beidson@apple.com>

        Reviewed by Oliver Hunt and Sam "Jon 'The Belly' Honeycutt" Weinig

        Fix <rdar://problem/6848867> Addition of DOCTYPE node breaks Tiger Mail

        * bindings/objc/DOMHTML.mm:
        (-[DOMHTMLDocument firstChild]): Add a Tiger Mail version of this method that skips DOCTYPE nodes.

2009-05-01  Geoffrey Garen  <ggaren@apple.com>

        Rubber Stamped by Sam Weinig.
        
        Renamed JSValuePtr => JSValue.

        * bindings/js/JSAttrCustom.cpp:
        (WebCore::JSAttr::setValue):
        * bindings/js/JSCDATASectionCustom.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/js/JSCSSRuleCustom.cpp:
        (WebCore::toJS):
        * bindings/js/JSCSSStyleDeclarationCustom.cpp:
        (WebCore::JSCSSStyleDeclaration::nameGetter):
        (WebCore::JSCSSStyleDeclaration::customPut):
        * bindings/js/JSCSSValueCustom.cpp:
        (WebCore::toJS):
        * bindings/js/JSCanvasRenderingContext2DCustom.cpp:
        (WebCore::toJS):
        (WebCore::toHTMLCanvasStyle):
        (WebCore::JSCanvasRenderingContext2D::strokeStyle):
        (WebCore::JSCanvasRenderingContext2D::setStrokeStyle):
        (WebCore::JSCanvasRenderingContext2D::fillStyle):
        (WebCore::JSCanvasRenderingContext2D::setFillStyle):
        (WebCore::JSCanvasRenderingContext2D::setFillColor):
        (WebCore::JSCanvasRenderingContext2D::setStrokeColor):
        (WebCore::JSCanvasRenderingContext2D::strokeRect):
        (WebCore::JSCanvasRenderingContext2D::drawImage):
        (WebCore::JSCanvasRenderingContext2D::drawImageFromRect):
        (WebCore::JSCanvasRenderingContext2D::setShadow):
        (WebCore::JSCanvasRenderingContext2D::createPattern):
        (WebCore::JSCanvasRenderingContext2D::putImageData):
        (WebCore::JSCanvasRenderingContext2D::fillText):
        (WebCore::JSCanvasRenderingContext2D::strokeText):
        * bindings/js/JSClipboardCustom.cpp:
        (WebCore::JSClipboard::types):
        (WebCore::JSClipboard::clearData):
        (WebCore::JSClipboard::getData):
        (WebCore::JSClipboard::setData):
        (WebCore::JSClipboard::setDragImage):
        * bindings/js/JSConsoleCustom.cpp:
        (WebCore::JSConsole::profiles):
        * bindings/js/JSCoordinatesCustom.cpp:
        (WebCore::JSCoordinates::altitude):
        (WebCore::JSCoordinates::altitudeAccuracy):
        (WebCore::JSCoordinates::heading):
        (WebCore::JSCoordinates::speed):
        * bindings/js/JSCustomPositionCallback.cpp:
        (WebCore::JSCustomPositionCallback::handleEvent):
        * bindings/js/JSCustomPositionErrorCallback.cpp:
        (WebCore::JSCustomPositionErrorCallback::handleEvent):
        * bindings/js/JSCustomSQLStatementCallback.cpp:
        (WebCore::JSCustomSQLStatementCallback::handleEvent):
        * bindings/js/JSCustomSQLStatementErrorCallback.cpp:
        (WebCore::JSCustomSQLStatementErrorCallback::handleEvent):
        * bindings/js/JSCustomSQLTransactionCallback.cpp:
        (WebCore::JSCustomSQLTransactionCallback::handleEvent):
        * bindings/js/JSCustomSQLTransactionErrorCallback.cpp:
        (WebCore::JSCustomSQLTransactionErrorCallback::handleEvent):
        * bindings/js/JSCustomVoidCallback.cpp:
        (WebCore::JSCustomVoidCallback::handleEvent):
        (WebCore::toVoidCallback):
        * bindings/js/JSCustomVoidCallback.h:
        * bindings/js/JSCustomXPathNSResolver.cpp:
        (WebCore::JSCustomXPathNSResolver::create):
        (WebCore::JSCustomXPathNSResolver::lookupNamespaceURI):
        * bindings/js/JSCustomXPathNSResolver.h:
        * bindings/js/JSDOMApplicationCacheCustom.cpp:
        (WebCore::JSDOMApplicationCache::hasItem):
        (WebCore::JSDOMApplicationCache::add):
        (WebCore::JSDOMApplicationCache::remove):
        (WebCore::JSDOMApplicationCache::addEventListener):
        (WebCore::JSDOMApplicationCache::removeEventListener):
        * bindings/js/JSDOMBinding.cpp:
        (WebCore::jsStringOrNull):
        (WebCore::jsOwnedStringOrNull):
        (WebCore::jsStringOrUndefined):
        (WebCore::jsStringOrFalse):
        (WebCore::valueToStringWithNullCheck):
        (WebCore::valueToStringWithUndefinedOrNullCheck):
        (WebCore::reportException):
        (WebCore::reportCurrentException):
        (WebCore::setDOMException):
        (WebCore::objectToStringFunctionGetter):
        * bindings/js/JSDOMBinding.h:
        (WebCore::getDOMObjectWrapper):
        (WebCore::getDOMNodeWrapper):
        (WebCore::toJS):
        * bindings/js/JSDOMGlobalObject.cpp:
        (WebCore::JSDOMGlobalObject::findJSEventListener):
        (WebCore::JSDOMGlobalObject::findOrCreateJSEventListener):
        (WebCore::JSDOMGlobalObject::createJSAttributeEventListener):
        * bindings/js/JSDOMGlobalObject.h:
        * bindings/js/JSDOMStringListCustom.cpp:
        (WebCore::JSDOMStringList::getByIndex):
        (WebCore::JSDOMStringList::item):
        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::childFrameGetter):
        (WebCore::JSDOMWindowBase::indexGetter):
        (WebCore::JSDOMWindowBase::namedItemGetter):
        (WebCore::JSDOMWindowBase::getOwnPropertySlot):
        (WebCore::JSDOMWindowBase::put):
        (WebCore::JSDOMWindowBase::setReturnValueSlot):
        (WebCore::toJS):
        (WebCore::toJSDOMWindow):
        * bindings/js/JSDOMWindowBase.h:
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::lookupGetter):
        (WebCore::JSDOMWindow::lookupSetter):
        (WebCore::JSDOMWindow::history):
        (WebCore::JSDOMWindow::location):
        (WebCore::JSDOMWindow::setLocation):
        (WebCore::JSDOMWindow::crypto):
        (WebCore::JSDOMWindow::event):
        (WebCore::JSDOMWindow::image):
        (WebCore::JSDOMWindow::option):
        (WebCore::JSDOMWindow::audio):
        (WebCore::JSDOMWindow::webKitPoint):
        (WebCore::JSDOMWindow::webKitCSSMatrix):
        (WebCore::JSDOMWindow::xmlHttpRequest):
        (WebCore::JSDOMWindow::xsltProcessor):
        (WebCore::JSDOMWindow::messageChannel):
        (WebCore::JSDOMWindow::worker):
        (WebCore::createWindow):
        (WebCore::JSDOMWindow::open):
        (WebCore::JSDOMWindow::showModalDialog):
        (WebCore::JSDOMWindow::postMessage):
        (WebCore::JSDOMWindow::setTimeout):
        (WebCore::JSDOMWindow::setInterval):
        (WebCore::JSDOMWindow::atob):
        (WebCore::JSDOMWindow::btoa):
        (WebCore::JSDOMWindow::addEventListener):
        (WebCore::JSDOMWindow::removeEventListener):
        (WebCore::toDOMWindow):
        * bindings/js/JSDOMWindowCustom.h:
        (WebCore::nonCachingStaticFunctionGetter):
        (WebCore::JSDOMWindow::customPut):
        * bindings/js/JSDOMWindowShell.cpp:
        (WebCore::JSDOMWindowShell::put):
        (WebCore::JSDOMWindowShell::putWithAttributes):
        (WebCore::JSDOMWindowShell::lookupGetter):
        (WebCore::JSDOMWindowShell::lookupSetter):
        (WebCore::toJS):
        * bindings/js/JSDOMWindowShell.h:
        (WebCore::JSDOMWindowShell::createStructure):
        * bindings/js/JSDatabaseCustom.cpp:
        (WebCore::JSDatabase::changeVersion):
        (WebCore::JSDatabase::transaction):
        * bindings/js/JSDocumentCustom.cpp:
        (WebCore::JSDocument::location):
        (WebCore::JSDocument::setLocation):
        (WebCore::toJS):
        * bindings/js/JSElementCustom.cpp:
        (WebCore::JSElement::setAttribute):
        (WebCore::JSElement::setAttributeNode):
        (WebCore::JSElement::setAttributeNS):
        (WebCore::JSElement::setAttributeNodeNS):
        (WebCore::toJSNewlyCreated):
        * bindings/js/JSEventCustom.cpp:
        (WebCore::JSEvent::clipboardData):
        (WebCore::toJS):
        * bindings/js/JSEventListener.cpp:
        (WebCore::JSEventListener::handleEvent):
        * bindings/js/JSEventTarget.cpp:
        (WebCore::toJS):
        (WebCore::toEventTarget):
        * bindings/js/JSEventTarget.h:
        * bindings/js/JSEventTargetBase.h:
        * bindings/js/JSGeolocationCustom.cpp:
        (WebCore::createPositionOptions):
        (WebCore::JSGeolocation::getCurrentPosition):
        (WebCore::JSGeolocation::watchPosition):
        * bindings/js/JSHTMLAllCollection.h:
        (WebCore::JSHTMLAllCollection::createStructure):
        * bindings/js/JSHTMLAppletElementCustom.cpp:
        (WebCore::JSHTMLAppletElement::customPut):
        (WebCore::JSHTMLAppletElement::nameGetter):
        * bindings/js/JSHTMLCollectionCustom.cpp:
        (WebCore::getNamedItems):
        (WebCore::callHTMLCollection):
        (WebCore::JSHTMLCollection::nameGetter):
        (WebCore::JSHTMLCollection::item):
        (WebCore::JSHTMLCollection::namedItem):
        (WebCore::toJS):
        * bindings/js/JSHTMLDocumentCustom.cpp:
        (WebCore::JSHTMLDocument::nameGetter):
        (WebCore::JSHTMLDocument::all):
        (WebCore::JSHTMLDocument::setAll):
        (WebCore::JSHTMLDocument::open):
        (WebCore::JSHTMLDocument::write):
        (WebCore::JSHTMLDocument::writeln):
        * bindings/js/JSHTMLEmbedElementCustom.cpp:
        (WebCore::JSHTMLEmbedElement::customPut):
        (WebCore::JSHTMLEmbedElement::nameGetter):
        * bindings/js/JSHTMLFormElementCustom.cpp:
        (WebCore::JSHTMLFormElement::nameGetter):
        (WebCore::JSHTMLFormElement::submit):
        * bindings/js/JSHTMLFrameElementCustom.cpp:
        (WebCore::JSHTMLFrameElement::setSrc):
        (WebCore::JSHTMLFrameElement::setLocation):
        * bindings/js/JSHTMLFrameSetElementCustom.cpp:
        (WebCore::JSHTMLFrameSetElement::nameGetter):
        * bindings/js/JSHTMLIFrameElementCustom.cpp:
        (WebCore::JSHTMLIFrameElement::setSrc):
        * bindings/js/JSHTMLInputElementCustom.cpp:
        (WebCore::JSHTMLInputElement::selectionStart):
        (WebCore::JSHTMLInputElement::setSelectionStart):
        (WebCore::JSHTMLInputElement::selectionEnd):
        (WebCore::JSHTMLInputElement::setSelectionEnd):
        (WebCore::JSHTMLInputElement::setSelectionRange):
        * bindings/js/JSHTMLObjectElementCustom.cpp:
        (WebCore::JSHTMLObjectElement::customPut):
        (WebCore::JSHTMLObjectElement::nameGetter):
        * bindings/js/JSHTMLOptionsCollectionCustom.cpp:
        (WebCore::JSHTMLOptionsCollection::length):
        (WebCore::JSHTMLOptionsCollection::setLength):
        (WebCore::JSHTMLOptionsCollection::indexSetter):
        (WebCore::JSHTMLOptionsCollection::add):
        (WebCore::JSHTMLOptionsCollection::remove):
        * bindings/js/JSHTMLSelectElementCustom.cpp:
        (WebCore::JSHTMLSelectElement::remove):
        (WebCore::selectIndexSetter):
        (WebCore::JSHTMLSelectElement::indexSetter):
        * bindings/js/JSHTMLSelectElementCustom.h:
        * bindings/js/JSHistoryCustom.cpp:
        (WebCore::nonCachingStaticBackFunctionGetter):
        (WebCore::nonCachingStaticForwardFunctionGetter):
        (WebCore::nonCachingStaticGoFunctionGetter):
        (WebCore::JSHistory::customPut):
        * bindings/js/JSImageDataCustom.cpp:
        (WebCore::toJS):
        * bindings/js/JSInspectedObjectWrapper.cpp:
        (WebCore::JSInspectedObjectWrapper::wrap):
        (WebCore::JSInspectedObjectWrapper::prepareIncomingValue):
        * bindings/js/JSInspectedObjectWrapper.h:
        (WebCore::JSInspectedObjectWrapper::wrapOutgoingValue):
        * bindings/js/JSInspectorCallbackWrapper.cpp:
        (WebCore::JSInspectorCallbackWrapper::wrap):
        (WebCore::JSInspectorCallbackWrapper::prepareIncomingValue):
        * bindings/js/JSInspectorCallbackWrapper.h:
        (WebCore::JSInspectorCallbackWrapper::wrapOutgoingValue):
        * bindings/js/JSInspectorControllerCustom.cpp:
        (WebCore::JSInspectorController::highlightDOMNode):
        (WebCore::JSInspectorController::addResourceSourceToFrame):
        (WebCore::JSInspectorController::addSourceToFrame):
        (WebCore::JSInspectorController::getResourceDocumentNode):
        (WebCore::JSInspectorController::search):
        (WebCore::JSInspectorController::databaseTableNames):
        (WebCore::JSInspectorController::inspectedWindow):
        (WebCore::JSInspectorController::setting):
        (WebCore::JSInspectorController::setSetting):
        (WebCore::JSInspectorController::wrapCallback):
        (WebCore::JSInspectorController::currentCallFrame):
        (WebCore::JSInspectorController::profiles):
        * bindings/js/JSJavaScriptCallFrameCustom.cpp:
        (WebCore::JSJavaScriptCallFrame::evaluate):
        (WebCore::JSJavaScriptCallFrame::thisObject):
        (WebCore::JSJavaScriptCallFrame::type):
        (WebCore::JSJavaScriptCallFrame::scopeChain):
        * bindings/js/JSLazyEventListener.cpp:
        (WebCore::JSLazyEventListener::parseCode):
        * bindings/js/JSLocationCustom.cpp:
        (WebCore::nonCachingStaticReplaceFunctionGetter):
        (WebCore::nonCachingStaticReloadFunctionGetter):
        (WebCore::nonCachingStaticAssignFunctionGetter):
        (WebCore::JSLocation::customPut):
        (WebCore::JSLocation::setHref):
        (WebCore::JSLocation::setProtocol):
        (WebCore::JSLocation::setHost):
        (WebCore::JSLocation::setHostname):
        (WebCore::JSLocation::setPort):
        (WebCore::JSLocation::setPathname):
        (WebCore::JSLocation::setSearch):
        (WebCore::JSLocation::setHash):
        (WebCore::JSLocation::replace):
        (WebCore::JSLocation::reload):
        (WebCore::JSLocation::assign):
        (WebCore::JSLocation::toString):
        (WebCore::JSLocationPrototype::customPut):
        * bindings/js/JSMessagePortCustom.cpp:
        (WebCore::JSMessagePort::startConversation):
        (WebCore::JSMessagePort::addEventListener):
        (WebCore::JSMessagePort::removeEventListener):
        * bindings/js/JSMimeTypeArrayCustom.cpp:
        (WebCore::JSMimeTypeArray::nameGetter):
        * bindings/js/JSNamedNodeMapCustom.cpp:
        (WebCore::JSNamedNodeMap::nameGetter):
        * bindings/js/JSNamedNodesCollection.cpp:
        (WebCore::JSNamedNodesCollection::lengthGetter):
        (WebCore::JSNamedNodesCollection::indexGetter):
        * bindings/js/JSNamedNodesCollection.h:
        (WebCore::JSNamedNodesCollection::createStructure):
        * bindings/js/JSNavigatorCustom.cpp:
        (WebCore::needsYouTubeQuirk):
        (WebCore::JSNavigator::appVersion):
        * bindings/js/JSNodeCustom.cpp:
        (WebCore::JSNode::insertBefore):
        (WebCore::JSNode::replaceChild):
        (WebCore::JSNode::removeChild):
        (WebCore::JSNode::appendChild):
        (WebCore::JSNode::addEventListener):
        (WebCore::JSNode::removeEventListener):
        (WebCore::createWrapper):
        (WebCore::toJSNewlyCreated):
        (WebCore::toJS):
        * bindings/js/JSNodeFilterCondition.cpp:
        (WebCore::JSNodeFilterCondition::JSNodeFilterCondition):
        (WebCore::JSNodeFilterCondition::acceptNode):
        * bindings/js/JSNodeFilterCondition.h:
        (WebCore::JSNodeFilterCondition::create):
        * bindings/js/JSNodeFilterCustom.cpp:
        (WebCore::JSNodeFilter::acceptNode):
        (WebCore::toNodeFilter):
        * bindings/js/JSNodeIteratorCustom.cpp:
        (WebCore::JSNodeIterator::nextNode):
        (WebCore::JSNodeIterator::previousNode):
        * bindings/js/JSNodeListCustom.cpp:
        (WebCore::callNodeList):
        (WebCore::JSNodeList::nameGetter):
        * bindings/js/JSPluginArrayCustom.cpp:
        (WebCore::JSPluginArray::nameGetter):
        * bindings/js/JSPluginCustom.cpp:
        (WebCore::JSPlugin::nameGetter):
        * bindings/js/JSPluginElementFunctions.cpp:
        (WebCore::runtimeObjectGetter):
        (WebCore::runtimeObjectPropertyGetter):
        (WebCore::runtimeObjectCustomPut):
        (WebCore::callPlugin):
        * bindings/js/JSPluginElementFunctions.h:
        * bindings/js/JSQuarantinedObjectWrapper.cpp:
        (WebCore::JSQuarantinedObjectWrapper::asWrapper):
        (WebCore::JSQuarantinedObjectWrapper::cachedValueGetter):
        (WebCore::JSQuarantinedObjectWrapper::transferExceptionToExecState):
        (WebCore::JSQuarantinedObjectWrapper::getOwnPropertySlot):
        (WebCore::JSQuarantinedObjectWrapper::put):
        (WebCore::JSQuarantinedObjectWrapper::construct):
        (WebCore::JSQuarantinedObjectWrapper::hasInstance):
        (WebCore::JSQuarantinedObjectWrapper::call):
        * bindings/js/JSQuarantinedObjectWrapper.h:
        (WebCore::JSQuarantinedObjectWrapper::createStructure):
        * bindings/js/JSRGBColor.cpp:
        (WebCore::getJSRGBColor):
        (jsRGBColorRed):
        (jsRGBColorGreen):
        (jsRGBColorBlue):
        * bindings/js/JSRGBColor.h:
        (WebCore::JSRGBColor::createStructure):
        * bindings/js/JSSQLResultSetRowListCustom.cpp:
        (WebCore::JSSQLResultSetRowList::item):
        * bindings/js/JSSQLTransactionCustom.cpp:
        (WebCore::JSSQLTransaction::executeSql):
        * bindings/js/JSSVGElementInstanceCustom.cpp:
        (WebCore::JSSVGElementInstance::addEventListener):
        (WebCore::JSSVGElementInstance::removeEventListener):
        (WebCore::toJS):
        * bindings/js/JSSVGLengthCustom.cpp:
        (WebCore::JSSVGLength::value):
        (WebCore::JSSVGLength::convertToSpecifiedUnits):
        * bindings/js/JSSVGMatrixCustom.cpp:
        (WebCore::JSSVGMatrix::inverse):
        (WebCore::JSSVGMatrix::rotateFromVector):
        * bindings/js/JSSVGPathSegCustom.cpp:
        (WebCore::toJS):
        * bindings/js/JSSVGPathSegListCustom.cpp:
        (WebCore::JSSVGPathSegList::clear):
        (WebCore::JSSVGPathSegList::initialize):
        (WebCore::JSSVGPathSegList::getItem):
        (WebCore::JSSVGPathSegList::insertItemBefore):
        (WebCore::JSSVGPathSegList::replaceItem):
        (WebCore::JSSVGPathSegList::removeItem):
        (WebCore::JSSVGPathSegList::appendItem):
        * bindings/js/JSSVGPointListCustom.cpp:
        (WebCore::finishGetter):
        (WebCore::finishSetter):
        (WebCore::finishSetterReadOnlyResult):
        (WebCore::JSSVGPointList::clear):
        (WebCore::JSSVGPointList::initialize):
        (WebCore::JSSVGPointList::getItem):
        (WebCore::JSSVGPointList::insertItemBefore):
        (WebCore::JSSVGPointList::replaceItem):
        (WebCore::JSSVGPointList::removeItem):
        (WebCore::JSSVGPointList::appendItem):
        * bindings/js/JSSVGTransformListCustom.cpp:
        (WebCore::finishGetter):
        (WebCore::finishSetter):
        (WebCore::finishSetterReadOnlyResult):
        (WebCore::JSSVGTransformList::clear):
        (WebCore::JSSVGTransformList::initialize):
        (WebCore::JSSVGTransformList::getItem):
        (WebCore::JSSVGTransformList::insertItemBefore):
        (WebCore::JSSVGTransformList::replaceItem):
        (WebCore::JSSVGTransformList::removeItem):
        (WebCore::JSSVGTransformList::appendItem):
        * bindings/js/JSStorageCustom.cpp:
        (WebCore::JSStorage::nameGetter):
        (WebCore::JSStorage::deleteProperty):
        (WebCore::JSStorage::customPut):
        * bindings/js/JSStyleSheetCustom.cpp:
        (WebCore::toJS):
        * bindings/js/JSStyleSheetListCustom.cpp:
        (WebCore::JSStyleSheetList::nameGetter):
        * bindings/js/JSTextCustom.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/js/JSTreeWalkerCustom.cpp:
        (WebCore::JSTreeWalker::parentNode):
        (WebCore::JSTreeWalker::firstChild):
        (WebCore::JSTreeWalker::lastChild):
        (WebCore::JSTreeWalker::nextSibling):
        (WebCore::JSTreeWalker::previousSibling):
        (WebCore::JSTreeWalker::previousNode):
        (WebCore::JSTreeWalker::nextNode):
        * bindings/js/JSWorkerContextCustom.cpp:
        (WebCore::JSWorkerContext::self):
        (WebCore::JSWorkerContext::setSelf):
        (WebCore::JSWorkerContext::xmlHttpRequest):
        (WebCore::JSWorkerContext::importScripts):
        (WebCore::JSWorkerContext::addEventListener):
        (WebCore::JSWorkerContext::removeEventListener):
        (WebCore::JSWorkerContext::setTimeout):
        (WebCore::JSWorkerContext::setInterval):
        * bindings/js/JSWorkerCustom.cpp:
        (WebCore::JSWorker::addEventListener):
        (WebCore::JSWorker::removeEventListener):
        * bindings/js/JSXMLHttpRequestCustom.cpp:
        (WebCore::JSXMLHttpRequest::open):
        (WebCore::JSXMLHttpRequest::setRequestHeader):
        (WebCore::JSXMLHttpRequest::send):
        (WebCore::JSXMLHttpRequest::getResponseHeader):
        (WebCore::JSXMLHttpRequest::overrideMimeType):
        (WebCore::JSXMLHttpRequest::addEventListener):
        (WebCore::JSXMLHttpRequest::removeEventListener):
        (WebCore::JSXMLHttpRequest::responseText):
        * bindings/js/JSXMLHttpRequestUploadCustom.cpp:
        (WebCore::JSXMLHttpRequestUpload::addEventListener):
        (WebCore::JSXMLHttpRequestUpload::removeEventListener):
        * bindings/js/JSXSLTProcessorCustom.cpp:
        (WebCore::JSXSLTProcessor::importStylesheet):
        (WebCore::JSXSLTProcessor::transformToFragment):
        (WebCore::JSXSLTProcessor::transformToDocument):
        (WebCore::JSXSLTProcessor::setParameter):
        (WebCore::JSXSLTProcessor::getParameter):
        (WebCore::JSXSLTProcessor::removeParameter):
        * bindings/js/ScheduledAction.cpp:
        (WebCore::ScheduledAction::create):
        (WebCore::ScheduledAction::ScheduledAction):
        (WebCore::ScheduledAction::executeFunctionInContext):
        * bindings/js/ScheduledAction.h:
        * bindings/js/ScriptCallStack.cpp:
        (WebCore::ScriptCallStack::ScriptCallStack):
        (WebCore::ScriptCallStack::initialize):
        * bindings/js/ScriptCallStack.h:
        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::jsObjectForPluginElement):
        * bindings/js/ScriptFunctionCall.cpp:
        (WebCore::ScriptFunctionCall::appendArgument):
        (WebCore::ScriptFunctionCall::call):
        (WebCore::ScriptFunctionCall::construct):
        * bindings/js/ScriptFunctionCall.h:
        * bindings/js/ScriptObject.cpp:
        (WebCore::ScriptGlobalObject::get):
        * bindings/js/ScriptValue.h:
        (WebCore::ScriptValue::ScriptValue):
        (WebCore::ScriptValue::jsValue):
        * bindings/objc/WebScriptObject.mm:
        (-[WebScriptObject callWebScriptMethod:withArguments:]):
        (-[WebScriptObject evaluateWebScript:]):
        (-[WebScriptObject valueForKey:]):
        (-[WebScriptObject webScriptValueAtIndex:]):
        (+[WebScriptObject _convertValueToObjcValue:originRootObject:rootObject:]):
        * bindings/objc/WebScriptObjectPrivate.h:
        * bridge/NP_jsobject.cpp:
        (_NPN_InvokeDefault):
        (_NPN_Invoke):
        (_NPN_Evaluate):
        (_NPN_GetProperty):
        (_NPN_HasMethod):
        (_NPN_Construct):
        * bridge/c/c_instance.cpp:
        (JSC::Bindings::CInstance::invokeMethod):
        (JSC::Bindings::CInstance::invokeDefaultMethod):
        (JSC::Bindings::CInstance::invokeConstruct):
        (JSC::Bindings::CInstance::defaultValue):
        (JSC::Bindings::CInstance::stringValue):
        (JSC::Bindings::CInstance::numberValue):
        (JSC::Bindings::CInstance::booleanValue):
        (JSC::Bindings::CInstance::valueOf):
        * bridge/c/c_instance.h:
        * bridge/c/c_runtime.cpp:
        (JSC::Bindings::CField::valueFromInstance):
        (JSC::Bindings::CField::setValueToInstance):
        * bridge/c/c_runtime.h:
        * bridge/c/c_utility.cpp:
        (JSC::Bindings::convertValueToNPVariant):
        (JSC::Bindings::convertNPVariantToValue):
        * bridge/c/c_utility.h:
        * bridge/jni/jni_instance.cpp:
        (JavaInstance::stringValue):
        (JavaInstance::numberValue):
        (JavaInstance::booleanValue):
        (JavaInstance::invokeMethod):
        (JavaInstance::defaultValue):
        (JavaInstance::valueOf):
        * bridge/jni/jni_instance.h:
        * bridge/jni/jni_jsobject.h:
        * bridge/jni/jni_jsobject.mm:
        (JavaJSObject::call):
        (JavaJSObject::eval):
        (JavaJSObject::getMember):
        (JavaJSObject::getSlot):
        (JavaJSObject::convertValueToJObject):
        (JavaJSObject::convertJObjectToValue):
        * bridge/jni/jni_objc.mm:
        (JSC::Bindings::dispatchJNICall):
        * bridge/jni/jni_runtime.cpp:
        (JavaArray::convertJObjectToArray):
        (JavaField::dispatchValueFromInstance):
        (JavaField::valueFromInstance):
        (JavaField::dispatchSetValueToInstance):
        (JavaField::setValueToInstance):
        (JavaArray::setValueAt):
        (JavaArray::valueAt):
        * bridge/jni/jni_runtime.h:
        * bridge/jni/jni_utility.cpp:
        (JSC::Bindings::convertArrayInstanceToJavaArray):
        (JSC::Bindings::convertValueToJValue):
        * bridge/jni/jni_utility.h:
        * bridge/objc/WebScriptObject.h:
        * bridge/objc/objc_class.h:
        * bridge/objc/objc_class.mm:
        (JSC::Bindings::ObjcClass::fallbackObject):
        * bridge/objc/objc_instance.h:
        * bridge/objc/objc_instance.mm:
        (ObjcInstance::invokeMethod):
        (ObjcInstance::invokeDefaultMethod):
        (ObjcInstance::setValueOfUndefinedField):
        (ObjcInstance::getValueOfUndefinedField):
        (ObjcInstance::defaultValue):
        (ObjcInstance::stringValue):
        (ObjcInstance::numberValue):
        (ObjcInstance::booleanValue):
        (ObjcInstance::valueOf):
        * bridge/objc/objc_runtime.h:
        (JSC::Bindings::ObjcFallbackObjectImp::createStructure):
        * bridge/objc/objc_runtime.mm:
        (JSC::Bindings::ObjcField::valueFromInstance):
        (JSC::Bindings::convertValueToObjcObject):
        (JSC::Bindings::ObjcField::setValueToInstance):
        (JSC::Bindings::ObjcArray::setValueAt):
        (JSC::Bindings::ObjcArray::valueAt):
        (JSC::Bindings::ObjcFallbackObjectImp::put):
        (JSC::Bindings::callObjCFallbackObject):
        (JSC::Bindings::ObjcFallbackObjectImp::defaultValue):
        * bridge/objc/objc_utility.h:
        * bridge/objc/objc_utility.mm:
        (JSC::Bindings::convertValueToObjcValue):
        (JSC::Bindings::convertNSStringToString):
        (JSC::Bindings::convertObjcValueToValue):
        * bridge/runtime.h:
        (JSC::Bindings::Class::fallbackObject):
        (JSC::Bindings::Instance::setValueOfUndefinedField):
        (JSC::Bindings::Instance::invokeDefaultMethod):
        (JSC::Bindings::Instance::invokeConstruct):
        (JSC::Bindings::Instance::put):
        * bridge/runtime_array.cpp:
        (JSC::RuntimeArray::lengthGetter):
        (JSC::RuntimeArray::indexGetter):
        (JSC::RuntimeArray::put):
        * bridge/runtime_array.h:
        (JSC::RuntimeArray::createStructure):
        * bridge/runtime_method.cpp:
        (JSC::RuntimeMethod::lengthGetter):
        (JSC::callRuntimeMethod):
        * bridge/runtime_method.h:
        (JSC::RuntimeMethod::createStructure):
        * bridge/runtime_object.cpp:
        (JSC::RuntimeObjectImp::fallbackObjectGetter):
        (JSC::RuntimeObjectImp::fieldGetter):
        (JSC::RuntimeObjectImp::methodGetter):
        (JSC::RuntimeObjectImp::put):
        (JSC::RuntimeObjectImp::defaultValue):
        (JSC::callRuntimeObject):
        (JSC::callRuntimeConstructor):
        * bridge/runtime_object.h:
        (JSC::RuntimeObjectImp::createStructure):
        * inspector/JavaScriptCallFrame.cpp:
        (WebCore::JavaScriptCallFrame::evaluate):
        * inspector/JavaScriptCallFrame.h:
        * inspector/JavaScriptProfile.cpp:
        (WebCore::toJS):
        * inspector/JavaScriptProfile.h:
        * inspector/JavaScriptProfileNode.cpp:
        (WebCore::toJS):
        * inspector/JavaScriptProfileNode.h:

2009-05-01  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=25485
        Only use visitedURL in Qt. This is a follow-up change to http://trac.webkit.org/changeset/43052,
        which broke Chromium build.

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::SelectorChecker::checkPseudoState): Moved guards around to
            provide separate code paths for Qt and non-Qt ports. Also restored original
            order of execution.

2009-05-01  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adele Peterson.

        <rdar://problem/6839222>
        CrashTracer: Lots of crashes in Safari in hash table remove function inside DocumentLoader::removeSubresourceLoader
        
        After calling m_client->didFail(), check if the subresource loader has reached its terminal state. If that's the case,
        return early to avoid calling removeSubresourceLoader on a null document loader. I don't think this is allowed to happen
        which is why I've added the ASSERT.
        
        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::didCancel):

2009-05-01  Timothy Hatcher  <timothy@apple.com>

        Disallow the deletion UI for elements that have any overflow clipping.
        Also disallow the UI for the body element it isn't practical to delete,
        and the deletion UI would be clipped.

        <rdar://problem/6840161> Deletion UI can be clipped by some
        elements (with overflow: hidden)

        Reviewed by Darin Adler.

        * editing/DeleteButtonController.cpp:
        (WebCore::isDeletableElement):

2009-05-01  Timothy Hatcher  <timothy@apple.com>

        Decrease the minimum height for deleteable elements to 16px, and increase the
        minimum width to 48px. This allows deleting shorter items like navigation bars.

        <rdar://problem/6840735> Deletion UI does not show up for short
        elements (22px or less)

        Reviewed by Adele Peterson.

        * editing/DeleteButtonController.cpp:
        (WebCore::isDeletableElement):

2009-05-01  Timothy Hatcher  <timothy@apple.com>

        Clean up the comments and logic in the code for picking a
        deleteable element for the deletion UI.

        Reviewed by Adele Peterson.

        * editing/DeleteButtonController.cpp:
        (WebCore::isDeletableElement):

2009-05-01  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Adele Peterson and Darin Adler.

        <rdar://problem/4815598> Stuck in double spacing mode after pasting a
        paragraph with padding/margin (or table mode !)

        A lot of the issues in this bug were resolved on Mail's side by using
        WebKit to convert to plain text.  This is the final issue, that floating
        style stays on copied nodes causing them to float when they are pasted
        which is not what the user intended.

        * editing/markup.cpp:
        (WebCore::removeExteriorStyles):
        (WebCore::):
        (WebCore::appendStartMarkup):
        (WebCore::getStartMarkup):
        (WebCore::createMarkup):

2009-05-01  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Add a FrameLoaderClient callback for the ResourceRetrievedByXMLHttpRequest.
        This is the only resource-related information that is available in InspectorController
        and is missing in the FrameLoaderClient.

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

        * WebCore.xcodeproj/project.pbxproj: Made ScriptSource private.
        * dom/Document.cpp: Made a call to a client along with the call to the InspectorController.
        (WebCore::Document::resourceRetrievedByXMLHttpRequest):
        * loader/EmptyClients.h: Added stub implementation.
        (WebCore::EmptyFrameLoaderClient::dispatchDidLoadResourceByXMLHttpRequest):
        * loader/FrameLoader.cpp: Call initiating dispatches.
        (WebCore::FrameLoader::resourceRetrievedByXMLHttpRequest):
        * loader/FrameLoader.h:
        * loader/FrameLoaderClient.h:

2009-04-30  Beth Dakin  <bdakin@apple.com>

        Reviewed by Oliver Hunt.

        Fix for <rdar://problem/6841106> REGRESSION: Crash drag selecting 
        To Do's in a Mail note (excessive recursion in mouse drag tracking)

        Oliver's recent change to dragging seems to have revealed a long-
        time bug in passSubframeEventToSubframe where we did not set 
        m_sendingEventToSubview to true before calling 
        handleMouseMoveEvent() in the NSMouseMoved case. This patch fixes 
        that and adds ASSERTions around all of the places where 
        m_sendingEventToSubview is set to true and then false to make sure 
        we are not trampling its state.

        * page/mac/EventHandlerMac.mm:
        (WebCore::EventHandler::eventLoopHandleMouseDragged):
        (WebCore::EventHandler::eventLoopHandleMouseUp):
        (WebCore::EventHandler::passSubframeEventToSubframe):
        (WebCore::EventHandler::passWheelEventToWidget):

2009-04-30  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Simon Fraser.
        
        MediaDocument falls back to plug-in unnecessarily
        https://bugs.webkit.org/show_bug.cgi?id=25504
        <rdar://problem/6844702>
        
        Don't allow harmless media types to cause a MediaDocument to fall
        back to PluginDocument.

        Test: media/video-document-types.html

        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivate::disableUnsupportedTracks): add timecode, timecode 64,
        odsm, and sdsm to allowed track types.

        * platform/graphics/win/QTMovieWin.cpp:
        (QTMovieWin::disableUnsupportedTracks): Ditto.

2009-04-30  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Eric Seidel.

        Add CHROMIUM guard to unfork Document.cpp

        * dom/Document.cpp:
        (WebCore::Document::setFocusedNode): Added guard.

2009-04-30  David Kilzer  <ddkilzer@apple.com>

        Use OwnPtr<HTMLParserQuirks> for m_parserQuirks

        Reviewed by Geoff Garen.

        * html/HTMLParser.cpp:
        (WebCore::HTMLParser::~HTMLParser): Removed unneeded code.
        * html/HTMLParser.h: Made m_parserQuirks an OwnPtr.

2009-04-30  David Kilzer  <ddkilzer@apple.com>

        Provide a mechanism to create a quirks delegate for HTMLParser

        Reviewed by David Hyatt.

        No tests since there is no change in behavior.

        HTMLParserQuirks.h defines an abstract base class that may be
        extended as needed.  The ChromeClient::createHTMLParserQuirks()
        factory method should be used to return an HTMLParserQuirks
        subclassed object when needed.

        * WebCore.xcodeproj/project.pbxproj: Added HTMLParserQuirks.h.
        * html/HTMLParser.cpp:
        (WebCore::HTMLParser::HTMLParser): Initialize m_parserQuirks
        using ChromeClient::createHTMLParserQuirks().
        (WebCore::HTMLParser::~HTMLParser): Delete m_parserQuirks if
        set.
        (WebCore::HTMLParser::reset): Call HTMLParserQuirks::reset() if
        m_parserQuirks is set.
        (WebCore::HTMLParser::insertNode): Call
        HTMLParserQuirks::shouldInsertNode() if m_parserQuirks is set,
        and return early if it returns false.
        (WebCore::HTMLParser::popBlock): Call
        HTMLParserQuirks::shouldPopBlock() if m_parserQuirks is set, and
        return early if it returns false.
        * html/HTMLParser.h: Added m_parserQuirks.
        * html/HTMLParserQuirks.h: Added.
        (WebCore::HTMLParserQuirks::HTMLParserQuirks):
        (WebCore::HTMLParserQuirks::~HTMLParserQuirks):
        * loader/EmptyClients.h:
        (WebCore::EmptyChromeClient::createHTMLParserQuirks): Added.
        * page/ChromeClient.h:
        (WebCore::ChromeClient::createHTMLParserQuirks): Added.

2009-04-30  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=25492
        Add JSC guards around node wrapper cache calls. These are not used by V8.

        Also, remove JSDOMBinding include, which is brought in by ScriptController.

        * dom/Document.cpp:
        (WebCore::Document::~Document): Added JSC guard.
        * dom/Node.cpp:
        (WebCore::Node::setDocument): Ditto and removed JSDOMBinding include.

2009-04-30  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=25493
        Remove debugger/profiler custom method stubs, catching V8 bindings up to
        http://trac.webkit.org/changeset/43072.

        * bindings/v8/custom/V8InspectorControllerCustom.cpp: Removed method stubs.

2009-04-30  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Darin Adler

        <rdar://problem/6839338> VoiceOver does not take into account transforms when drawing outlines
        
        Use transform-aware quad methods when computing the boundingBoxRect for
        an AccessibilityRenderObject. The code follows RenderObject::absoluteBoundingBoxRect().

        Test: accessibility/transformed-element.html

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

2009-04-30  Dimitri Glazkov  <dglazkov@chromium.org>

        Unreviewed, Chromium build fix.

        Catch up to ScriptObject changes from http://trac.webkit.org/changeset/42512.

        * bindings/v8/ScriptObject.cpp:
        (WebCore::ScriptGlobalObject::get): Renamed from getObject.
        (WebCore::ScriptGlobalObject::remove): Added.
        * bindings/v8/ScriptObject.h: Ditto.

2009-04-30  Dimitri Glazkov  <dglazkov@chromium.org>

        Unreviewed, build fix.

        https://bugs.webkit.org/show_bug.cgi?id=25470
        Extend the cover of ENABLE_JAVASCRIPT_DEBUGGER to profiler.

        * WebCore.pro: Fix copy-paste error.

2009-04-30  Dimitri Glazkov  <dglazkov@chromium.org>

        Unreviewed, build fix.

        https://bugs.webkit.org/show_bug.cgi?id=25470
        Extend the cover of ENABLE_JAVASCRIPT_DEBUGGER to profiler.

        * GNUmakefile.am: Add ENABLE_JAVASCRIPT_DEBUGGER definitions.
        * WebCore.pro: Ditto.

2009-04-02  Eric Seidel  <eric@webkit.org>

        Reviewed by Darin Adler.

        Change Position to pre-compute the AnchorType and store it.
        Also store a "legacy editing mode" bit on the Position.
        https://bugs.webkit.org/show_bug.cgi?id=24763

        The old Postion(node, offset) constructor creates legacy positions
        but there are new constructors to create explicitly anchored positions
        which the next patch will use.

        Once we fix all the "position-fixup" functions (like rangeCompliantEquivalent) to
        only affect legacy positions, we will be able to distinguish
        between [table, 1] and [table, after] in the code correctly!

        * WebCore.base.exp:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/Position.cpp:
        (WebCore::Position::Position):
        (WebCore::Position::moveToPosition):
        (WebCore::Position::moveToOffset):
        (WebCore::Position::anchorTypeForLegacyEditingPosition):
        (WebCore::Position::element):
        * dom/Position.h:
        (WebCore::Position::):
        (WebCore::Position::Position):
        (WebCore::Position::anchorType):
        (WebCore::Position::deprecatedEditingOffset):

2009-04-30  Sam Weinig  <sam@webkit.org>

        Reviewed by Alexey Proskuryakov.

        Fix bug where the WorkerLocation and WorkerNavigator wrappers would be
        collected even if the WorkerContext is still alive.

        Test: fast/workers/worker-context-gc.html

        * bindings/js/JSWorkerContextCustom.cpp:
        (WebCore::JSWorkerContext::mark):
        * workers/WorkerContext.cpp:
        (WebCore::WorkerContext::WorkerContext):
        (WebCore::WorkerContext::completeURL):
        (WebCore::WorkerContext::location):
        * workers/WorkerContext.h:
        (WebCore::WorkerContext::optionalNavigator):
        (WebCore::WorkerContext::optionalLocation):

2009-04-30  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Timothy Hatcher.

        https://bugs.webkit.org/show_bug.cgi?id=25470
        Extend the cover of ENABLE_JAVASCRIPT_DEBUGGER to profiler.

        * Configurations/FeatureDefines.xcconfig: Added ENABLE_JAVASCRIPT_DEBUGGER.
        * WebCore.vcproj/build-generated-files.sh: Ditto.
        * bindings/js/JSConsoleCustom.cpp: Added ENABLE(JAVASCRIPT_DEBUGGER) guard.
        * bindings/js/JSDOMWindowBase.cpp: Ditto.
        * bindings/js/JSInspectorControllerCustom.cpp: Ditto.
        * inspector/InspectorController.cpp: Moved profiler/debugger methods under
            ENABLE(JAVASCRIPT_DEBUGGER) flag.
        * inspector/InspectorController.h: Ditto.
        * inspector/InspectorController.idl: Added ENABLE(JAVASCRIPT_DEBUGGER) guard.
        * page/Console.cpp: Replaced USE(JSC) with ENABLE(JAVASCRIPT_DEBUGGER) guard.

2009-04-30  Dimitri Glazkov  <dglazkov@chromium.org>

        Unreviewed, build fix.

        https://bugs.webkit.org/show_bug.cgi?id=25275
        This patch snuck in a re-definition of a local.

        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::NAMED_PROPERTY_GETTER): Removed re-definition.

2009-04-30  Sam Weinig  <sam@webkit.org>

        Reviewed by Mark Rowe.

        Fix a leak introduced yesterday.  Don't allocate a ScheduledAction
        if the toString()ing throws an exception.

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

2009-04-30  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=25379
        <rdar://problem/6809460> REGRESSION (r41772): Selecting a bank in American Express Pay Bill fails

        Test: fast/forms/multiple-selected-options-innerHTML.html

        This problem was caused by an inconsistency at when Node::instertedIntoTree() is called.
        For normal HTML parsing, it is called immediately after an element is inserted, but for
        innerHTML, it is only called after the whole subtree is inserted into a document.

        It may make sense to harmonize these cases one day, but for now, I only made the minimal
        changes necessary to fix the bug.

        * html/HTMLSelectElement.cpp: (WebCore::HTMLSelectElement::insertedIntoTree):
        * html/HTMLSelectElement.h:
        Recalculate list items when a SELECT element is inserted. OPTION elements cannot decide
        which one to keep selected themselves, because their logic assumes normal parsing, with
        insertedIntoTree() called after each element is inserted.

2009-04-30  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Dimitri Glazkov.

        https://bugs.webkit.org/show_bug.cgi?id=25342
        Add MessageSource and MessageLevel parameters to the ChromeClient::addMessageToConsole.

        Chromium async/out-of-process version of WebInspector is currently not based on
        InspectorController. The reason was that we did not want to interfere with
        the unforking effort, yet wanted to experiment. So we came up with these
        agents concept that basically mimic InspectorController, but separating 'agent'
        nature from the 'transport'. Now that InspectorController is unforked, I am
        planning to bring these concepts into the WebKit land and use what we have in
        Chromium as a proof of concept / experimental playground.

        * loader/EmptyClients.h: added MessageSource and MessageLevel parameters.
        (WebCore::EmptyChromeClient::addMessageToConsole): ditto
        * page/ChromeClient.h: ditto
        * page/Console.cpp: Used new method signature.
        (WebCore::Console::addMessage): ditto

2009-04-30  Dan Bernstein  <mitz@apple.com>

        Reviewed by Simon Fraser.

        - fix https://bugs.webkit.org/show_bug.cgi?id=25476
          <rdar://problem/6841919> REGRESSION (r42987): Welcome to Safari 4
          animation is jittery

        Reverted r42987.

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

2009-04-30  Brady Eidson  <beidson@apple.com>

        Reviewed by Maciej Stachowiak

        <rdar://problem/3785248> http://www.greekembassy.org/ gets in an infinite reload loop
        https://bugs.webkit.org/show_bug.cgi?id=21193

        Some websites use for attributes in script elements to specify events that the script 
        should be run for.  One example is greekembassy.org which has the following in their <head>:

        <script for=window event=onresize>
            location.reload(false);
        </script>

        Since we don't support the full for attribute syntax, we would just blissfully ignore the
        condition and execute the code unconditionally.  This caused breakage on multiple real-world 
        sites besides greekembassy.org.

        https://bugs.webkit.org/show_bug.cgi?id=16915 and <rdar://problem/4471751> track adding full 
        support for the for attribute in scripts.  In the meantime it's best to not execute them
        unconditionally.

        Test: fast/dom/HTMLScriptElement/script-for-attribute-unexpected-execution.html

        * dom/ScriptElement.cpp:
        (WebCore::ScriptElementData::shouldExecuteAsJavaScript): After all other checks have
          passed, only return true if there is no for attribute in the script element.
        * dom/ScriptElement.h:

        * html/HTMLScriptElement.cpp:
        (WebCore::HTMLScriptElement::forAttributeValue): Return the attribute value, if any.
        * html/HTMLScriptElement.h:

        * svg/SVGScriptElement.cpp:
        (WebCore::SVGScriptElement::forAttributeValue): Return an empty string (like the other
          attribute getters do for SVGScriptElement)
        * svg/SVGScriptElement.h:

2009-04-30  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Darin Adler.

        The Qt API exposes a global history patch CSSStyleSelector to make API consumers work again

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

        The QtWebKit port made the mistake of exposing a global history. This broke
        with the addition of PageGroup and LinkHash. This needs to be repaired
        for Qt4.5.

        Add a function to LinkHash.cpp that is resolving a URL. Use this
        function from within CSSStyleSelector to forward the url to the
        QWebHistoryInterface API.

        It is sad that there is a path within visitedLinkHash which is now
        doing a memcpy, it is sad to add a PLATFORM(QT) define to CSSStyleSelector
        and using QtWebKit types within WebCore is a layering violation as well.

        PageGroup::setShouldTrackVisitedLinks is currently not enabled. For
        Qt4.6 a second version of the QWebHistoryInterface is going to be
        added which will fix things up.

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::SelectorChecker::checkPseudoState):
        * platform/LinkHash.cpp:
        (WebCore::visitedURL):
        (WebCore::visitedLinkHash):
        * platform/LinkHash.h:

2009-04-30  Simon Hausmann  <simon.hausmann@nokia.com>

        Fix the Qt build.

        * platform/graphics/SimpleFontData.cpp: Don't use initCharWidths() for the Qt build.
        * platform/graphics/qt/SimpleFontDataQt.cpp:
        (WebCore::SimpleFontData::platformCharWidthInit): Instead initialize the average and
        max char widths from QFontMetrics.

2009-04-30  Ariya Hidayat  <ariya.hidayat@nokia.com>

        Unreview build fix after r43037.

        Use MarkedArgumentBuffer instead of ArgList.

        * bridge/qt/qt_runtime.cpp:
        (JSC::Bindings::QtConnectionObject::execute):

2009-04-29  Sam Weinig  <sam@webkit.org>

        Reviewed by Oliver Hunt.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=25440
        setTimeout should stringify non-string/non-function first arguments

        Test: fast/dom/Window/setTimeout-string-argument.html

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::setTimeout):
        (WebCore::JSDOMWindow::setInterval):
        * bindings/js/JSWorkerContextCustom.cpp:
        (WebCore::JSWorkerContext::setTimeout):
        (WebCore::JSWorkerContext::setInterval):
        * bindings/js/ScheduledAction.cpp:
        (WebCore::ScheduledAction::create):
        * bindings/js/ScheduledAction.h:

2009-04-29  Dan Bernstein  <mitz@apple.com>

        Reviewed by Simon Fraser.

        - WebCore part of <rdar://problem/6609509> Select All and then Delete
          should put Mail editing back into the same state as a new message

        Test: editing/deleting/in-visibly-empty-root.html

        * WebCore.base.exp: Exported VisibleSelection::isAll(bool).
        * editing/SelectionController.h:
        (WebCore::SelectionController::isAll): Added. Calls through to
        VisibleSelection.
        * editing/TypingCommand.cpp:
        (WebCore::TypingCommand::makeEditableRootEmpty): Added. Removes all children
        of the root editable element the selection is in, other than a
        placeholder. Returns true iff it did anything.
        (WebCore::TypingCommand::deleteKeyPressed): When there is only a single
        visible position in the root editable element, but it has children other
        than a placeholder, remove those children.
        * editing/TypingCommand.h:
        * editing/VisiblePosition.h:
        Added a StayInEditableContent enum and a FIXME.
        * editing/VisibleSelection.cpp:
        (WebCore::VisibleSelection::isAll): Added. Returns whether the
        selection encompasses all visible positions, either in the document or
        in the editable root.
        * editing/VisibleSelection.h:

2009-04-29  Sam Weinig  <sam@webkit.org>

        Fix style nit.

        * editing/visible_units.cpp:
        (WebCore::getLeafBoxesInLogicalOrder):

2009-04-29  David Hyatt  <hyatt@apple.com>

        Reviewed by Dan Bernstein.

        For now just drop the deferred layout on the floor, since it causes an infinite hang in mail.  Even
        trying to schedule a relayout for later leaves you in a state where you hit the needsLayout painting
        assertions.

        Basically what Mail is doing is crazy, and we can't support it other than to just drop the last layout
        and not do it (which is basically what was happening before).

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

2009-04-29  Douglas Davidson  <ddavidso@apple.com>

        Reviewed by Justin Garcia.

        <rdar://problem/6836921> Mail exhibits issues with text checking, e.g. menu items not always validated correctly
        
        Updates to the text checking code to enable text checking even if spellchecking is turned off 
        and fix an off-by-one error in selection handling.

        * editing/Editor.cpp:
        (WebCore::Editor::markMisspellingsAfterTypingToPosition):
        (WebCore::Editor::markAllMisspellingsAndBadGrammarInRanges):
        (WebCore::Editor::markMisspellingsAndBadGrammar):
        * editing/Editor.h:
        * editing/TypingCommand.cpp:
        (WebCore::TypingCommand::markMisspellingsAfterTyping):

2009-04-29  Oliver Hunt  <oliver@apple.com>

        Reviewed by Gavin Barraclough.

        Clean up ArgList to be a trivial type

        Start using MarkedArgumentBuffer to create argument lists for function calls

        * bindings/js/JSClipboardCustom.cpp:
        (WebCore::JSClipboard::types):
        * bindings/js/JSConsoleCustom.cpp:
        (WebCore::JSConsole::profiles):
        * bindings/js/JSCustomPositionCallback.cpp:
        (WebCore::JSCustomPositionCallback::handleEvent):
        * bindings/js/JSCustomPositionErrorCallback.cpp:
        (WebCore::JSCustomPositionErrorCallback::handleEvent):
        * bindings/js/JSCustomSQLStatementCallback.cpp:
        (WebCore::JSCustomSQLStatementCallback::handleEvent):
        * bindings/js/JSCustomSQLStatementErrorCallback.cpp:
        (WebCore::JSCustomSQLStatementErrorCallback::handleEvent):
        * bindings/js/JSCustomSQLTransactionCallback.cpp:
        (WebCore::JSCustomSQLTransactionCallback::handleEvent):
        * bindings/js/JSCustomSQLTransactionErrorCallback.cpp:
        (WebCore::JSCustomSQLTransactionErrorCallback::handleEvent):
        * bindings/js/JSCustomVoidCallback.cpp:
        (WebCore::JSCustomVoidCallback::handleEvent):
        * bindings/js/JSCustomXPathNSResolver.cpp:
        (WebCore::JSCustomXPathNSResolver::lookupNamespaceURI):
        * bindings/js/JSEventListener.cpp:
        (WebCore::JSEventListener::handleEvent):
        * bindings/js/JSInspectorControllerCustom.cpp:
        (WebCore::JSInspectorController::profiles):
        (WebCore::JSInspectorController::search):
        (WebCore::JSInspectorController::databaseTableNames):
        (WebCore::JSInspectorController::setting):
        * bindings/js/JSJavaScriptCallFrameCustom.cpp:
        (WebCore::JSJavaScriptCallFrame::scopeChain):
        * bindings/js/JSLazyEventListener.cpp:
        (WebCore::JSLazyEventListener::parseCode):
        * bindings/js/JSNodeFilterCondition.cpp:
        (WebCore::JSNodeFilterCondition::acceptNode):
        * bindings/js/JSQuarantinedObjectWrapper.cpp:
        (WebCore::JSQuarantinedObjectWrapper::construct):
        (WebCore::JSQuarantinedObjectWrapper::call):
        * bindings/js/ScheduledAction.cpp:
        (WebCore::ScheduledAction::ScheduledAction):
        (WebCore::ScheduledAction::executeFunctionInContext):
        * bindings/js/ScriptFunctionCall.h:
        * bindings/objc/WebScriptObject.mm:
        (getListFromNSArray):
        (-[WebScriptObject callWebScriptMethod:withArguments:]):
        * bridge/NP_jsobject.cpp:
        (getListFromVariantArgs):
        (_NPN_InvokeDefault):
        (_NPN_Invoke):
        (_NPN_Construct):
        * bridge/jni/jni_jsobject.h:
        * bridge/jni/jni_jsobject.mm:
        (JavaJSObject::call):
        (JavaJSObject::getListFromJArray):

2009-04-29  Eric Seidel  <eric@webkit.org>

        No review, build fix only.

        Fix m_offset uses added while I wasn't looking.

        * editing/visible_units.cpp:
        (WebCore::logicalStartPositionForLine):
        (WebCore::logicalEndPositionForLine):

2009-04-29  Xiaomei Ji  <xji@chromium.org>

        Reviewed by Dan Bernstein.

        Fix https://bugs.webkit.org/show_bug.cgi?id=24168
        RTL: Home/End key does not behave correctly in mixed bidi text in RTL document

        Test: editing/selection/home-end.html

        * editing/SelectionController.cpp:
        (WebCore::SelectionController::modifyExtendingForward): Change calling endOfLine()
        to logicalEndOfLine() when granularity is LineBoundary.
        (WebCore::SelectionController::modifyMovingForward): Change calling endOfLine()
        to logicalEndOfLine() when granularity is LineBoundary
        (WebCore::SelectionController::modifyExtendingBackward): Change calling 
        startOfLine() to logicalStartOfLine() when granularity is LineBoundary.
        (WebCore::SelectionController::modifyMovingBackward): Change calling startOfLine() 
        to logicalStartOfLine() when granularity is LineBoundary.
        * editing/visible_units.cpp:
        (WebCore::getLeafBoxesInLogicalOrder): Added. Reconstruct leaf boxes in logical order.
        (WebCore::getLogicalStartBoxAndNode): Added.
        (WebCore::getLogicalEndBoxAndNode): Added.
        (WebCore::logicalStartPositionForLine): Added. Similar to startPositionForLine.
        (WebCore::logicalStartOfLine): Added. Similar to startOfLine.
        (WebCore::logicalEndPositionForLine): Added. Similar to endPositionForLine.
        (WebCore::inSameLogicalLine): Added.
        (WebCore::logicalEndOfLine): Added. Similar to endOfLine.
        * editing/visible_units.h:

2009-04-29  Eric Seidel  <eric@webkit.org>

        Reviewed by Darin Adler.

        Make m_offset private and change all callers to use deprecatedEditingOffset().
        https://bugs.webkit.org/show_bug.cgi?id=25472

        Per Darin's suggestion, this was just a simple search replace
        of .m_offset with .deprecatedEditingOffset().

        There was one change in InsertParagraphSeparatorCommand::doApply to use
        Position::moveToOffset(0) instead of .m_offset = 0;

        * dom/Position.cpp:
        (WebCore::Position::rendersInDifferentPosition):
        (WebCore::Position::leadingWhitespacePosition):
        * dom/Position.h:
        (WebCore::Position::deprecatedEditingOffset):
        (WebCore::Position::moveToOffset):
        (WebCore::operator==):
        * dom/PositionIterator.h:
        (WebCore::PositionIterator::PositionIterator):
        * dom/Range.cpp:
        (WebCore::Range::create):
        (WebCore::Range::compareBoundaryPoints):
        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::applyRelativeFontStyleChange):
        (WebCore::ApplyStyleCommand::applyInlineStyleToRange):
        (WebCore::ApplyStyleCommand::removeInlineStyle):
        (WebCore::ApplyStyleCommand::nodeFullySelected):
        (WebCore::ApplyStyleCommand::nodeFullyUnselected):
        (WebCore::ApplyStyleCommand::splitTextAtStartIfNeeded):
        (WebCore::ApplyStyleCommand::splitTextAtEndIfNeeded):
        (WebCore::ApplyStyleCommand::splitTextElementAtStartIfNeeded):
        (WebCore::ApplyStyleCommand::splitTextElementAtEndIfNeeded):
        (WebCore::ApplyStyleCommand::mergeStartWithPreviousIfIdentical):
        (WebCore::ApplyStyleCommand::mergeEndWithNextIfIdentical):
        (WebCore::ApplyStyleCommand::joinChildTextNodes):
        * editing/BreakBlockquoteCommand.cpp:
        (WebCore::BreakBlockquoteCommand::doApply):
        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::insertNodeAt):
        (WebCore::CompositeEditCommand::positionOutsideTabSpan):
        (WebCore::CompositeEditCommand::rebalanceWhitespaceAt):
        (WebCore::CompositeEditCommand::prepareWhitespaceAtPositionForSplit):
        (WebCore::CompositeEditCommand::deleteInsignificantText):
        (WebCore::CompositeEditCommand::moveParagraphs):
        (WebCore::CompositeEditCommand::breakOutOfEmptyMailBlockquotedParagraph):
        * editing/DeleteSelectionCommand.cpp:
        (WebCore::updatePositionForNodeRemoval):
        (WebCore::updatePositionForTextRemoval):
        (WebCore::DeleteSelectionCommand::handleGeneralDelete):
        (WebCore::DeleteSelectionCommand::fixupWhitespace):
        * editing/Editor.cpp:
        (WebCore::Editor::setComposition):
        (WebCore::Editor::advanceToNextMisspelling):
        (WebCore::Editor::getCompositionSelection):
        * editing/InsertLineBreakCommand.cpp:
        (WebCore::InsertLineBreakCommand::doApply):
        * editing/InsertParagraphSeparatorCommand.cpp:
        (WebCore::InsertParagraphSeparatorCommand::doApply):
        * editing/InsertTextCommand.cpp:
        (WebCore::InsertTextCommand::performTrivialReplace):
        (WebCore::InsertTextCommand::input):
        (WebCore::InsertTextCommand::insertTab):
        * editing/MoveSelectionCommand.cpp:
        (WebCore::MoveSelectionCommand::doApply):
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::doApply):
        * editing/SelectionController.cpp:
        (WebCore::SelectionController::debugRenderer):
        * editing/TextIterator.cpp:
        (WebCore::TextIterator::rangeFromLocationAndLength):
        * editing/TypingCommand.cpp:
        (WebCore::TypingCommand::deleteKeyPressed):
        (WebCore::TypingCommand::forwardDeleteKeyPressed):
        * editing/VisiblePosition.cpp:
        (WebCore::VisiblePosition::characterAfter):
        (WebCore::VisiblePosition::debugPosition):
        (WebCore::makeRange):
        (WebCore::setStart):
        (WebCore::setEnd):
        * editing/VisibleSelection.cpp:
        (WebCore::VisibleSelection::toNormalizedRange):
        (WebCore::makeSearchRange):
        (WebCore::VisibleSelection::debugPosition):
        (WebCore::VisibleSelection::showTreeForThis):
        * editing/htmlediting.cpp:
        (WebCore::comparePositions):
        (WebCore::rangeCompliantEquivalent):
        * editing/visible_units.cpp:
        (WebCore::previousBoundary):
        (WebCore::nextBoundary):
        (WebCore::startPositionForLine):
        (WebCore::startOfLine):
        (WebCore::endPositionForLine):
        (WebCore::nextLinePosition):
        (WebCore::startOfParagraph):
        (WebCore::endOfParagraph):
        (WebCore::logicalStartPositionForLine):
        (WebCore::logicalEndPositionForLine):
        * page/AccessibilityObject.cpp:
        (WebCore::updateAXLineStartForVisiblePosition):
        * page/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::indexForVisiblePosition):
        * page/DOMSelection.cpp:
        (WebCore::DOMSelection::anchorOffset):
        (WebCore::DOMSelection::focusOffset):
        (WebCore::DOMSelection::baseOffset):
        (WebCore::DOMSelection::extentOffset):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleMousePressEventSingleClick):
        * page/Frame.cpp:
        (WebCore::Frame::selectionLayoutChanged):
        * page/mac/AccessibilityObjectWrapper.mm:
        (textMarkerForVisiblePosition):
        (visiblePositionForTextMarker):
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::indexForVisiblePosition):
        * rendering/RenderTreeAsText.cpp:
        (WebCore::writeSelection):

2009-04-29  Eric Seidel  <eric@webkit.org>

        No review, rolling out a patch.

        Revert http://trac.webkit.org/changeset/43019

        New tests failed because I removed the tabs from them
        when landing (since we avoid tabs in WebKit files).
        I couldn't tell if the new results were correct with
        spaces or not.

        * editing/SelectionController.cpp:
        (WebCore::SelectionController::modifyExtendingForward):
        (WebCore::SelectionController::modifyMovingForward):
        (WebCore::SelectionController::modifyExtendingBackward):
        (WebCore::SelectionController::modifyMovingBackward):
        * editing/visible_units.cpp:
        * editing/visible_units.h:

2009-04-29  David Hyatt  <hyatt@apple.com>

        Reviewed by Dan Bernstein.

        Fix for <rdar://problem/6828164>, Mail hits the !root->needsLayout() assert because it re-marks the FrameView for layout
        when the FrameView is resized.  This bug was exposed by the elimination of the separate WebKit layout
        flag on Mac.  
        
        FrameView now defers setNeedsLayouts during size changes.  Once all of the size changes are finished (including re-entrant ones
        from WebDynamicScrollbarsView and ScrollView::updateScrollbars) we then do a layout if necessary.

        * page/FrameView.cpp:
        (WebCore::FrameView::FrameView):
        (WebCore::FrameView::setContentsSize):
        (WebCore::FrameView::layout):
        (WebCore::FrameView::needsLayout):
        (WebCore::FrameView::setNeedsLayout):
        * page/FrameView.h:

2009-04-29  Eric Seidel  <eric@webkit.org>

        No review, rolling out a patch.

        Revert 43020 as it caused accessibility/lists.html to fail
        and no one is around to tell me if it's a progression or not.

        * page/AccessibilityObject.h:
        (WebCore::):
        * page/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::roleValue):
        (WebCore::AccessibilityRenderObject::canSetFocusAttribute):
        * page/mac/AccessibilityObjectWrapper.mm:
        (RoleEntry::):

2009-04-29  Sankar Aditya Tanguturi  <sankaraditya@gmail.com>

        Reviewed by Jon Honeycutt.

        Add a new accessibility role for list items. Part of
        http://bugs.webkit.org/show_id.cgi?id=20013

        Tests: platform/win/accessibility/listitem-role.html

        * page/AccessibilityObject.h:
        (WebCore::):  Add ListItemRole to accessibilityRole enum.
        * page/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::roleValue):Return
        listItemRole when rendered object is a list item.
        (WebCore::AccessibilityRenderObject::canSetFocusAttribute): Return
        true for ListItemRole, matching firefox.
        * page/mac/AccessibilityObjectWrapper.mm:
        (RoleEntry::): Map ListItemRole with NSAccessibilityGroupRole in
        MAC.

2009-04-29  Xiaomei Ji  <xji@chromium.org>

        Reviewed by Dan Bernstein.

        Fix https://bugs.webkit.org/show_bug.cgi?id=24168
        RTL: Home/End key does not behave correctly in mixed bidi text in RTL document

        Test: editing/selection/home-end.html

        * editing/SelectionController.cpp:
        (WebCore::SelectionController::modifyExtendingForward): Change calling endOfLine()
        to logicalEndOfLine() when granularity is LineBoundary.
        (WebCore::SelectionController::modifyMovingForward): Change calling endOfLine()
        to logicalEndOfLine() when granularity is LineBoundary
        (WebCore::SelectionController::modifyExtendingBackward): Change calling 
        startOfLine() to logicalStartOfLine() when granularity is LineBoundary.
        (WebCore::SelectionController::modifyMovingBackward): Change calling startOfLine() 
        to logicalStartOfLine() when granularity is LineBoundary.
        * editing/visible_units.cpp:
        (WebCore::getLeafBoxesInLogicalOrder): Added. Reconstruct leaf boxes in logical order.
        (WebCore::getLogicalStartBoxAndNode): Added.
        (WebCore::getLogicalEndBoxAndNode): Added.
        (WebCore::logicalStartPositionForLine): Added. Similar to startPositionForLine.
        (WebCore::logicalStartOfLine): Added. Similar to startOfLine.
        (WebCore::logicalEndPositionForLine): Added. Similar to endPositionForLine.
        (WebCore::inSameLogicalLine): Added.
        (WebCore::logicalEndOfLine): Added. Similar to endOfLine.
        * editing/visible_units.h:

2009-04-29  Mike Belshe  <mike@belshe.com>

        Reviewed by Eric Seidel.

        Update location while page is loading.
        https://bugs.webkit.org/show_bug.cgi?id=21597

        Tested by:
        - fast/dom/location-new-window-no-crash
        - fast/dom/Window/window-open-pending-url

        * page/Location.cpp:

2009-04-29  Feng Qian  <feng@chromium.org>

        Reviewed by Darin Adler.

        Add Android port files to WebCore/platform.
        https://bugs.webkit.org/show_bug.cgi?id=23296

        * platform/android: Added.
        * platform/android/ClipboardAndroid.cpp: Added.
        * platform/android/ClipboardAndroid.h: Added.

2009-04-29  Feng Qian  <feng@chromium.org>

        Reviewed by Darin Adler.

        Add Android-specific files to the WebCore/page directory.
        https://bugs.webkit.org/show_bug.cgi?id=23295

        * page/android: Added.
        * page/android/DragControllerAndroid.cpp: Added.
        * page/android/EventHandlerAndroid.cpp: Added.
        * page/android/InspectorControllerAndroid.cpp: Added.

2009-04-29  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Extract PageGroupLoadDeferrer from Chrome.cpp

        * GNUmakefile.am: added PageGroupLoadDeferrer
        * WebCore.pro: ditto
        * WebCore.scons: ditto
        * WebCore.vcproj/WebCore.vcproj: ditto
        * WebCore.xcodeproj/project.pbxproj: ditto
        * WebCoreSources.bkl: ditto
        * page/Chrome.cpp: PageGroupLoadDeferrer impl moved to a separate class.
        * page/PageGroupLoadDeferrer.cpp: Added.
        (WebCore::PageGroupLoadDeferrer::PageGroupLoadDeferrer):
        (WebCore::PageGroupLoadDeferrer::~PageGroupLoadDeferrer):
        * page/PageGroupLoadDeferrer.h: Added.

2009-04-24  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Dan Bernstein.

        Make textarea and text input metrics more closely match IEs.

        This involves:
        -set text input width to size*avgCharWidth + maxCharWidth - avgCharWidth
        -set textarea width to cols*avgCharWidth
        -Make default CSS match IEs
        -Correctly initializing m_avgCharWidth and m_maxCharWidth for each platform and SVG.

        Those values for textarea and inputs were derived by doing a ton of manual
        testing of IE's width values for various textareas and fonts. On Windows we match
        IE exactly except for a couple fonts of the ~12 tested.

        To get the average and max character width of a font, we do the following
        for each platform:
        -Win: TextMetrics expose avgCharWidth and maxCharWidth
        -SVG: avgCharWidth = width of an '0', fallback on width of a space glyph, then m_xHeight
            maxCharWidth = width of a 'W' for roman fonts, fallback on m_ascent
        -Linux: avgCharWidth = width of an '0', fallback on m_xHeight
            maxCharWidth = max of avgCharWidth and m_ascent
        -Mac: Calculate the avgCharWidth and grab the maxCharWidth off the font.
            If either one is non-positive, then calculate the value using the Linux approach.

        Tests: fast/forms/text-control-intrinsic-widths.html
               fast/forms/textarea-metrics.html
               svg/custom/svg-fonts-in-text-controls.html

        * css/html4.css:
        * css/themeWin.css:
        * platform/graphics/SimpleFontData.cpp:
        (WebCore::SimpleFontData::SimpleFontData):
        (WebCore::SimpleFontData::initCharWidths):
        * platform/graphics/SimpleFontData.h:
        (WebCore::SimpleFontData::maxCharWidth):
        (WebCore::SimpleFontData::avgCharWidth):
        * platform/graphics/chromium/SimpleFontDataChromiumWin.cpp:
        (WebCore::SimpleFontData::platformCharWidthInit):
        * platform/graphics/chromium/SimpleFontDataLinux.cpp:
        (WebCore::SimpleFontData::platformCharWidthInit):
        * platform/graphics/gtk/SimpleFontDataGtk.cpp:
        (WebCore::SimpleFontData::platformCharWidthInit):
        * platform/graphics/gtk/SimpleFontDataPango.cpp:
        (WebCore::SimpleFontData::platformCharWidthInit):
        * platform/graphics/mac/SimpleFontDataMac.mm:
        (WebCore::SimpleFontData::platformCharWidthInit):
        * platform/graphics/qt/SimpleFontDataQt.cpp:
        (WebCore::SimpleFontData::platformCharWidthInit):
        * platform/graphics/win/SimpleFontDataCGWin.cpp:
        (WebCore::SimpleFontData::platformCharWidthInit):
        * platform/graphics/win/SimpleFontDataCairoWin.cpp:
        (WebCore::SimpleFontData::platformInit):
        (WebCore::SimpleFontData::platformCharWidthInit):
        * platform/graphics/win/SimpleFontDataWin.cpp:
        (WebCore::SimpleFontData::initGDIFont):
        * platform/graphics/wx/SimpleFontDataWx.cpp:
        (WebCore::SimpleFontData::platformCharWidthInit):
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::calcPrefWidths):
        * rendering/RenderTextControlMultiLine.cpp:
        (WebCore::RenderTextControlMultiLine::createInnerTextStyle):
        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::preferredContentWidth):

2009-04-29  Brady Eidson  <beidson@apple.com>

        Reviewed by Darin Adler.

        * bindings/objc/DOMCSS.mm:
        (kitClass):  Added CSS_INITIAL to the switch statement, and changed to use the WebCore
          type and not the binding type.

2009-04-29  John Abd-El-Malek  <jam@google.com>

        Reviewed by Dimitri Glazkov.

        Reverted my previous change to add resetChromiumPluginCache().
        https://bugs.webkit.org/show_bug.cgi?id=25318

        * plugins/chromium/PluginDataChromium.cpp:

2009-04-29  Brady Eidson  <beidson@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/6573742> - Problem dragging standalone images from Safari to Mail

        Roll out trac.webkit.org/changeset/35867 which fixed <rdar://problem/6153432>

        Cloned <rdar://problem/6153432> to <rdar://problem/6839881> to find a better fix for that Tiger Mail bug.

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::subresource): Remove the preload referenced check.

2009-04-29  Alpha Lam  <hclam@chromium.org>

        Reviewed by Dimitri Glazkov.

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

        Provide style sheet for UI controls of media elements for Chromium port.

        * rendering/RenderThemeChromiumWin.cpp:
        (WebCore::RenderThemeChromiumWin::extraMediaControlsStyleSheet):

2009-04-29  John Abd-El-Malek  <jam@chromium.org>

        Reviewed by Darin Adler.

        Expose sudden termination to Chromium port.
        https://bugs.webkit.org/show_bug.cgi?id=25457

        * platform/SuddenTermination.h:
        * platform/chromium/ChromiumBridge.h:
        * platform/chromium/SuddenTerminationChromium.cpp: Added.
        (WebCore::disableSuddenTermination):
        (WebCore::enableSuddenTermination):

2009-04-29  Sam Weinig  <sam@webkit.org>

        Reviewed by Dimitri Glazkov.

        Remove unused EventListeners.

        * page/DOMWindow.idl:

2009-04-29  Yury Semikhatsky  <yurys@chromium.org>

        Reveal current execution line once SourceFrame content is loaded. 

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

        Reviewed by Timothy Hatcher.

        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype._loaded):

2009-04-29  Ariya Hidayat  <ariya.hidayat@nokia.com>

        Reviewed by Simon Fraser.

        [Qt] Initialize GraphicsContext's and ImageBuffer's QPainter to match
        the default values of canvas attributes.

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

2009-04-28  Simon Hausmann  <simon.hausmann@nokia.com>

        Fix the Qt build.

        * bridge/qt/qt_runtime.cpp:
        (JSC::Bindings::findMethodIndex): Removed exec param from at() call.
        (JSC::Bindings::QtRuntimeConnectionMethod::call): Ditto.

2009-04-28  Geoffrey Garen  <ggaren@apple.com>

        Rubber stamped by Beth Dakin.
        
        Missed one.

        * bindings/scripts/CodeGeneratorJS.pm:

2009-04-28  Geoffrey Garen  <ggaren@apple.com>

        Rubber stamped by Beth Dakin.
        
        Removed scaffolding supporting dynamically converting between 32bit and
        64bit value representations. 

        * bindings/js/JSAudioConstructor.cpp:
        (WebCore::constructAudio):
        * bindings/js/JSCanvasRenderingContext2DCustom.cpp:
        (WebCore::JSCanvasRenderingContext2D::setFillColor):
        (WebCore::JSCanvasRenderingContext2D::setStrokeColor):
        (WebCore::JSCanvasRenderingContext2D::strokeRect):
        (WebCore::JSCanvasRenderingContext2D::drawImage):
        (WebCore::JSCanvasRenderingContext2D::drawImageFromRect):
        (WebCore::JSCanvasRenderingContext2D::setShadow):
        (WebCore::JSCanvasRenderingContext2D::createPattern):
        (WebCore::JSCanvasRenderingContext2D::putImageData):
        (WebCore::JSCanvasRenderingContext2D::fillText):
        (WebCore::JSCanvasRenderingContext2D::strokeText):
        * bindings/js/JSClipboardCustom.cpp:
        (WebCore::JSClipboard::clearData):
        (WebCore::JSClipboard::getData):
        (WebCore::JSClipboard::setData):
        (WebCore::JSClipboard::setDragImage):
        * bindings/js/JSDOMApplicationCacheCustom.cpp:
        (WebCore::JSDOMApplicationCache::hasItem):
        (WebCore::JSDOMApplicationCache::add):
        (WebCore::JSDOMApplicationCache::remove):
        (WebCore::JSDOMApplicationCache::addEventListener):
        (WebCore::JSDOMApplicationCache::removeEventListener):
        * bindings/js/JSDOMStringListCustom.cpp:
        (WebCore::JSDOMStringList::item):
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::open):
        (WebCore::JSDOMWindow::showModalDialog):
        (WebCore::JSDOMWindow::postMessage):
        (WebCore::JSDOMWindow::setTimeout):
        (WebCore::JSDOMWindow::setInterval):
        (WebCore::JSDOMWindow::atob):
        (WebCore::JSDOMWindow::btoa):
        (WebCore::JSDOMWindow::addEventListener):
        (WebCore::JSDOMWindow::removeEventListener):
        * bindings/js/JSDatabaseCustom.cpp:
        (WebCore::JSDatabase::changeVersion):
        (WebCore::JSDatabase::transaction):
        * bindings/js/JSElementCustom.cpp:
        (WebCore::JSElement::setAttribute):
        (WebCore::JSElement::setAttributeNode):
        (WebCore::JSElement::setAttributeNS):
        (WebCore::JSElement::setAttributeNodeNS):
        * bindings/js/JSGeolocationCustom.cpp:
        (WebCore::JSGeolocation::getCurrentPosition):
        (WebCore::JSGeolocation::watchPosition):
        * bindings/js/JSHTMLCollectionCustom.cpp:
        (WebCore::callHTMLCollection):
        (WebCore::JSHTMLCollection::item):
        (WebCore::JSHTMLCollection::namedItem):
        * bindings/js/JSHTMLDocumentCustom.cpp:
        (WebCore::documentWrite):
        * bindings/js/JSHTMLInputElementCustom.cpp:
        (WebCore::JSHTMLInputElement::setSelectionRange):
        * bindings/js/JSHTMLOptionsCollectionCustom.cpp:
        (WebCore::JSHTMLOptionsCollection::add):
        * bindings/js/JSHTMLSelectElementCustom.cpp:
        (WebCore::JSHTMLSelectElement::remove):
        * bindings/js/JSImageConstructor.cpp:
        (WebCore::constructImage):
        * bindings/js/JSInspectorControllerCustom.cpp:
        (WebCore::JSInspectorController::highlightDOMNode):
        (WebCore::JSInspectorController::addResourceSourceToFrame):
        (WebCore::JSInspectorController::addSourceToFrame):
        (WebCore::JSInspectorController::getResourceDocumentNode):
        (WebCore::JSInspectorController::search):
        (WebCore::JSInspectorController::databaseTableNames):
        (WebCore::JSInspectorController::setting):
        (WebCore::JSInspectorController::setSetting):
        (WebCore::JSInspectorController::wrapCallback):
        * bindings/js/JSJavaScriptCallFrameCustom.cpp:
        (WebCore::JSJavaScriptCallFrame::evaluate):
        * bindings/js/JSLocationCustom.cpp:
        (WebCore::JSLocation::replace):
        (WebCore::JSLocation::assign):
        * bindings/js/JSMessagePortCustom.cpp:
        (WebCore::JSMessagePort::startConversation):
        (WebCore::JSMessagePort::addEventListener):
        (WebCore::JSMessagePort::removeEventListener):
        * bindings/js/JSNodeCustom.cpp:
        (WebCore::JSNode::insertBefore):
        (WebCore::JSNode::replaceChild):
        (WebCore::JSNode::removeChild):
        (WebCore::JSNode::appendChild):
        (WebCore::JSNode::addEventListener):
        (WebCore::JSNode::removeEventListener):
        * bindings/js/JSNodeFilterCustom.cpp:
        (WebCore::JSNodeFilter::acceptNode):
        * bindings/js/JSNodeListCustom.cpp:
        (WebCore::callNodeList):
        * bindings/js/JSOptionConstructor.cpp:
        (WebCore::constructHTMLOptionElement):
        * bindings/js/JSQuarantinedObjectWrapper.cpp:
        (WebCore::JSQuarantinedObjectWrapper::construct):
        (WebCore::JSQuarantinedObjectWrapper::call):
        * bindings/js/JSSQLResultSetRowListCustom.cpp:
        (WebCore::JSSQLResultSetRowList::item):
        * bindings/js/JSSQLTransactionCustom.cpp:
        (WebCore::JSSQLTransaction::executeSql):
        * bindings/js/JSSVGElementInstanceCustom.cpp:
        (WebCore::JSSVGElementInstance::addEventListener):
        (WebCore::JSSVGElementInstance::removeEventListener):
        * bindings/js/JSSVGLengthCustom.cpp:
        (WebCore::JSSVGLength::convertToSpecifiedUnits):
        * bindings/js/JSSVGMatrixCustom.cpp:
        (WebCore::JSSVGMatrix::rotateFromVector):
        * bindings/js/JSSVGPathSegListCustom.cpp:
        (WebCore::JSSVGPathSegList::initialize):
        (WebCore::JSSVGPathSegList::getItem):
        (WebCore::JSSVGPathSegList::insertItemBefore):
        (WebCore::JSSVGPathSegList::replaceItem):
        (WebCore::JSSVGPathSegList::removeItem):
        (WebCore::JSSVGPathSegList::appendItem):
        * bindings/js/JSSVGPointListCustom.cpp:
        (WebCore::JSSVGPointList::initialize):
        (WebCore::JSSVGPointList::getItem):
        (WebCore::JSSVGPointList::insertItemBefore):
        (WebCore::JSSVGPointList::replaceItem):
        (WebCore::JSSVGPointList::removeItem):
        (WebCore::JSSVGPointList::appendItem):
        * bindings/js/JSSVGTransformListCustom.cpp:
        (WebCore::JSSVGTransformList::initialize):
        (WebCore::JSSVGTransformList::getItem):
        (WebCore::JSSVGTransformList::insertItemBefore):
        (WebCore::JSSVGTransformList::replaceItem):
        (WebCore::JSSVGTransformList::removeItem):
        (WebCore::JSSVGTransformList::appendItem):
        * bindings/js/JSWebKitCSSMatrixConstructor.cpp:
        (WebCore::constructWebKitCSSMatrix):
        * bindings/js/JSWebKitPointConstructor.cpp:
        (WebCore::constructWebKitPoint):
        * bindings/js/JSWorkerConstructor.cpp:
        (WebCore::constructWorker):
        * bindings/js/JSWorkerContextCustom.cpp:
        (WebCore::JSWorkerContext::importScripts):
        (WebCore::JSWorkerContext::addEventListener):
        (WebCore::JSWorkerContext::removeEventListener):
        (WebCore::JSWorkerContext::setTimeout):
        (WebCore::JSWorkerContext::setInterval):
        * bindings/js/JSWorkerCustom.cpp:
        (WebCore::JSWorker::addEventListener):
        (WebCore::JSWorker::removeEventListener):
        * bindings/js/JSXMLHttpRequestCustom.cpp:
        (WebCore::JSXMLHttpRequest::open):
        (WebCore::JSXMLHttpRequest::setRequestHeader):
        (WebCore::JSXMLHttpRequest::send):
        (WebCore::JSXMLHttpRequest::getResponseHeader):
        (WebCore::JSXMLHttpRequest::overrideMimeType):
        (WebCore::JSXMLHttpRequest::addEventListener):
        (WebCore::JSXMLHttpRequest::removeEventListener):
        * bindings/js/JSXMLHttpRequestUploadCustom.cpp:
        (WebCore::JSXMLHttpRequestUpload::addEventListener):
        (WebCore::JSXMLHttpRequestUpload::removeEventListener):
        * bindings/js/JSXSLTProcessorCustom.cpp:
        (WebCore::JSXSLTProcessor::importStylesheet):
        (WebCore::JSXSLTProcessor::transformToFragment):
        (WebCore::JSXSLTProcessor::transformToDocument):
        (WebCore::JSXSLTProcessor::setParameter):
        (WebCore::JSXSLTProcessor::getParameter):
        (WebCore::JSXSLTProcessor::removeParameter):
        * bindings/js/ScheduledAction.cpp:
        (WebCore::ScheduledAction::create):
        (WebCore::ScheduledAction::ScheduledAction):
        * bindings/js/ScheduledAction.h:
        * bindings/js/ScriptCallFrame.cpp:
        (WebCore::ScriptCallFrame::ScriptCallFrame):
        * bindings/js/ScriptCallFrame.h:
        * bindings/js/ScriptCallStack.cpp:
        (WebCore::ScriptCallStack::ScriptCallStack):
        (WebCore::ScriptCallStack::initialize):
        * bridge/c/c_instance.cpp:
        (JSC::Bindings::CInstance::invokeMethod):
        (JSC::Bindings::CInstance::invokeDefaultMethod):
        (JSC::Bindings::CInstance::invokeConstruct):
        * bridge/jni/jni_instance.cpp:
        (JavaInstance::invokeMethod):
        * bridge/objc/objc_instance.mm:
        (ObjcInstance::invokeMethod):
        (ObjcInstance::invokeDefaultMethod):

2009-04-28  David Carson  <dacarson@apple.com>

        Reviewed by David Hyatt.

        Restore alignment to device pixel boundaries.
        https://bugs.webkit.org/show_bug.cgi?id=25458

        Adjust the adjusted destination rect to be device pixel aligned.

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

2009-04-28  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Move unimplemented captureEvents and releaseEvents from JSDOMWindow
        to DOMWindow.

        * bindings/js/JSDOMWindowCustom.cpp:
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::captureEvents):
        (WebCore::DOMWindow::releaseEvents):
        * page/DOMWindow.h:
        * page/DOMWindow.idl:

2009-04-28  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=25420
        <rdar://problem/6829570> REGRESSION: XMLHttpRequest allows loading from another origin

        Test: http/tests/xmlhttprequest/detaching-frame-2.html

        This was caused by faulty DOMWindow::document(), which could return a new document from
        the window's frame after navigation.

        * bindings/js/JSDOMWindowCustom.h: (WebCore::JSDOMWindowBase::allowsAccessFromPrivate):
        Removed an obsolete check that allowed access when document was null. Contrary to what a
        comment said, that can happen for a window that is no longer in frame, not to one whose
        document is not constructed yet.

        * bindings/js/JSXMLHttpRequestConstructor.cpp: (WebCore::constructXMLHttpRequest): Bail
        out if context was not found. This currently happens due to a shortcoming in
        DOMWindow::document() - when it is fixed, the XMLHttpRequest object in included regression
        test will be constructed successfully, but won't be sent, because its context will be
        frameless.

        * page/DOMWindow.cpp: (WebCore::DOMWindow::document): Check that the window in frame hasn't
        been replaced yet. Added FIXME comments about how this may be better fixed in the future.

        * bindings/js/JSAudioConstructor.cpp:
        (WebCore::JSAudioConstructor::document):
        (WebCore::constructAudio):
        * bindings/js/JSImageConstructor.cpp:
        (WebCore::JSImageConstructor::document):
        (WebCore::constructImage):
        * bindings/js/JSMessageChannelConstructor.cpp:
        (WebCore::JSMessageChannelConstructor::construct):
        * bindings/js/JSOptionConstructor.cpp:
        (WebCore::JSOptionConstructor::document):
        (WebCore::constructHTMLOptionElement):
        Make matching changes to other constructors that hold a reference to global object.

2009-04-28  Kevin Ollivier <kevino@theolliviers.com>

        wxMSW build fix. Switch JSCore build back to static.

        * config.h:

2009-04-28  Pierre d'Herbemont  <pdherbemont@apple.com>

        Reviewed by Simon Fraser.

        <rdar://problem/6834830>

        Make sure we cover the two possible values reported by event.total that are playback engine
        specific.

        * media/progress-event-total-expected.txt: Match the new test.
        * media/progress-event-total.html: Test the two values.

2009-04-28  Timothy Hatcher  <timothy@apple.com>

        Rename -[DOMRange lineBoxRects] to -[DOMRange textRects] and change how it
        collects the individual rects, making sure to only include RenderText.

        <rdar://problem/6810061>

        Reviewed by Sam Weinig.

        * bindings/objc/DOM.mm:
        (-[DOMNode textRects]): Added. Make a Range and call textRects.
        (-[DOMNode lineBoxRects]): Call textRects method.
        (-[DOMRange textRects]): Call Range::textRects.
        (-[DOMRange lineBoxRects]): Call textRects method.
        * bindings/objc/DOMPrivate.h: Add the new methods and a comment
        about lineBoxRects being deprecated.
        * dom/Range.cpp:
        (WebCore::Range::boundingBox): Call textRects (renamed from addLineBoxRects).
        (WebCore::Range::textRects): Renamed from addLineBoxRects. Iterate over the
        nodes instead of the RenderObjects to correctly account for offsets. Also
        only call absoluteRectsForRange on RenderText.
        * dom/Range.h: Renamed addLineBoxRects to textRects.
        * page/Frame.cpp:
        (WebCore::Frame::selectionTextRects): Call textRects (renamed from addLineBoxRects).
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::absoluteRectsForRange): Remove if conditions that made this
        function very specific for the lineBoxRects API. These functions are still used
        by the InspectorController, and this change improves what the Inspector shows.
        (WebCore::RenderObject::absoluteQuadsForRange): Ditto.

2009-04-28  Timothy Hatcher  <timothy@apple.com>

        Remove the topLevel boolean argument from absolute{Rects,Quads}.
        This argument was default to true and no one ever passed false.

        Reviewed by Sam Weinig.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::absoluteRects):
        (WebCore::RenderBlock::absoluteQuads):
        * rendering/RenderBlock.h:
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::absoluteRects):
        (WebCore::RenderBox::absoluteQuads):
        * rendering/RenderBox.h:
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::absoluteRects):
        (WebCore::RenderInline::absoluteQuads):
        * rendering/RenderInline.h:
        * rendering/RenderObject.h:
        (WebCore::RenderObject::absoluteRects):
        (WebCore::RenderObject::absoluteQuads):
        * rendering/RenderSVGHiddenContainer.cpp:
        (WebCore::RenderSVGHiddenContainer::absoluteRects):
        (WebCore::RenderSVGHiddenContainer::absoluteQuads):
        * rendering/RenderSVGHiddenContainer.h:
        * rendering/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::absoluteRects):
        (WebCore::RenderSVGImage::absoluteQuads):
        * rendering/RenderSVGImage.h:
        * rendering/RenderSVGInlineText.cpp:
        (WebCore::RenderSVGInlineText::absoluteRects):
        (WebCore::RenderSVGInlineText::absoluteQuads):
        * rendering/RenderSVGInlineText.h:
        * rendering/RenderSVGModelObject.cpp:
        (WebCore::RenderSVGModelObject::absoluteRects):
        (WebCore::RenderSVGModelObject::absoluteQuads):
        * rendering/RenderSVGModelObject.h:
        * rendering/RenderSVGTSpan.cpp:
        (WebCore::RenderSVGTSpan::absoluteRects):
        (WebCore::RenderSVGTSpan::absoluteQuads):
        * rendering/RenderSVGTSpan.h:
        * rendering/RenderSVGText.cpp:
        (WebCore::RenderSVGText::absoluteRects):
        (WebCore::RenderSVGText::absoluteQuads):
        * rendering/RenderSVGText.h:
        * rendering/RenderSVGTextPath.cpp:
        (WebCore::RenderSVGTextPath::absoluteQuads):
        * rendering/RenderSVGTextPath.h:
        * rendering/RenderText.cpp:
        (WebCore::RenderText::absoluteRects):
        * rendering/RenderText.h:
        * rendering/RenderView.cpp:
        (WebCore::RenderView::absoluteRects):
        (WebCore::RenderView::absoluteQuads):
        * rendering/RenderView.h:

2009-04-28  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Simon Fraser.

        <rdar://problem/6794691> Media documents and <video controls> never show controls on Windows

        RenderThemeWin doesn't implement the media element controller rendering methods, so media
        controls stopped rendering when we switched from RenderThemeSafari. Rather than having copies
        of the code in both places, the logic is in a new class that is called from both.

        * WebCore.vcproj/WebCore.vcproj: Add RenderMediaControls.cpp.

        * rendering/RenderMediaControls.cpp: Added.
        (WebCore::determineState): Translate renderer state to ThemeControlState.
        (WebCore::RenderMediaControls::adjustMediaSliderThumbSize): Adjust slider thumb.
        (WebCore::parentMediaElement): Return the HTMLMediaElement parent of a controller element.
        (WebCore::RenderMediaControls::paintMediaControlsPart): Paint a media controller part.
        * rendering/RenderMediaControls.h: Added.

        * rendering/RenderThemeSafari.cpp:
        (WebCore::RenderThemeSafari::paintSliderTrack): Remove the MediaSliderPart case, it is never
        called for the media slider.
        (WebCore::RenderThemeSafari::adjustSliderThumbSize): Call RenderMediaControls function.
        (WebCore::RenderThemeSafari::paintMediaFullscreenButton): Ditto.
        (WebCore::RenderThemeSafari::paintMediaMuteButton): Ditto.
        (WebCore::RenderThemeSafari::paintMediaPlayButton): Ditto.
        (WebCore::RenderThemeSafari::paintMediaSeekBackButton): Ditto.
        (WebCore::RenderThemeSafari::paintMediaSeekForwardButton): Ditto.
        (WebCore::RenderThemeSafari::paintMediaSliderTrack): Ditto.
        (WebCore::RenderThemeSafari::paintMediaSliderThumb): Ditto.

        * rendering/RenderThemeWin.cpp:
        (WebCore::RenderThemeWin::adjustSliderThumbSize): Ditto.
        (WebCore::RenderThemeWin::paintMediaFullscreenButton): Ditto.
        (WebCore::RenderThemeWin::paintMediaMuteButton): Ditto.
        (WebCore::RenderThemeWin::paintMediaPlayButton): Ditto.
        (WebCore::RenderThemeWin::paintMediaSeekBackButton): Ditto.
        (WebCore::RenderThemeWin::paintMediaSeekForwardButton): Ditto.
        (WebCore::RenderThemeWin::paintMediaSliderTrack): Ditto.
        (WebCore::RenderThemeWin::paintMediaSliderThumb): Ditto.
        * rendering/RenderThemeWin.h:

2009-04-28  Beth Dakin  <bdakin@apple.com>

        Reviewed by Sam Weinig.

        Fix for <rdar://problem/6419515> REGRESSION (r31037): Positioned 
        images with % height are collapsed when printing

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::calcHeight): Make sure we don't ignore 
        printing here!

2009-04-28  Adele Peterson  <adele@apple.com>

        Reviewed by Darin Adler.

        Fix for <rdar://problem/6617298> Typing delete on an unquoted blank line unquotes the preceding, quoted blank line

        Test: editing/deleting/type-delete-after-quote.html

        When a selection is deleted that contains a whole number paragraphs plus a line break, we refrain from merging paragraphs after the delete,
        since it is unclear to most users that such a selection actually ends at the start of the next paragraph.  However, when a user hits delete 
        with a caret selection, they actually do expect the start of that paragraph to be merged into the paragraph before it.  We can tell that 
        we're in this state because the TypingCommand creates the selection to delete but it doesn't change the endingSelection.  So we can tell
        that if we started with a caret selection, then we're not in this special case where we have to protect the user from unexpected behavior 
        from deleting a range they selected.

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

2009-04-28  Xan Lopez  <xlopez@igalia.com>

        Unreviewed: fix distcheck build, add missing header to file list.

        * GNUmakefile.am:

2009-04-27  Eric Seidel  <eric@webkit.org>

        Reviewed by Sam Weinig.

        Fix foreignObject transform order
        https://bugs.webkit.org/show_bug.cgi?id=25433

        Transforms were being applied in the wrong order.
        When mapping from local to parent, first apply the viewport transform
        then map from the viewport box to the parent box.

        * rendering/RenderForeignObject.cpp:
        (WebCore::RenderForeignObject::localToParentTransform):

2009-04-27  Eric Seidel  <eric@webkit.org>

        Reviewed by Simon Fraser.

        Simplify nodeAtPoint for SVG
        https://bugs.webkit.org/show_bug.cgi?id=25432

        Added a new nodeAtFloatPoint method which takes a FloatPoint
        instead of the *super confusing* x/y tx/ty pairs that HTML uses.
        Mostly this is just lots of minus-lines as the new code is *much* simpler.

        I made all the SVG renderers use the new nodeAtFloatPoint and ASSERT_NOT_REACHED
        for the nodeAtPoint HTML/CSS int x/y version.

        Eventually the rest of CSS/HTML render objects will follow suit
        and move to nodeAtFloatPoint (possibly renamed back to nodeAtPoint), but changing them
        over was well outside the scope of this change.

        SVG hit testing is not actually floating point precise yet, since its still
        passed in an integer x/y.  Certain transform hit-test edge cases are likely fixed
        by moving to FloatPoint here, but I didn't try to find one.

        This should not cause functional changes for common-case hit testing, thus
        no tests changed, nor should new tests be needed.

        * rendering/RenderForeignObject.cpp:
        (WebCore::RenderForeignObject::translationForAttributes):
        (WebCore::RenderForeignObject::paint):
        (WebCore::RenderForeignObject::computeRectForRepaint):
        (WebCore::RenderForeignObject::localToParentTransform):
        (WebCore::RenderForeignObject::layout):
        (WebCore::RenderForeignObject::nodeAtFloatPoint):
        * rendering/RenderForeignObject.h:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::nodeAtFloatPoint):
        * rendering/RenderObject.h:
        * rendering/RenderPath.cpp:
        (WebCore::RenderPath::nodeAtFloatPoint):
        * rendering/RenderPath.h:
        * rendering/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::nodeAtFloatPoint):
        * rendering/RenderSVGContainer.h:
        (WebCore::RenderSVGContainer::pointIsInsideViewportClip):
        * rendering/RenderSVGHiddenContainer.cpp:
        (WebCore::RenderSVGHiddenContainer::nodeAtFloatPoint):
        * rendering/RenderSVGHiddenContainer.h:
        * rendering/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::paint):
        (WebCore::RenderSVGImage::nodeAtFloatPoint):
        * rendering/RenderSVGImage.h:
        (WebCore::RenderSVGImage::localToParentTransform):
        (WebCore::RenderSVGImage::localTransform):
        * rendering/RenderSVGModelObject.cpp:
        (WebCore::RenderSVGModelObject::nodeAtFloatPoint):
        * rendering/RenderSVGModelObject.h:
        * rendering/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::nodeAtFloatPoint):
        * rendering/RenderSVGText.cpp:
        (WebCore::RenderSVGText::nodeAtFloatPoint):
        * rendering/RenderSVGText.h:
        * rendering/RenderSVGViewportContainer.cpp:
        (WebCore::RenderSVGViewportContainer::pointIsInsideViewportClip):
        * rendering/RenderSVGViewportContainer.h:

2009-04-28  Eric Carlson  <eric.carlson@apple.com>

        - fix the Tiger build

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

2009-04-28  Sam Weinig  <sam@webkit.org>

        Reviewed by Beth Dakin.

        Consolidate ScheduleAction creation into ScheduledAction::create.
        Autogenerate JSWorkerContext.clearTimeout and clearInterval.

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::setTimeout):
        (WebCore::JSDOMWindow::setInterval):
        * bindings/js/JSWorkerContextCustom.cpp:
        (WebCore::JSWorkerContext::setTimeout):
        (WebCore::JSWorkerContext::setInterval):
        * bindings/js/ScheduledAction.cpp:
        (WebCore::ScheduledAction::create):
        (WebCore::ScheduledAction::ScheduledAction):
        (WebCore::ScheduledAction::execute):
        * bindings/js/ScheduledAction.h:
        * workers/WorkerContext.cpp:
        (WebCore::DOMWindow::setTimeout):
        (WebCore::DOMWindow::clearTimeout):
        (WebCore::DOMWindow::setInterval):
        (WebCore::DOMWindow::clearInterval):
        * workers/WorkerContext.h:
        * workers/WorkerContext.idl:

2009-04-28  Brady Eidson  <beidson@apple.com>

        Reviewed by Darin Adler

        <rdar://problem/6643219> Crashes after moving nodes between documents with Safari 4 Beta installed

        When moving Nodes between documents we weren't properly updating style declarations.  Certain operations, such
        as creating webarchives, would tickle this bug.

        Tests: webarchive/adopt-attribute-styled-body-webarchive.html
               webarchive/adopt-attribute-styled-node-webarchive.html
               webarchive/adopt-inline-styled-node-webarchive.html

        * dom/Node.cpp:  Add a debug-only mechanism to insure that anyone who overrides (did/will)MoveToNewOwnerDocument
          calls their parent-class implementation after they've done their own work.
        (WebCore::setWillMoveToNewOwnerDocumentWasCalled): 
        (WebCore::setDidMoveToNewOwnerDocumentWasCalled):
        (WebCore::Node::setDocument):
        (WebCore::Node::willMoveToNewOwnerDocument):
        (WebCore::Node::didMoveToNewOwnerDocument):

        * dom/StyledElement.cpp:
        (WebCore::StyledElement::attributeChanged): Add a comment explaining why we don't need to walk the nameAttrMap
          to update style declarations.
        (WebCore::StyledElement::didMoveToNewOwnerDocument): Update the parent pointer for the inline style declaration.
        * dom/StyledElement.h:

        * html/HTMLBodyElement.cpp:
        (WebCore::HTMLBodyElement::didMoveToNewOwnerDocument): Update the parent pointer for the link declaration.
        * html/HTMLBodyElement.h:

2009-04-28  Eric Carlson  <eric.carlson@apple.com>

         Reviewed by Darin Adler.
        
        <rdar://problem/6834876> Don't use BlockExceptions macros until QTKit supports 
        QTMoviePreferredTransformAttribute

        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivate::cacheMovieScale): use @try and @catch instead of 
        BEGIN_BLOCK_OBJC_EXCEPTIONS and END_BLOCK_OBJC_EXCEPTIONS for builds of QTKit 
        that throw an exception on QTMovieCurrentSizeAttribute but don't support 
        QTMoviePreferredTransformAttribute

2009-04-28  Darin Adler  <darin@apple.com>

        Reviewed by Sam Weinig.

        * rendering/RenderText.cpp:
        (WebCore::RenderText::RenderText): Streamline code path to avoid a bit of reference count
        churn and remove a strange unneeeded PassRefPtr typecast. Also added a comment.
        (WebCore::RenderText::setTextInternal): Ditto.

2009-04-27  Eric Seidel  <eric@webkit.org>

        Reviewed by Simon Fraser.

        Simplify how SVG containers paint
        https://bugs.webkit.org/show_bug.cgi?id=25431

        Moved filterBoundingBox() from RenderSVGModelObject to SVGRenderSupport to share with other classes.
        Gave RenderSVGText a modern clippedOverflowRectForRepaint and computeRectForRepaint.
        RenderSVGText now applies transforms at paint() time instead of during chunk draw time
        this should be much more efficient.

        Fixed the order in which RenderSVGViewportContainer applied
        transforms and clips.  We now clip to the viewport first and apply
        all transforms at once.  Also since the viewport logic is now only
        inside RenderSVGViewportContainer (instead of inside RenderSVGContainer)
        we always know we have a viewport.  We now use only viewportSize instead of
        viewport() since RenderSVGViewportContainers can't have x/y offsets.

        We now correctly transform the PaintInfo::rect (damage rect) when applying transforms.
        This allowed us to apply the transform during text paint() instead of at chunk paint
        time. Previously we had to apply the transform during chunk paint time because
        RenderBlock (superclass of RenderSVGBlock) would check intersection with the damageRect
        before telling any of the inlines to draw.  Now that we adjust the damage rect correctly
        we pass the intersection check correctly!  (This probably fixed some <text> redraw bugs
        but since I still have a bunch of those to fix, I've not tried to write additional tests
        to cover these potential fixes yet.)

        SVGRootInlineBox no longer needs to deal with transforms at chunk paint time, yay!

        * rendering/RenderPath.cpp:
        (WebCore::RenderPath::repaintRectInLocalCoordinates):
        (WebCore::RenderPath::paint):
        * rendering/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::paint):
        (WebCore::RenderSVGContainer::repaintRectInLocalCoordinates):
        * rendering/RenderSVGContainer.h:
        (WebCore::RenderSVGContainer::applyViewportClip):
        * rendering/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::layout):
        (WebCore::RenderSVGImage::repaintRectInLocalCoordinates):
        (WebCore::RenderSVGImage::clippedOverflowRectForRepaint):
        (WebCore::RenderSVGImage::computeRectForRepaint):
        * rendering/RenderSVGImage.h:
        * rendering/RenderSVGModelObject.cpp:
        * rendering/RenderSVGModelObject.h:
        * rendering/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::layout):
        (WebCore::RenderSVGRoot::selfWillPaint):
        (WebCore::RenderSVGRoot::paint):
        (WebCore::RenderSVGRoot::viewportSize):
        (WebCore::RenderSVGRoot::calcViewport):
        (WebCore::RenderSVGRoot::localToBorderBoxTransform):
        (WebCore::RenderSVGRoot::parentOriginToBorderBox):
        (WebCore::RenderSVGRoot::borderOriginToContentBox):
        (WebCore::RenderSVGRoot::localToRepaintContainerTransform):
        (WebCore::RenderSVGRoot::localToParentTransform):
        (WebCore::RenderSVGRoot::computeRectForRepaint):
        (WebCore::RenderSVGRoot::nodeAtPoint):
        * rendering/RenderSVGRoot.h:
        * rendering/RenderSVGText.cpp:
        (WebCore::RenderSVGText::clippedOverflowRectForRepaint):
        (WebCore::RenderSVGText::computeRectForRepaint):
        (WebCore::RenderSVGText::paint):
        (WebCore::RenderSVGText::repaintRectInLocalCoordinates):
        * rendering/RenderSVGText.h:
        (WebCore::RenderSVGText::localToParentTransform):
        (WebCore::RenderSVGText::localTransform):
        * rendering/RenderSVGViewportContainer.cpp:
        (WebCore::RenderSVGViewportContainer::applyViewportClip):
        * rendering/RenderSVGViewportContainer.h:
        * rendering/SVGRenderSupport.cpp:
        (WebCore::filterBoundingBoxForRenderer):
        (WebCore::applyTransformToPaintInfo):
        * rendering/SVGRenderSupport.h:
        * rendering/SVGRootInlineBox.cpp:
        (WebCore::SVGRootInlineBoxPaintWalker::chunkStartCallback):
        (WebCore::SVGRootInlineBox::paint):

2009-04-28  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Darin Adler.

        Bug 25453: AX: fall back to PLACEHOLDER attr if form element is not labeled
        https://bugs.webkit.org/show_bug.cgi?id=25453

        Test: accessibility/placeholder.html

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

2009-04-28  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Darin Adler.

        Bug 25452: AX: Don't create addition space AXStaticText element for every bold or link tag
        https://bugs.webkit.org/show_bug.cgi?id=25452

        Test: accessibility/ignore-spacer-elements.html

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

2009-04-28  Mark Rowe  <mrowe@apple.com>

        Reviewed by Sam Weinig.

        Work around <rdar://problem/6833240> by relying on static initialization to zero the entire struct.
        This removes the need for us to explicitly initialize all of the members, which have a tendency
        to change in meaning and number between versions of libxml2.

        * dom/XMLTokenizerLibxml2.cpp:
        (WebCore::):
        (WebCore::sharedXHTMLEntity):
        (WebCore::getXHTMLEntity):

2009-04-28  Steve Falkenburg  <sfalken@apple.com>

        Fix linker warning by specifying /NODEFAULTLIB:LIBCMT for QTMovieWin.
        
        Reviewed by Mark Rowe.

        * WebCore.vcproj/QTMovieWin.vcproj:

2009-04-28  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Darin Adler.

        Bug 25449: AX: Respect the alt tag of ARIA button as AXDescription
        https://bugs.webkit.org/show_bug.cgi?id=25449

        Test: accessibility/img-aria-button-alt-tag.html

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

2009-04-28  Dan Bernstein  <mitz@apple.com>

        Reviewed by John Sullivan.

        - formatting cleanup

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::calcHeight): Corrected indentation and added braces
        around a multi-line "else" clause.

2009-04-28  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Adam Roben
        
        <rdar://problem/6769968> media/video-size-intrinsic-scale.html fails on Windows
        https://bugs.webkit.org/show_bug.cgi?id=25094
        
        Display movies saved with a non-identity matrix at the correct size.

        * platform/graphics/win/QTMovieWin.cpp:
        (QTMovieWinPrivate::QTMovieWinPrivate): Initialize m_widthScaleFactor and m_heightScaleFactor.
        (QTMovieWinPrivate::cacheMovieScale): New, calculate difference between initial
        size and natural size so naturalSize() accounts for non-identity movie matrix.
        (QTMovieWinPrivate::task):Call cacheMovieScale when load state reaches
        kMovieLoadStateLoaded for the first time. kMovieLoadState -> QTMovieLoadState.
        (QTMovieWinPrivate::drawingComplete): kMovieLoadState -> QTMovieLoadState.
        (QTMovieWinPrivate::createGWorld): Don't bother creating gworld until load state reaches
        kMovieLoadStateLoaded because we do not try to draw it before that point.
        (QTMovieWinPrivate::setSize): Do not change movie box before reaching kMovieLoadStateLoaded
        because we need to get the movie's initial size in cacheMovieScale.
        (QTMovieWin::getNaturalSize): Multiply width and height by initial scale.

2009-04-28  Sam Weinig  <sam@webkit.org>

        Reviewed by Dan Bernstein.

        Move timer code from JSDOMWindow to DOMWindow. clearTimeout and
        clearInterval can now be autogenerated.

        * bindings/js/JSDOMWindowBase.cpp:
        * bindings/js/JSDOMWindowBase.h:
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::createScheduledAction):
        (WebCore::JSDOMWindow::setTimeout):
        (WebCore::JSDOMWindow::setInterval):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::setTimeout):
        (WebCore::DOMWindow::clearTimeout):
        (WebCore::DOMWindow::setInterval):
        (WebCore::DOMWindow::clearInterval):
        * page/DOMWindow.h:
        * page/DOMWindow.idl:

2009-04-28  Kevin Watters  <kevinwatters@gmail.com>

        Reviewed by Kevin Ollivier.

        Small optimization, don't get the widget's handle twice in one method.
        
        https://bugs.webkit.org/show_bug.cgi?id=25446

        * platform/wx/WidgetWx.cpp:
        (WebCore::Widget::setFocus):
        (WebCore::Widget::show):
        (WebCore::Widget::hide):
        (WebCore::Widget::frameRect):
        (WebCore::Widget::setFrameRect):
        (WebCore::Widget::invalidateRect):
        (WebCore::Widget::paint):

2009-04-28  Kevin Watters  <kevinwatters@gmail.com>

        Reviewed by Kevin Ollivier.

        ScrollView copy and paste typo fix.
        
        https://bugs.webkit.org/show_bug.cgi?id=25445

        * platform/wx/ScrollViewWx.cpp:
        (WebCore::ScrollView::platformSetScrollbarModes):

2009-04-28  John Sullivan  <sullivan@apple.com>

        <rdar://problem/6820221> REGRESSION: 2-byte character names of images are displayed as %-encoded ASCII

        Reviewed by Adam Roben

        * loader/ImageDocument.cpp:
        (WebCore::ImageTokenizer::finish):
        decode the filename before processing it as part of the image name that's passed to the client

2009-04-28  Maciej Stachowiak  <mjs@apple.com>

        Not reviewed, build fix.

        - fix initialization order to match declaration order to fix release build

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

2009-04-28  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Justin Garcia.

        https://bugs.webkit.org/show_bug.cgi?id=16135
        [GTK] Support caret browsing

        Based on a patch by Alp Toker.

        Implement basic support for caret browsing, active only when the
        corresponding setting is enabled.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleMouseReleaseEvent):
        * page/FocusController.cpp:
        (WebCore::FocusController::advanceFocus):
        (WebCore::clearSelectionIfNeeded):
        (WebCore::FocusController::setFocusedNode):
        * page/Frame.cpp:
        (WebCore::Frame::setFocusedNodeIfNeeded):
        (WebCore::Frame::setSelectionFromNone):
        (WebCore::Frame::respondToChangedSelection):
        * page/Settings.cpp:
        (WebCore::Settings::Settings):
        * page/Settings.h:
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::paintCaret):

2009-04-27  Eric Roman  <eroman@chromium.org>

        Reviewed by Darin Fisher.

        Fix a compile breakage.
        <https://bugs.webkit.org/show_bug.cgi?id=25384>

        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):

2009-04-27  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/6822344> Use of QTMovieCurrentSizeAttribute generates exception and will crash

        QTMovieCurrentSizeAttribute generates an exception with some versions of QTKit, so calculate a 
        multiplier to scale from natural size to current size when a movie is opened and use that to 
        return the correct value from the naturalSize() method.

        * platform/graphics/mac/MediaPlayerPrivateQTKit.h:
        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivate::MediaPlayerPrivate): Initialize m_scaleFactor.
        (WebCore::MediaPlayerPrivate::naturalSize): Return naturalSize transformed by initial scale.
        (WebCore::MediaPlayerPrivate::cacheMovieScale): New, calculate difference between initial
        size and natural size so naturalSize() accounts for non-identity movie matrix.
        (WebCore::MediaPlayerPrivate::updateStates): Call cacheMovieScale when load state reaches
        QTMovieLoadStateLoaded for the first time.

2009-04-27  Beth Dakin  <bdakin@apple.com>

        Reviewed by Dave Hyatt.

        Fix for <rdar://problem/6709057> REGRESSION (4PB-TOT): http://www.winway.com/main3/support/faq.aspx selector doesn't look right or work

        The problem here is that we had a self-painting layer nested inside 
        a non-self-painting layer. We ended up ignoring the self-painting 
        layer both during painting and hit-testing. This patch corrects 
        that. 

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paintLayer):
        (WebCore::RenderLayer::hitTestLayer):

2009-04-27  Ada Chan  <adachan@apple.com>

        If it has been set to allow any HTTPS certificates for this host, set 
        kCFStreamSSLAllowsExpiredCertificates to true to allow expired 
        certificate, and set kCFStreamSSLValidatesCertificateChain false to skip
        certificate chain validation. (<rdar://problem/6382059>)

        Reviewed by John Sullivan.

        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::makeFinalRequest):

2009-04-27  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Adele Peterson
        
        <rdar://problem/6822225> Full page zooming of <video> element in the browser window doesn't work well
        
        Fix a 'size changed' notification thrash that caused standalone video elements
        to continually resize after full page zooming, by using the movie's natual size (which is independent
        of zooming), rather than its current size (which is not).
        
        Note that this regresses <https://bugs.webkit.org/show_bug.cgi?id=25029>, so we have to
        disable the media/video-size-intrinsic-scale.html test. However, we have to stop using
        QTMovieCurrentSizeAttribute anyway; this will be addressed, and the test re-enabled via
        <rdar://problem/6822344>.

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

2009-04-27  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Darin Adler

        <rdar://problem/6642221> REGRESSION: With the Movie widget, movie trailer fails to
        load if movie had been previously viewed
        
        Fix the Dashboard quirk for display:none plug-ins by moving the code from HTMLObjectElement
        to HTMLEmebedElement. It has to be in HTMLEmbedElement because the content we care about uses <embed>.

        * html/HTMLEmbedElement.cpp:
        (WebCore::HTMLEmbedElement::rendererIsNeeded):
        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::rendererIsNeeded):

2009-04-27  Sam Weinig  <sam@webkit.org>

        Reviewed by Geoffrey Garen.

        Move more window event related code into DOMWindow.

        * dom/Document.cpp:
        (WebCore::Document::implicitClose):
        (WebCore::Document::setWindowAttributeEventListener):
        (WebCore::Document::dispatchWindowEvent):
        (WebCore::Document::dispatchLoadEvent):
        * dom/Document.h:
        * dom/Element.cpp:
        * dom/Element.h:
        * dom/Node.cpp:
        * dom/Node.h:
        * html/HTMLBodyElement.cpp:
        (WebCore::HTMLBodyElement::parseMappedAttribute):
        * html/HTMLFrameSetElement.cpp:
        (WebCore::HTMLFrameSetElement::parseMappedAttribute):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::stopLoading):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::dispatchAllPendingUnloadEvents):
        (WebCore::DOMWindow::postMessageTimerFired):
        (WebCore::DOMWindow::dispatchEvent):
        (WebCore::DOMWindow::dispatchEventWithDocumentAsTarget):
        (WebCore::DOMWindow::dispatchLoadEvent):
        (WebCore::DOMWindow::dispatchUnloadEvent):
        (WebCore::DOMWindow::dispatchBeforeUnloadEvent):
        * page/DOMWindow.h:
        * page/Frame.cpp:
        (WebCore::Frame::shouldClose):
        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::parseMappedAttribute):

2009-04-27  Douglas R. Davidson  <ddavidso@apple.com>

        Implement the editing mechanisms and add context menu items for
        <rdar://problem/6724106> WebViews need to implement text checking

        Reviewed by Justin Garcia.

        * editing/Editor.cpp:
        * editing/Editor.h:
        * editing/TypingCommand.cpp:
        * loader/EmptyClients.h:
        * page/ContextMenuController.cpp:
        * page/EditorClient.h:
        * page/mac/WebCoreViewFactory.h:
        * platform/ContextMenu.cpp:
        * platform/ContextMenuItem.h:
        * platform/LocalizedStrings.h:
        * platform/mac/LocalizedStringsMac.mm:

2009-04-27  Sam Weinig  <sam@webkit.org>

        Reviewed by Geoffrey Garen.

        Fix for <rdar://problem/6772944> REGRESSION (r42223): PLT 2% slower, i-Bench 3% slower

        Be slightly less eager in collecting after page close/navigation by increasing
        the time before collection from 0 seconds to .5 seconds.

        3% speedup on the PLT.

        * bindings/js/GCController.cpp:
        (WebCore::GCController::garbageCollectSoon):

2009-04-27  David Kilzer  <ddkilzer@apple.com>

        Consolidate runtime application checks for Apple Mail and Safari

        Reviewed by Mark Rowe and Darin Adler.

        * WebCore.base.exp: Added exports.
        * WebCore.xcodeproj/project.pbxproj: Added
        RuntimeApplicationChecks.{h|mm} source files to the project.
        * page/mac/EventHandlerMac.mm:
        (WebCore::EventHandler::needsKeyboardEventDisambiguationQuirks):
        Removed local checkedSafari and isSafari variables and switched
        to use applicationIsSafari().
        * platform/mac/RuntimeApplicationChecks.h: Added.
        * platform/mac/RuntimeApplicationChecks.mm: Added.
        (WebCore::applicationIsAppleMail): Runtime application check for
        Apple Mail.
        (WebCore::applicationIsSafari): Runtime application check for
        Safari.

2009-04-27  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Darin Adler.

        Bug 25374: AX: No AXValue change sent when text is auto-inserted
        https://bugs.webkit.org/show_bug.cgi?id=25374

        First patch caused some regression tests to fail. 

        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::setInnerTextValue):

2009-04-16  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        https://bugs.webkit.org/show_bug.cgi?id=21546
        [GTK] ATK accessibility enhancements

        Based on a patch by Alp Toker.

        Cover more WebCore role -> ATK role conversions.

        * page/gtk/AccessibilityObjectWrapperAtk.cpp:

2009-04-18  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        https://bugs.webkit.org/show_bug.cgi?id=21546
        [GTK] ATK accessibility enhancements

        Do not call ATK setters in the getters, just return the
        value. Among other things calling the setter will emit the notify
        signal, which is wrong.

        * page/gtk/AccessibilityObjectWrapperAtk.cpp:

2009-04-16  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        https://bugs.webkit.org/show_bug.cgi?id=21546
        [GTK] ATK accessibility enhancements

        Based on a patch by Alp Toker.

        Implement AtkImage interface.

        * page/gtk/AccessibilityObjectWrapperAtk.cpp:

2009-04-27  Gustavo Noronha Silva  <gns@gnome.org>

        Unreviewed debug build fix.

        * platform/gtk/gtk2drawing.c:
        (moz_gtk_toggle_paint):

2009-04-27  Dimitri Glazkov  <dglazkov@chromium.org>

        Build fix.

        https://bugs.webkit.org/show_bug.cgi?id=25382
        Remove direct reference to CallFrame.h include to pacify Win build.

        * bindings/js/JSDOMBinding.h: Removed ScriptState.h include.
        * bindings/js/ScriptState.h: Replaced CallFrame.h with JSDOMBinding.h

2009-04-27  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Beth Dakin.

        Bug 25374: AX: No AXValue change sent when text is auto-inserted
        https://bugs.webkit.org/show_bug.cgi?id=25374

        When an input's text value is changed through the DOM, no AXValueChange notification is being sent.

        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::setInnerTextValue):

2009-04-27  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=25382
        Move scriptStateFromNode to ScriptState.

        * bindings/js/JSDOMBinding.cpp: Moved scriptStateFromNode to ScriptState.
        * bindings/js/JSDOMBinding.h: Ditto.
        * bindings/js/ScriptState.cpp:
        (WebCore::scriptStateFromNode): Added.
        * bindings/js/ScriptState.h: Ditto.
        * bindings/v8/ScriptState.cpp:
        (WebCore::scriptStateFromNode): Added.
        * bindings/v8/ScriptState.h: Ditto.
        * dom/NodeFilter.h: Removed JSDOMBinding header include.
        * dom/NodeIterator.h: Ditto.
        * dom/TreeWalker.h: Ditto.

2009-04-27  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Beth Dakin.

        Bug 25428: 5 crashes in DumpRenderTree at com.apple.WebCore • -[AccessibilityObjectWrapper accessibilityAttributeValue:] + 830
        https://bugs.webkit.org/show_bug.cgi?id=25428

        When marking children as changed in accessibility, we cannot rely on the accessibility parent chain existing.
        Instead, the render chain needs to be consulted.

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

2009-04-27  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=25399
        <rdar://problem/6633943> REGRESSION: Many crashes reported accessing Lexis/Nexis database,
        beneath WebCore::Cache::evict

        The crash happened because a cached resource handle was removed from a document's cached
        resources map twice recursively, so a destructor was called for a value in a deleted bucket.
        The first call was from Cache::evict, and when destroying CachedResourceHandle destroyed
        CachedResource, DocLoader::removeCachedResource() was called again, with HashMap being in
        an inconsistent state.

        I couldn't fully reconstruct the loading sequence to make a test.

        * loader/Cache.cpp:
        (WebCore::Cache::revalidateResource): Assert that the resource being revalidated is in cache
        (it makes no sense to revalidate one that isn't).
        (WebCore::Cache::evict): Don't remove the resource from document's map. Removing a resource
        from the cache in no way implies that documents no longer use the old version. This fixes the
        crash, and also fixes many cases of resource content being unavailable in Web Inspector.

        * loader/CachedResource.h:
        (WebCore::CachedResource::setInCache): When bringing a revalidated resource back to cache,
        reset m_isBeingRevalidated to maintain the invariant of resources being revalidated never
        being in cache. This fixes another assertion I saw on LexisNexis search: in rare cases,
        switchClientsToRevalidatedResource() results in the same resource being requested again,
        but we were only enforcing CachedResource invariants after calling this function.
        (WebCore::CachedResource::unregisterHandle): Assert that the counter doesn't underflow.

        * loader/DocLoader.cpp: (WebCore::DocLoader::removeCachedResource): Assert that the passed
        resource is removed, not some other resource that happens to have the same URL (this used to
        fail on LexisNexis search before this patch).

        * loader/ImageDocument.cpp: (WebCore::ImageTokenizer::write): Replaced ASSERT_NOT_REACHED
        with notImplemented(). This method can be legally called via document.write(), and should
        work. LexisNexis takes this code path, but apparently has a fallback for Safari, so it
        doesn't affect site functionality.

        * loader/CachedResource.cpp:
        (WebCore::CachedResource::clearResourceToRevalidate): Don't assert that m_resourceToRevalidate
        is being revalidated - this may no longer be true, because we now reset this member in
        CachedResource::setInCache().

2009-04-27  Dan Bernstein  <mitz@apple.com>

        Reviewed by Sam Weinig.

        - make BidiContext a RefCounted class, starting with a refcount of 1,
          and share the root BidiContexts.

        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::drawBidiText): Use BidiContext::create().
        * platform/text/BidiContext.cpp:
        (WebCore::BidiContext::create): Added. For the four "root" contexts,
        returns a reference to a shared static BidiContext.
        * platform/text/BidiContext.h:
        (WebCore::BidiContext::BidiContext):
        * platform/text/BidiResolver.h:
        (WebCore::::commitExplicitEmbedding): Use BidiContext::create().
        * rendering/bidi.cpp:
        (WebCore::RenderBlock::determineStartPosition): Ditto.

2009-04-27  Jan Michael Alonzo  <jmalonzo@webkit.org>

        Rubber-stamped by Gustavo Noronha.

        Build fix for r42893: change GDK_exclaim to GDK_exclam

        * platform/chromium/KeyCodeConversionGtk.cpp:
        (WebCore::windowsKeyCodeForKeyEvent):
        * platform/gtk/KeyEventGtk.cpp:
        (WebCore::windowsKeyCodeForKeyEvent):

2009-04-27  Fumitoshi Ukai  <ukai@google.com>

        Reviewed by Xan Lopez.

        Fix wrong key code conversion.

        Missing conversion for GDK_exlaim ('!').
        Parens are opposite: GDK_parenleft is open paren '('
        and GDK_parenright is close paren ')'.
        https://bugs.webkit.org/show_bug.cgi?id=25367

        * platform/chromium/KeyCodeConversionGtk.cpp:
        (WebCore::windowsKeyCodeForKeyEvent):
        * platform/gtk/KeyEventGtk.cpp:
        (WebCore::windowsKeyCodeForKeyEvent):

2009-04-27  Jan Michael Alonzo  <jmalonzo@webkit.org>

        Reviewed by Gustavo Noronha.

        [Gtk] gtkdrawing update
        https://bugs.webkit.org/show_bug.cgi?id=25408

        Update to the 25 Apr 2009 version of gtk2drawing.c and
        gtkdrawing.h from Mozilla (http://hg.mozilla.org/mozilla-central)

        * platform/gtk/gtk2drawing.c:
        (setup_widget_prototype):
        (moz_gtk_get_combo_box_entry_arrow):
        (ensure_toolbar_widget):
        (ensure_tree_header_cell_widget):
        (moz_gtk_init):
        (moz_gtk_button_get_inner_border):
        (moz_gtk_toggle_paint):
        (moz_gtk_caret_paint):
        (moz_gtk_entry_paint):
        (moz_gtk_tree_header_cell_paint):
        (moz_gtk_combo_box_paint):
        (moz_gtk_toolbar_separator_paint):
        (moz_gtk_menu_separator_paint):
        (moz_gtk_get_widget_border):
        (moz_gtk_get_tab_scroll_arrow_size):
        (moz_gtk_get_toolbar_separator_width):
        (moz_gtk_get_menu_separator_height):
        (moz_gtk_widget_paint):
        (moz_gtk_shutdown):
        * platform/gtk/gtkdrawing.h:

2009-04-27  Ariya Hidayat  <ariya.hidayat@nokia.com>

        Reviewed by Tor Arne Vestbø.

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

        [Qt] Widget painting should follow the layout direction (LTR, RTL)
        of the element style, not the application layout direction.

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

2009-04-26  Sam Weinig  <sam@webkit.org>

        Reviewed by Dan Bernstein.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=25412
        The Window object should be an EventTarget

        Test: fast/dom/Window/dispatchEvent.html

        * bindings/js/JSEventTarget.cpp:
        (WebCore::toJS): Add DOMWindow case.
        (WebCore::toEventTarget): Ditto.

        * dom/EventTarget.cpp:
        (WebCore::EventTarget::toDOMWindow): Added.
        * dom/EventTarget.h:

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::scriptExecutionContext): Added. Returns the document.
        (WebCore::DOMWindow::dispatchEvent): Added.
        * page/DOMWindow.h:
        (WebCore::DOMWindow::toDOMWindow):
        (WebCore::DOMWindow::refEventTarget):
        (WebCore::DOMWindow::derefEventTarget):
        * page/DOMWindow.idl:

2009-04-26  Sam Weinig  <sam@webkit.org>

        Reviewed by Eric Seidel.

        Remove scons-based build system.

        * WebCore.scons: Removed.

2009-04-26  Darin Adler  <darin@apple.com>

        Suggested by Darin Fisher.

        Improve the fix for bug 25355: Crash when Creating New Tab or New Window when set to open Same Page
        https://bugs.webkit.org/show_bug.cgi?id=25355
        rdar://problem/6823543

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadItem): Allow shouldScroll to be true even if m_currentHistoryItem is 0.
        Not sure if when this case can really arise in practice, but it's good to match the original
        logic more closely.

2009-04-25  Dirk Schulze  <krit@webkit.org>

        Reviewed by Oliver Hunt.

        A width or height of zero for the destination or source rect of an
        image causes a not invertible pattern matrix.
        This crahes newer versions of Cairo and give some graphic gliches in
        Canvas.
        With this patch we check if there is something to draw and return if not.

        * platform/graphics/cairo/ImageCairo.cpp:
        (WebCore::BitmapImage::draw):

2009-04-25  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Darin Adler
        
        https://bugs.webkit.org/show_bug.cgi?id=25390
        
        Fix point mapping and hit testing through transforms and perspective
        with ENABLE_3D_RENDERING. Previously the code did the more efficient
        move(), rather than getTransformFromContainer(), when the object had
        no transform. However, this skipped the application of perspective
        when the immediate child of the perspective element had no transform
        itself.

        Test: transforms/3d/point-mapping/3d-point-mapping-3.html

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::mapLocalToContainer):
        (WebCore::RenderBox::mapAbsoluteToLocalPoint):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::createLocalTransformState):
        Call shouldUseTransformFromContainer() to determine if we need to
        go through the more expensive getTransformFromContainer() code
        path.

        * rendering/RenderObject.h:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::shouldUseTransformFromContainer):
        New method that indicates whether we need use getTransformFromContainer()
        when mapping points through renderers, and hit testing.

2009-04-25  Adele Peterson  <adele@apple.com>

        Reviewed by Oliver Hunt.

        Fix for <rdar://problem/6712771> REGRESSION(34681): Text is no longer underlined after delete
        https://bugs.webkit.org/show_bug.cgi?id=25396

        Test: editing/deleting/delete-br-013.html

        * editing/CompositeEditCommand.cpp: (WebCore::CompositeEditCommand::moveParagraphs):
         Only preserve an empty paragraph's style when moving paragraphs around if the selection is still 
         in an empty paragraph after the move occurs.  This was causing the empty paragraph's style to overwrite
         the previous paragraph's style during a delete of an empty paragraph.

2009-04-25  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/6808171> REGRESSION (3-4): Standalone media documents don't 
        properly display non-linear media

        If a media engine claims it can support the MIME type, WebCore now creates a <video>
        element for document mode media files instead of an <embed> element. Because WebCore's 
        QuickTime backed media players do not support every kind of media the QuickTime plug-in
        supports, and because it is not always possible to tell what type of media is in a file 
        without opening and parsing it, some types of media that used to be displayed properly
        by a plug-in are no longer supported properly. To fix this, if the media engine
        sees that it can not completely support a media file it now informs the media 
        document, which replaces the <video> element with an <embed>.
        
        r42301 landed support for OSX. This patch modifies those changes slighly and adds support
        for Windows.

        * loader/MediaDocument.cpp:
        (WebCore::MediaDocument::MediaDocument): Initialize m_replaceMediaElementTimer.
        (WebCore::MediaDocument::mediaElementSawUnsupportedTracks): Don't replace the <video> 
        element immediately.
        (WebCore::MediaDocument::replaceMediaElementTimerFired): Renamed from replaceVideoWithEmbed.
        Set body margin-width and margin-height to 0 as that is what a PluginDocument uses.
        * loader/MediaDocument.h:

        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivate::loadStateChanged): Don't do anything if m_hasUnsupportedTracks.
        (WebCore::MediaPlayerPrivate::rateChanged): Ditto.
        (WebCore::MediaPlayerPrivate::timeChanged): Ditto.
        (WebCore::MediaPlayerPrivate::didEnd): Ditto.
        (WebCore::MediaPlayerPrivate::repaint): Ditto.
        (WebCore::MediaPlayerPrivate::paint): Ditto.
        (WebCore::MediaPlayerPrivate::sawUnsupportedTracks): Set m_hasUnsupportedTracks before callback.

        * platform/graphics/win/MediaPlayerPrivateQuickTimeWin.cpp:
        (WebCore::MediaPlayerPrivate::MediaPlayerPrivate): Initialize m_totalTrackCount and m_hasUnsupportedTracks.
        (WebCore::MediaPlayerPrivate::updateStates): Call sawUnsupportedTracks if the movie has unsupported
        media type(s) or if it fails completely.
        (WebCore::MediaPlayerPrivate::sawUnsupportedTracks): New, disable the movie object and tell the
        media player client we won't play this movie correctly.
        (WebCore::MediaPlayerPrivate::didEnd): Don't do anything if m_hasUnsupportedTracks.
        (WebCore::MediaPlayerPrivate::setSize): Ditto.
        (WebCore::MediaPlayerPrivate::setVisible): Ditto.
        (WebCore::MediaPlayerPrivate::paint): Ditto.
        (WebCore::MediaPlayerPrivate::movieEnded): Ditto.
        (WebCore::MediaPlayerPrivate::movieLoadStateChanged): Ditto.
        (WebCore::MediaPlayerPrivate::movieTimeChanged): Ditto.
        (WebCore::MediaPlayerPrivate::movieNewImageAvailable): Ditto.
        * platform/graphics/win/MediaPlayerPrivateQuickTimeWin.h:

        * platform/graphics/win/QTMovieWin.cpp:
        (QTMovieWinPrivate::task): Stop the task timer if we were disabled during the load state
        change callback.
        (QTMovieWinPrivate::drawingComplete): Don't do anything if disabled.
        (QTMovieWin::QTMovieWin): Initialize m_disabled.
        (QTMovieWin::disableUnsupportedTracks): Return total number of tracks.
        (QTMovieWin::setDisabled): New, set m_disabled flag.
        * platform/graphics/win/QTMovieWin.h:

2009-04-25  Jan Michael Alonzo  <jmalonzo@webkit.org>

        Reviewed by Xan Lopez.

        [GTK] Error reporting
        https://bugs.webkit.org/show_bug.cgi?id=18344

        Fix the SOUP resource handle to report SOUP_HTTP_ERROR for Soup
        errors and G_IO_ERROR for gio errors.

        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::finishedCallback):
        (WebCore::ResourceHandle::startHttp):
        (WebCore::ResourceHandle::start):
        (WebCore::readCallback):
        (WebCore::openCallback):
        (WebCore::queryInfoCallback):
        (WebCore::ResourceHandle::startGio):

2009-04-25  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Mark Rowe.

        Only set the new URL once for the request. Doing it a second time
        after the call to willSendRequest was causing crashes when
        redirected requests got cancelled.

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

2009-04-24  Kevin Ollivier  <kevino@theolliviers.com>

        wx build fix. Adding ScriptEventListener.cpp.

        * WebCoreSources.bkl:

2009-04-24  Sergio GarcÃ­a-Cuevas  <sergio_gcg@telefonica.net>

        Reviewed by Gustavo Noronha.

        https://bugs.webkit.org/show_bug.cgi?id=17267
        [GTK] Primary selection/clipboard support

        Copy the link location to the primary selection as well as the
        clipboard selection when using the "copy link selection" context
        menu entry.

        * platform/gtk/PasteboardGtk.cpp:
        (WebCore::Pasteboard::writeURL):
        * platform/gtk/PasteboardHelper.h:

2009-04-24  Eric Seidel  <eric@webkit.org>

        Reviewed by Simon Fraser.

        https://bugs.webkit.org/show_bug.cgi?id=25383
        Changing SVG size via JS does not update CSS width/height

        Add an ugly hack to fix CSS width/height updates from JS.

        We can't easily call setAttribute when width/height changes
        as that would cause infinite recursion (as we'd try to set
        the animation storage from the attributes)

        For now, when we get notification that JS changed width/height
        we copy what parseMappedAttribute does and update the CSS values as well.

        A better fix for this would be:
        https://bugs.webkit.org/show_bug.cgi?id=25383

        * svg/SVGSVGElement.cpp:
        (WebCore::updateCSSForAttribute):
        (WebCore::SVGSVGElement::svgAttributeChanged):

2009-04-24  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Dan Bernstein.

        We should not show the deletion UI for blockquotes in mail but they do 
        show now that we only check for one visible border.

        * editing/DeleteButtonController.cpp:
        (WebCore::isDeletableElement):

2009-04-24  Dan Bernstein  <mitz@apple.com>

        - address Hyatt's review comments on the last patch

        * rendering/RenderLayer.cpp:
        (WebCore::performOverlapTests):
        (WebCore::RenderLayer::paintLayer):

2009-04-24  Dan Bernstein  <mitz@apple.com>

        Reviewed by Dave Hyatt.

        - fix https://bugs.webkit.org/show_bug.cgi?id=5909
          <rdar://problem/5863349> overlapping element leaves trail when
          scrolling iframe

        * WebCore.xcodeproj/project.pbxproj: Added OverlapTestRequestClient.h.

        * page/FrameView.cpp:
        (WebCore::FrameView::reset): Initialize m_isOverlapped.
        (WebCore::FrameView::useSlowRepaints): Also check m_isOverlapped.
        (WebCore::FrameView::removeSlowRepaintObject): Use useSlowRepaints()
        so overlapping is taken into account.
        (WebCore::FrameView::setIsOverlapped): Added. Sets m_isOverlapped and
        enables or disables copy-on-scroll accordingly.

        * page/FrameView.h:
        Added setIsOverlapped() and m_isOverlapped.

        * rendering/OverlapTestRequestClient.h: Added. During foreground painting,
        an OverlapTestRequestClient can make a request to test if any subsequently-
        painted layers overlap a rect. The test result is delivered to the
        requestClient via setOverlapTestResult().
        (WebCore::OverlapTestRequestClient::~OverlapTestRequestClient):

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paint): Pass an OverlapTestRequestMap to
        paintLayer(). When done painting, inform any remaining requestClients that
        they are not overlapped.

        (WebCore::RenderLayer::paintLayer): Take an OverlapTestRequestMap and
        pass it down to child and reflection layers. Inform requestClients if this
        layer overlaps their requested rects.

        * rendering/RenderLayer.h:

        * rendering/RenderObject.h:
        (WebCore::RenderObject::PaintInfo::PaintInfo): Added an
        OverlapTestRequestMap member.

        * rendering/RenderReplica.cpp:
        (WebCore::RenderReplica::paint): For now, pass a 0 OverlapTestRequestMap
        to paintLayer().

        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::paint): For FrameViews, request an overlap test
        with the frame.
        (WebCore::RenderWidget::setOverlapTestResult): Call
        FrameView::setIsOverlapped() with the result of the overlap test.

        * rendering/RenderWidget.h: Made RenderWidget an OverlapTestRequestClient.

2009-04-24  David Hyatt  <hyatt@apple.com>

        Reviewed by Simon Fraser, Dan Bernstein.

        Speed up the PLT by devirtualizing the height() function on InlineBox.  virtualizing it in order to make the height() computation dynamic caused
        a ~0.5% slowdown.  This patch does the following to get the speed back:
        
        (a) Devirtualizes isText and forces inline box creators to set the bit as needed.  This actually resulted in simplified code, since ListMarkerBox could
        then be removed.
        (b) Reduces the height() call count.  In some cases the code was repeatedly calling height(), which used to be fine when the function was just an inline
        member variable access.  The call sites have been patched to cut down on extra height() calls now that it is more expensive.
        (c) Devirtualize height() except on SVG boxes.  For all non-SVG, the height() function on InlineBox handles the computation.  For SVG boxes, a new bit has
        been set on InlineBoxes (isSVG()) that indicates that the virtual svgBoxHeight() function should be called to retrieve the height instead.

        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * rendering/InlineBox.cpp:
        (WebCore::InlineBox::height):
        * rendering/InlineBox.h:
        (WebCore::InlineBox::InlineBox):
        (WebCore::InlineBox::isSVG):
        (WebCore::InlineBox::setIsSVG):
        (WebCore::InlineBox::isText):
        (WebCore::InlineBox::setIsText):
        (WebCore::InlineBox::svgBoxHeight):
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::placeBoxesVertically):
        (WebCore::InlineFlowBox::paintBoxDecorations):
        (WebCore::InlineFlowBox::paintMask):
        * rendering/InlineFlowBox.h:
        * rendering/InlineTextBox.cpp:
        * rendering/InlineTextBox.h:
        * rendering/ListMarkerBox.cpp: Removed.
        * rendering/ListMarkerBox.h: Removed.
        * rendering/RenderListMarker.cpp:
        (WebCore::RenderListMarker::createInlineBox):
        * rendering/RenderSVGInline.cpp:
        (WebCore::RenderSVGInline::createFlowBox):
        * rendering/RenderSVGInlineText.cpp:
        (WebCore::RenderSVGInlineText::createTextBox):
        * rendering/RenderSVGText.cpp:
        (WebCore::RenderSVGText::createRootBox):
        * rendering/RenderText.cpp:
        (WebCore::RenderText::createInlineTextBox):
        * rendering/RootInlineBox.cpp:
        * rendering/RootInlineBox.h:
        * rendering/SVGInlineFlowBox.h:
        (WebCore::SVGInlineFlowBox::svgBoxHeight):
        * rendering/SVGInlineTextBox.h:
        (WebCore::SVGInlineTextBox::svgBoxHeight):
        * rendering/SVGRootInlineBox.h:
        (WebCore::SVGRootInlineBox::svgBoxHeight):

2009-04-24  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=25370
        Introduce ScriptEventListener to refactor away direct references to
        JSLazyEventListener in WebCore code.

        * GNUmakefile.am: Added ScriptEventListener to project.
        * WebCore.pro: Ditto.
        * WebCore.vcproj/WebCore.vcproj: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * bindings/js/JSDOMGlobalObject.cpp: Removed unused JSLazyEventListener include.
        * bindings/js/JSLazyEventListener.cpp: Moved createAttributeEventListener helpers
            to ScriptEventListener.
        * bindings/js/JSLazyEventListener.h: Ditto.
        * bindings/js/ScriptController.cpp: Removed unused JSLazyEventListener include.
        * bindings/js/ScriptEventListener.cpp: Added.
        * bindings/js/ScriptEventListener.h: Added.
        * bindings/v8/ScriptEventListener.cpp: Added.
        * bindings/v8/ScriptEventListener.h: Added.
        * dom/Document.cpp: Renamed JSLazyEventListener include to ScriptEventListener.
        * html/HTMLBodyElement.cpp: Ditto.
        * html/HTMLButtonElement.cpp: Ditto.
        * html/HTMLElement.cpp: Ditto.
        * html/HTMLFormElement.cpp: Ditto.
        * html/HTMLFrameElementBase.cpp: Ditto.
        * html/HTMLFrameSetElement.cpp: Ditto.
        * html/HTMLImageElement.cpp: Ditto.
        * html/HTMLInputElement.cpp: Ditto.
        * html/HTMLObjectElement.cpp: Ditto.
        * html/HTMLScriptElement.cpp: Ditto.
        * html/HTMLSelectElement.cpp: Ditto.
        * html/HTMLTextAreaElement.cpp: Ditto.
        * svg/SVGElement.cpp: Ditto.
        * svg/SVGSVGElement.cpp: Ditto.

2009-04-24  Darin Adler  <darin@apple.com>

        Reviewed by Sam Weinig.

        Bug 25355: Crash when Creating New Tab or New Window when set to open Same Page
        https://bugs.webkit.org/show_bug.cgi?id=25355
        rdar://problem/6823543

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadItem): Added a null check.

2009-04-24  Eric Seidel  <eric@webkit.org>

        Reviewed by Simon Fraser.

        Fix RenderSVGImage to dump with full bounds and style information.
        https://bugs.webkit.org/show_bug.cgi?id=25377
        
        No functional changes, we're just now including more info in render tree dumps.

        * rendering/RenderObject.h:
        (WebCore::RenderObject::isSVGImage):
        * rendering/RenderSVGImage.h:
        (WebCore::RenderSVGImage::isSVGImage):
        * rendering/RenderTreeAsText.cpp:
        (WebCore::write):
        * rendering/SVGRenderTreeAsText.cpp:
        (WebCore::operator<<):
        (WebCore::write):
        * rendering/SVGRenderTreeAsText.h:

2009-04-24  David Levin  <levin@chromium.org>

        Reviewed by NOBODY (chromium build fix).

        Rename "isInline" => "isAttribute" in v8 bindings (jsc was done in r42699).

        * bindings/v8/V8AbstractEventListener.cpp:
        (WebCore::V8AbstractEventListener::V8AbstractEventListener):
        (WebCore::V8AbstractEventListener::invokeEventHandler):
        * bindings/v8/V8AbstractEventListener.h:
        * bindings/v8/V8EventListenerList.cpp:
        (WebCore::V8EventListenerList::add):
        (WebCore::V8EventListenerList::remove):
        (WebCore::V8EventListenerList::clear):
        * bindings/v8/V8LazyEventListener.h:
        (WebCore::V8LazyEventListener::virtualisAttribute):
        * bindings/v8/custom/V8CustomEventListener.cpp:
        (WebCore::V8EventListener::V8EventListener):
        * bindings/v8/custom/V8CustomEventListener.h:
        (WebCore::V8EventListener::create):
        (WebCore::V8EventListener::virtualisAttribute):

2009-04-24  Nate Chapin  <japhet@google.com>

        Reviewed by Dimitri Glazkov.

        https://bugs.webkit.org/show_bug.cgi?id=25343
        Fix Chromium/Skia bug where -webkit-box-shadow with 0,0 offset 
        ignores blur.

        * WebCore\platform\graphics\skia\GraphicsContextSkia.cpp
         (WebCore::GraphicsContext::setPlatformShadow): Add check against
         blur before clearing looper.

2009-04-24  Eric Roman  <eroman@chromium.org>

        Reviewed by Darin Adler.

        Initialize TextIterator::m_textLength to 0.

        This assures that TextIterator::length() will return 0 for cases when TextIterator's constructor returns early (because there is nothing to iterate over in the range).

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

        Test: editing/selection/doubleclick-whitespace-img-crash.html

        * editing/TextIterator.cpp:
        (WebCore::TextIterator::TextIterator):

2009-04-24  Fumitoshi Ukai  <ukai@google.com>

        Reviewed by Dimitri Glazkov.

        https://bugs.webkit.org/show_bug.cgi?id=25329
        Add indexed access method in v8 binding of ClientRectList.

        * bindings/v8/custom/V8ClientRectListCustom.cpp: Added.

2009-04-24  Fumitoshi Ukai  <ukai@google.com>

        Reviewed by Dimitri Glazkov.

        https://bugs.webkit.org/show_bug.cgi?id=25257
        Use null for unspecified event listener attributes of XMLHttpRequest
        and XMLHttpRequestUpload in v8 binding.

        cf. http://www.whatwg.org/specs/web-apps/current-work/#event-handler-attributes
        An event handler attribute, unless otherwise specified, can either
        have the value null or be set to a Function object.
        Initially, an event handler attribute must be set to null.

        Test: fast/xmlhttprequest/xmlhttprequest-default-attributes.html

        * bindings/v8/custom/V8XMLHttpRequestCustom.cpp:
        (WebCore::ACCESSOR_GETTER): Changed to use v8::Null().
        * bindings/v8/custom/V8XMLHttpRequestUploadCustom.cpp:
        (WebCore::ACCESSOR_GETTER): Ditto.

2009-04-24  Darin Adler  <darin@apple.com>

        Reviewed by Adam Roben.

        <rdar://problem/6663836> CrashTracer: crashes in Safari at com.apple.WebCore • WebCore::reportException + 1513

        * bindings/js/JSDOMBinding.cpp:
        (WebCore::reportException): Added a null check.

2009-04-24  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Darin Adler
        
        https://bugs.webkit.org/show_bug.cgi?id=23219

        Add support for transtions and animations of background-position, -webkit-background-size,
        -webkit-mask-position and -webkit-mask-size.

        Tests: transitions/background-transitions.html
               transitions/mask-transitions.html

        * page/animation/AnimationBase.cpp:
        (WebCore::blendFunc):
        Add a blend func for LengthSize.
        
        (WebCore::ensurePropertyMap):
        Add wrappers for the new properties.
        
        (WebCore::addShorthandProperties):
        Add a shorthand property for CSSPropertyBackgroundPosition to map to
        CSSPropertyBackgroundPositionX and CSSPropertyBackgroundPositionY, 
        add CSSPropertyWebkitMask for CSSPropertyWebkitMaskPosition, and add
        CSSPropertyWebkitMaskPosition for CSSPropertyWebkitMaskPositionX and
        CSSPropertyWebkitMaskPositionY.
        
        * rendering/style/RenderStyle.h:
        (WebCore::InheritedFlags::setBackgroundXPosition):
        (WebCore::InheritedFlags::setBackgroundYPosition):
        (WebCore::InheritedFlags::setBackgroundSize):
        (WebCore::InheritedFlags::setMaskXPosition):
        (WebCore::InheritedFlags::setMaskYPosition):
        (WebCore::InheritedFlags::setMaskSize):
        Add setters for the properties that can be animated now.

2009-04-24  Adele Peterson  <adele@apple.com>

        Reviewed by Darin Adler.

        Fix for <rdar://problem/5089327> Newline gets stripped when pasting whole lines in certain markup

        Test: editing/pasteboard/paste-blockquote-after-blockquote.html

        When we have matching quote levels, its ok to merge the starts of the inserted and existing blocks more frequently.
        But we should only merge here if the selection start was inside a mail blockquote.  This prevents against removing a 
        blockquote from newly pasted quoted content that was pasted into an unquoted position.  If that unquoted position happens 
        to be right after another blockquote, we don't want to merge and risk stripping a valid block (and newline) from the pasted content.

        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::shouldMergeStart): Also added an early return to always return false when we're already moving paragraphs.
        (WebCore::ReplaceSelectionCommand::doApply): Removed redundant check for when we're moving paragraphs.
        * editing/ReplaceSelectionCommand.h:

2009-04-23  Francisco Tolmasky  <francisco@280north.com>

        BUG 24604: WebKit profiler reports incorrect total times
        <https://bugs.webkit.org/show_bug.cgi?id=24604>

        Reviewed by Timothy Hatcher and Kevin McCullough.

        Made it so that most of the profiler functions now match the behavior of Shark. Most notably, in the
        heavy view, child nodes now represent the statistics of the root node. Each root node of heavy view
        displays flattened statistics for a particular function that ran during the profile, and each child
        of these root nodes represents a callpath that lead to it. Thus, the statistics for each of these child
        nodes should show how much of the root nodes values came from it. For example, if you had the following to
        stacks take place during the profile:

        A ->calls 1 times-> B ->calls 2 times-> C
        D ->calls 4 times-> C

        The tree for the C root node would look like this:

        C -> B -> A
          -> D

        The number of calls values would look like this:

        C (6) -> B (2) -> A(2)
              -> D (4)

        What this means is that "2 of the total 6 C calls came from B", "2 of the total C calls came from A", and
        "4 of the total C calls came from D".  Notice that the "A ->calls 2 time->" is completely ignored. This becomes
        particularly tricky during recursive calls, because each child note can represent multiple possible paths. This
        is the reason that we would get things like 40000% previously with recursion.

        This is also the way gprof works, and as close as we can get to Shark's behavior (Shark is not instrumented so it
        can't know exactly how many calls came from where, etc).

        * English.lproj/localizedStrings.js: Added "Average" for average times in the profile.
        * inspector/JavaScriptProfile.cpp:
        (WebCore::ProfileClass):
        * inspector/JavaScriptProfileNode.cpp:
        (WebCore::getParent):
        (WebCore::getHead):
        (WebCore::getCallUID):
        (WebCore::ProfileNodeClass):
        * inspector/front-end/BottomUpProfileDataGridTree.js: Added.
        (WebInspector.BottomUpProfileDataGridTree):
        (WebInspector.BottomUpProfileDataGridTree.prototype.focus):
        (WebInspector.BottomUpProfileDataGridNode):
        (WebInspector.BottomUpProfileDataGridNode.prototype._takePropertiesFromProfileDataGridNode):
        (WebInspector.BottomUpProfileDataGridNode.prototype._keepOnlyChild):
        (WebInspector.BottomUpProfileDataGridNode.prototype._exclude):
        (WebInspector.BottomUpProfileDataGridNode.prototype._merge):
        (WebInspector.BottomUpProfileDataGridNode.prototype._populate):
        * inspector/front-end/DataGrid.js:
        (WebInspector.DataGrid.prototype.insertChild):
        (WebInspector.DataGrid.prototype.removeChild):
        (WebInspector.DataGrid.prototype.removeChildren):
        (WebInspector.DataGridNode.prototype.set hasChildren):
        (WebInspector.DataGridNode.prototype.get hasChildren):
        * inspector/front-end/ProfileDataGridTree.js: Added.
        (WebInspector.ProfileDataGridNode):
        (WebInspector.ProfileDataGridNode.prototype.get data.formatMilliseconds):
        (WebInspector.ProfileDataGridNode.prototype.get data):
        (WebInspector.ProfileDataGridNode.prototype.createCell):
        (WebInspector.ProfileDataGridNode.prototype.select):
        (WebInspector.ProfileDataGridNode.prototype.deselect):
        (WebInspector.ProfileDataGridNode.prototype.expand):
        (WebInspector.ProfileDataGridNode.prototype.insertChild):
        (WebInspector.ProfileDataGridNode.prototype.removeChild):
        (WebInspector.ProfileDataGridNode.prototype.removeChildren):
        (WebInspector.ProfileDataGridNode.prototype.findChild):
        (WebInspector.ProfileDataGridNode.prototype.get averageTime):
        (WebInspector.ProfileDataGridNode.prototype.get averagePercent):
        (WebInspector.ProfileDataGridNode.prototype.get selfPercent):
        (WebInspector.ProfileDataGridNode.prototype.get totalPercent):
        (WebInspector.ProfileDataGridNode.prototype._save):
        (WebInspector.ProfileDataGridNode.prototype._restore):
        (WebInspector.ProfileDataGridNode.prototype._merge):
        (WebInspector.ProfileDataGridTree):
        (WebInspector.ProfileDataGridTree.prototype.get expanded):
        (WebInspector.ProfileDataGridTree.prototype.appendChild):
        (WebInspector.ProfileDataGridTree.prototype.insertChild):
        (WebInspector.ProfileDataGridTree.prototype.removeChildren):
        (WebInspector.ProfileDataGridTree.prototype.findChild.WebInspector.ProfileDataGridNode.prototype.findChild.sort.WebInspector.ProfileDataGridNode.prototype.sort._save):
        (WebInspector.ProfileDataGridTree.propertyComparator.comparator):
        (WebInspector.ProfileDataGridTree.propertyComparator.else.comparator):
        (WebInspector.ProfileDataGridTree.propertyComparator):
        * inspector/front-end/ProfileView.js:
        (WebInspector.ProfileView):
        (WebInspector.ProfileView.prototype.set profile):
        (WebInspector.ProfileView.prototype.get bottomUpProfileDataGridTree):
        (WebInspector.ProfileView.prototype.get topDownProfileDataGridTree):
        (WebInspector.ProfileView.prototype.get currentTree):
        (WebInspector.ProfileView.prototype.set currentTree):
        (WebInspector.ProfileView.prototype.get topDownTree):
        (WebInspector.ProfileView.prototype.get bottomUpTree):
        (WebInspector.ProfileView.prototype.refresh):
        (WebInspector.ProfileView.prototype.refreshVisibleData):
        (WebInspector.ProfileView.prototype.refreshShowAsPercents):
        (WebInspector.ProfileView.prototype.performSearch.matchesQuery):
        (WebInspector.ProfileView.prototype.performSearch):
        (WebInspector.ProfileView.prototype._changeView):
        (WebInspector.ProfileView.prototype._focusClicked):
        (WebInspector.ProfileView.prototype._excludeClicked):
        (WebInspector.ProfileView.prototype._resetClicked):
        (WebInspector.ProfileView.prototype._sortProfile):
        * inspector/front-end/ProfilesPanel.js:
        (WebInspector.ProfilesPanel.prototype.showProfile):
        (WebInspector.ProfilesPanel.prototype.showView):
        (WebInspector.ProfilesPanel.prototype.searchMatchFound):
        * inspector/front-end/TopDownProfileDataGridTree.js: Added.
        (WebInspector.TopDownProfileDataGridNode):
        (WebInspector.TopDownProfileDataGridNode.prototype._populate):
        (WebInspector.TopDownProfileDataGridNode.prototype._exclude):
        (WebInspector.TopDownProfileDataGridTree):
        (WebInspector.TopDownProfileDataGridTree.prototype.focus):
        (WebInspector.TopDownProfileDataGridTree.prototype.exclude):
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.css:
        * inspector/front-end/inspector.html:

2009-04-23  Eric Seidel  <eric@webkit.org>

        Reviewed by Sam Weinig.

        Use static functions (and a couple templates)
        to further reduce the amount of copy/paste code in SVGRenderTreeAsText

        No test changes, only code cleanup.

        * rendering/SVGRenderTreeAsText.cpp:
        (WebCore::writeNameValuePair):
        (WebCore::writeNameAndQuotedValue):
        (WebCore::writeIfNotEmpty):
        (WebCore::writeIfNotDefault):
        (WebCore::writeStyle):
        (WebCore::writePositionAndStyle):
        (WebCore::operator<<):

2009-04-23  Eric Seidel  <eric@webkit.org>

        Reviewed by Simon Fraser.

        SVGRenderTreeAsText cleanup/code sharing.

        No test changes, only code cleanup.

        * rendering/RenderText.cpp:
        (WebCore::RenderText::firstRunOrigin):
        * rendering/RenderText.h:
        * rendering/SVGRenderTreeAsText.cpp:
        (WebCore::writeStandardPrefix):
        (WebCore::writeChildren):
        (WebCore::write):
        (WebCore::writeRenderResources):

2009-04-23  Beth Dakin  <bdakin@apple.com>

        Reviewed by Darin Adler.

        WebCore part of fix for <rdar://problem/6333461> REGRESSION 
        (r36864-r36869): Dragging stocks widget scrollbar drags the whole 
        widget

        * platform/Scrollbar.h:
        (WebCore::Scrollbar::isScrollbar):
        * platform/Widget.h:
        (WebCore::Widget::isScrollbar):

2009-04-23  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Adam Roben.

        <rdar://problem/6808109> "Deletion UI" is not available for many
        portions of HTML content

        This patch makes the deletion UI show up in some new situations:
        1) If a block's background color is different from its parent's
        2) If a block has a background image.
        3) If a block has a single visible border.
        However the block must now not only be at least a minimum width and
        height, but also exceed a minimum area.  In practice this has led to
        much better element selection. 

        * editing/DeleteButtonController.cpp:
        (WebCore::isDeletableElement):

2009-04-23  Kevin Ollivier  <kevino@theolliviers.com>

        wx build fix. Adding XMLTokenizerScope.cpp to the build.

        * WebCoreSources.bkl:

2009-04-23  Adele Peterson  <adele@apple.com>

        Reviewed by Darin Adler.

        Fix for <rdar://problem/6788905> REGRESSION (41928?): hang in Position::upstream
        https://bugs.webkit.org/show_bug.cgi?id=25312

        I was unable to reproduce the problem, but I'm pretty sure this will fix it.

        * rendering/RenderObject.cpp: (WebCore::RenderObject::createVisiblePosition):
        Since VisiblePosition doesn't ensure the offset is good, we shouldn't pass max int as an offset.

2009-04-23  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=25313
        Missing scroll bars in GMail.

        Test: fast/overflow/overflow-y-scroll.html

        * platform/ScrollView.cpp:
        (WebCore::ScrollView::updateScrollbars): Added check for the ScrollbarAlwaysOn
        scroll mode.

2009-04-23  Dan Bernstein  <mitz@apple.com>

        Reviewed by Justin Garcia.

        - fix <rdar://problem/6081309> Mail crash when pressing down arrow in
          some messages in WebCore::canHaveChildrenForEditing

        Test: editing/selection/extend-by-line-anonymous-content-crash.html

        * editing/visible_units.cpp:
        (WebCore::previousLinePosition): Null-check node. If p is not an
        editable position, then closestLeafChildForXPos() may have returned a
        non-editable box, and in particular one belonging to anonymous content.
        If node is 0, fall back on RenderObject::positionForPoint, which
        finds the closest position in non-anonymous content.
        (WebCore::nextLinePosition): Ditto.
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::createVisiblePosition): Fixed a typo.

2009-04-23  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Adele Peterson.

        <rdar://problem/6791439> REGRESSION: Get an error page instead of login page navigating back in gmail

        Test: http/tests/history/back-to-post.php

        * platform/network/cf/ResourceRequestCFNet.cpp: (WebCore::ResourceRequest::doUpdatePlatformRequest):
        Apply a new cache policy if it changed after the platform request was first created.
        While at it, also made sure to update timeout.

2009-04-23  Zan Dobersek  <zandobersek@gmail.com>

        Reviewed by Gustavo Noronha.

        When creating a new drawable object, collect system's
        information about the best depth it can provide and use it
        in a new colormap that the new drawable requires.

        * platform/graphics/gtk/ImageGtk.cpp:
        (WebCore::BitmapImage::getGdkPixbuf):

2009-04-23  Zan Dobersek  <zandobersek@gmail.com>

        Reviewed by Gustavo Noronha.

        https://bugs.webkit.org/show_bug.cgi?id=15654
        GdkPixbuf support for ImageCairo

        Add support for converting a Cairo surface to a GdkPixbuf.

        * platform/graphics/BitmapImage.h:
        * platform/graphics/Image.h:
        (WebCore::Image::getGdkPixbuf):
        * platform/graphics/gtk/ImageGtk.cpp:
        (WebCore::BitmapImage::getGdkPixbuf):

2009-04-23  Kenneth Rohde Christiansen  <kenneth.christiansen@openbossa.org>

        Reviewed by Simon Hausmann.

        Make windowed plugins (on X11, Qt) behave nicer with wheel scrolling.

        Basically, what we want is to send wheel events to the plugin *only*
        when it has focus, or else send it to the parent frame.

        This is a work around, and basically what we do, is to steal the
        wheel events from the plugin, modify the window ID, and put the
        event back into the Qt event loop.

        * plugins/qt/PluginContainerQt.cpp:
        (PluginClientWrapper::PluginClientWrapper):
        (PluginClientWrapper::~PluginClientWrapper):
        (PluginClientWrapper::x11Event):
        (PluginContainerQt::PluginContainerQt):
        (PluginContainerQt::~PluginContainerQt):
        (PluginContainerQt::on_clientClosed):
        (PluginContainerQt::on_clientIsEmbedded):
        (PluginContainerQt::redirectWheelEventsToParent):
        (PluginContainerQt::x11Event):
        (PluginContainerQt::focusInEvent):
        * plugins/qt/PluginContainerQt.h:

2009-04-22  Brady Eidson  <beidson@apple.com>

        Reviewed by Maciej Stachowiak

        <rdar://problem/6786961> - "Are you sure you want to resubmit this form?" nag displays twice.

        For most loads, we were consulting the navigation policy delegate twice.  Once from FrameLoader before
        the load started and once from MainResourceLoader in its willSendRequest callback.

        In the past we tried removing MainResourceLoader's call altogether.  This caused a regression where urls 
        that redirect to a url handled by an external application would no longer work in Safari.  It probably 
        also broke other WebKit apps in subtle ways.

        Changing MainResourceLoader to make the check only on redirects fixes both bugs.  We now only call the 
        policy delegate once for most standard loads, but we do correctly call it a second time for redirects.

        Tests: http/tests/misc/policy-delegate-called-twice.html
               http/tests/misc/redirect-to-external-url.html

        * loader/MainResourceLoader.cpp:
        (WebCore::MainResourceLoader::willSendRequest): Call the navigation policy delegate only for redirects.

2009-04-22  Sam Weinig  <sam@webkit.org>

        Reviewed by Mark Rowe.

        Fix for <rdar://problem/6800695>

        Add a hack to only allow navigating (via a link from a http page)
        to feed: urls (same for feeds: and feedsearch:) that map to http:
        or https: via their nested protocol. This includes both feed://example.com
        and feed:http://example.com.

        * loader/FrameLoader.cpp:
        (WebCore::isFeedWithNestedProtocolInHTTPFamily):
        (WebCore::FrameLoader::loadFrameRequest):

2009-04-22  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Autogenerate the XMLHttpRequest constructor getter/setter for the
        WorkerContext and remove the now no longer needed JSWorkerContextBase.lut.h
        file.

        * DerivedSources.make: Remove JSWorkerContextBase.lut.h
        * WebCore.xcodeproj/project.pbxproj: Ditto.

        * bindings/js/JSWorkerContextBase.cpp:
        * bindings/js/JSWorkerContextBase.h: Remove code to support hand written
        code for XMLHttpRequest constructor lookup and shadowing.

        * bindings/js/JSWorkerContextCustom.cpp:
        (WebCore::JSWorkerContext::customGetOwnPropertySlot): Remove JSC prefixes.
        (WebCore::JSWorkerContext::xmlHttpRequest): Added. Custom implementation of
        cached constructor lookup.
        * workers/WorkerContext.idl: Make the XMLHttpRequestConstructor accessor not
        V8 specific.

2009-04-22  Darin Adler  <darin@apple.com>

        * page/Navigator.idl: Touch this file to fix build since Geolocation
        configuration was recently turned off.

2009-04-22  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=25322
        Can't delete empty paragraph after a block image
        
        Empty paragraph removal would have been handled by mergeParagraphs, but we stopped short
        because of some code that avoided problems that would arise from Positions that would go
        bad during deletion.  
        
        We have several checks that prevent us from using bad Positions, this one in particular
        was added to avoid bad Positions that result from text removal.  So, I removed the check
        and started correctly updating m_downstreamEnd during text removal so that it doesn't go
        bad.  m_upstreamStart doesn't need to be updated during text removal, since only text
        after it will ever be removed.

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

2009-04-22  Oliver Hunt  <oliver@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/6757346> SAP: Prevent default on mouseDown does not stop iframe from capturing subsequent mouse moves

        Make mouseUp target the correct frame when the original
        mousedown made the drag non-capturing.

        * page/mac/EventHandlerMac.mm:
        (WebCore::EventHandler::passSubframeEventToSubframe):

2009-04-22  Oliver Hunt  <oliver@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/6757346> SAP: Prevent default on mouseDown does not stop iframe from capturing subsequent mouse moves

        This is the first step of allowing drag events to match the behaviour
        of mouse move events when the default action of the initial mouse down
        is prevented.  Remaining issue is that the final mouse up event still
        targets the original root frame.

        Test: fast/events/mouse-drag-from-frame-to-other-frame.html

        * page/mac/EventHandlerMac.mm:
        (WebCore::EventHandler::passSubframeEventToSubframe):

2009-04-22  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Adele Peterson
        
        <rdar://problem/6702882> QT movie's video fails to be displayed after switching between tabs
        <rdar://problem/6754957> Resizing Web browser window and hitting play will cause video blocks and artifacting

        When in a media document, MediaPlayerPrivateQTKit uses a QTMovieView which may get
        layer backing under some circumstances. However, drawing the view via
        displayRectIgnoringOpacity:inContext: bypasses any layer setup that AppKit normally performs.
        So when in the media document, we draw via displayRectIgnoringOpacity:.

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

2009-04-22  Timothy Hatcher  <timothy@apple.com>

        Fix a crash in Mail when forwarding a specific HTML email.
        Caused by the fix for <rdar://problem/6512520> (r42096).
        Unable to create a test case that works outside of Mail.

        <rdar://problem/6796069>

        Reviewed by Ada Chan.

        * editing/markup.cpp:
        (WebCore::createMarkup): Null check pastEnd before trying to
        call Range::compareBoundaryPoints.

2009-04-22  Sam Weinig  <sam@webkit.org>

        Rubber-stamped by Darin Adler.

        Fix for <rdar://problem/6816957>
        Turn off Geolocation by default

        * Configurations/FeatureDefines.xcconfig:

2009-04-22  Eric Seidel  <eric@webkit.org>

        Rubber-stamped by David Hyatt.

        Change RenderSVGImage to dump as RenderSVGImage instead of RenderImage

        * rendering/RenderSVGImage.h:
        (WebCore::RenderSVGImage::renderName):

2009-04-21  Timothy Hatcher  <timothy@apple.com>

        Fix a crash on Gmail when they remove a "before unload" event listener when
        it was never added to the pending map in the first place.

        <rdar://problem/6814144>

        Reviewed by Darin Adler.

        * page/DOMWindow.cpp:
        (WebCore::allowsPendingBeforeUnloadListeners): Renamed from shouldAddPendingBeforeUnloadListener.
        (WebCore::DOMWindow::addEventListener): Call allowsPendingBeforeUnloadListeners now.
        (WebCore::DOMWindow::removeEventListener): Call allowsPendingBeforeUnloadListeners before
        removing the before unload listener.
        (WebCore::DOMWindow::clearAttributeEventListener): Ditto.

2009-04-22  Kenneth Rohde Christiansen  <kenneth.christiansen@openbossa.org>

        Reviewed by Ariya Hidayat.

        Made windowed plugins move/resize synchronized with the painting, so
        that windowed plugins are not moved before the rest of the parent
        frame during scrolling.

        * plugins/qt/PluginContainerQt.cpp:
        (PluginContainerQt::PluginContainerQt):
        (PluginContainerQt::requestGeometry):
        (PluginContainerQt::adjustGeometry):
        * plugins/qt/PluginContainerQt.h:
        * plugins/qt/PluginViewQt.cpp:
        (WebCore::PluginView::updatePluginWidget):
        (WebCore::PluginView::paint):

2009-04-22  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Ariya Hidayat.

        Fix various bugs in the X11 Qt plugin focus handling.

        Notify the focus controller on activation/deactivation of the plugin and
        set focus on the plugin's element when it receives the window system
        focus.

        * WebCore.pro: Added PluginContainerQt to the Qt build.
        * plugins/PluginView.cpp:
        (WebCore::PluginView::focusPluginElement): New helper function, moved from PluginViewWin.
        * plugins/PluginView.h:
        (WebCore::PluginView::parentFrame): Added parent frame accessor.
        * plugins/qt/PluginContainerQt.cpp: Added.
        (PluginContainerQt::PluginContainerQt):
        (PluginContainerQt::focusInEvent): Set the focus controller active on focus in events.
        (PluginContainerQt::focusOutEvent): Deactivate the focus controller when loosing the focus.
        * plugins/qt/PluginContainerQt.h: Added.
        * plugins/qt/PluginViewQt.cpp:
        (WebCore::PluginView::init): Allocate a PluginContainerQt instead of QX11EmbedContainer.
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginView::handleMouseEvent): Moved the code to set focus on the plugin element
        to PluginView::focusPluginElement.

2009-04-22  Tamas Szirbucz  <szirbucz.tamas@stud.u-szeged.hu>

        Reviewed by Ariya Hidayat.

        https://bugs.webkit.org/show_bug.cgi?id=25023
        Delete reply in QNetworkReplyHandler::abort() to avoid leak.

        * platform/network/qt/QNetworkReplyHandler.cpp:
        (WebCore::QNetworkReplyHandler::abort):

2009-04-21  Jon Honeycutt  <jhoneycutt@apple.com>

        Allow the UI delegate to control cursor-setting.

        Reviewed by Ada Chan.

        * page/Chrome.cpp:
        (WebCore::Chrome::setCursor):
        Pass the call to the client.

        * page/Chrome.h:

        * page/ChromeClient.h:
        (WebCore::ChromeClient::setCursor):
        Stubbed; returns false.

        * platform/Cursor.h:
        Define PlatformCursorHandle for each platform.

        * platform/win/WidgetWin.cpp:
        Reordered some includes. Added an include of Page.h.
        (WebCore::Widget::setCursor):
        Fixed a typo in the comment about ignoreNextSetCursor. Get the Page, and
        call its Chrome's setCursor() method with the passed cursor. Fall back
        to SetCursor() if the Page is not available.

        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginView::handleMouseEvent):
        Remove an unused variable. Cleaned up some whitespace.

2009-04-21  John Abd-El-Malek  <jam@google.com>

        Reviewed by Dimitri Glazkov.

        Add a method to purge the Chromium plugin list cache.
        https://bugs.webkit.org/show_bug.cgi?id=25318

        * plugins/chromium/PluginDataChromium.cpp:
        (WebCore::resetChromiumPluginCache):

2009-04-21  Mark Rowe  <mrowe@apple.com>

        Reviewed by Darin Adler.

        Fix <https://bugs.webkit.org/show_bug.cgi?id=25164> / <rdar://problem/6786319>.

        We need to ensure that XMLTokenizer sets the current DocLoader before calling in to
        any libxml2 methods that may trigger a load.  The presence of a DocLoader indicates
        that the load was originated by WebCore's use of libxml2 and that we should enforce
        the same-origin policy on it.  XMLTokenizer::initializeParserContext,
        XMLTokenizer::doWrite and XMLTokenizer::doEnd were three methods that were not setting
        the current DocLoader when they should have.

        The XMLTokenizerScope class is introduced to simplify the pattern of saving, setting and
        restoring the current DocLoader and libxml2 error handlers.  The DocLoader and error handlers
        are saved and set when the scope is allocated, and restored to their previous values when
        the scope is exited.

        Test: http/tests/security/xss-DENIED-xml-external-entity.xhtml

        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.scons:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/XMLTokenizer.cpp:
        * dom/XMLTokenizer.h:
        * dom/XMLTokenizerLibxml2.cpp:
        (WebCore::matchFunc):
        (WebCore::shouldAllowExternalLoad):
        (WebCore::openFunc):
        (WebCore::XMLTokenizer::doWrite):
        (WebCore::XMLTokenizer::initializeParserContext):
        (WebCore::XMLTokenizer::doEnd):
        (WebCore::xmlDocPtrForString):
        * dom/XMLTokenizerScope.cpp:
        (WebCore::XMLTokenizerScope::XMLTokenizerScope):
        (WebCore::XMLTokenizerScope::~XMLTokenizerScope):
        * dom/XMLTokenizerScope.h:
        * xml/XSLStyleSheet.cpp:
        (WebCore::XSLStyleSheet::parseString):
        * xml/XSLTProcessor.cpp:

2009-04-21  Sam Weinig  <sam@webkit.org>

        Reviewed by Dan Bernstein.

        Fix for <rdar://problem/5874009>
        Add port 3659 (apple-sasl / PasswordServer) to the list of blocked ports.

        * platform/network/ResourceHandle.cpp:
        (WebCore::portAllowed):

2009-04-21  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=25320
        Crash when changing block styles in a root that contains no visible content (but contains nodes with renderers)

        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::moveParagraphContentsToNewBlockIfNecessary): If the enclosing block is the 
        root editable element and it contains no visible content, create a new block but don't try and move 
        content into it, since there's nothing for moveParagraphs to move.
        

2009-04-21  Darin Adler  <darin@apple.com>

        Reviewed by Dan Bernstein.

        Bug 25162: REGRESSION (r41176-r41242): Drag-selection above/below the line does not select to beginning/end
        https://bugs.webkit.org/show_bug.cgi?id=25162
        rdar://problem/6764354

        * page/Settings.cpp:
        (WebCore::Settings::Settings): Initialize editing behavior to Mac-style for PLATFORM(MAC).
        Later we may want to change this default to encompass other versions running on Mac.

        * page/Settings.h: Added EditingBehavior, setEditingBehavior, editingBehavior, and
        m_editingBehavior. Also moved m_maximumDecodedImageSize out of the middle of all
        the bit fields.

        * platform/graphics/IntPoint.h: Added a constructor to turn an IntSize into an IntPoint.
        I'm not sure the distinction here is serving us well at the moment. When converting from
        global to local coordinates you want to do IntPoint - IntPoint and have the result be
        another IntPoint, not an IntSize. And so on.

        * rendering/RenderBlock.cpp:
        (WebCore::positionForPointRespectingEditingBoundaries): Changed to use pointers more and
        separate coordinates less.
        (WebCore::RenderBlock::positionForPointWithInlineChildren): Turned into a member function.
        Added separate cases to support the Mac and Windows behavior.
        (WebCore::RenderBlock::positionForPoint): Updated for the change above. Also moved the
        computation of pointInContents closer to the place it's used.

        * rendering/RenderBlock.h: Updated for the new private member function.

2009-04-17  Timothy Hatcher  <timothy@apple.com>

        Change pending unload and beforeunload counts to store the listeners
        in a single data structure that can be quickly iterated for dispatch.

        <rdar://problem/6383352&6383379&6383940>

        Reviewed by Darin Adler.

        * WebCore.base.exp: Change what symbols are exported.
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::stopLoading): Remove count updating code
        and move an if inside a block already checking m_frame->document().
        * page/Chrome.cpp: Remove disableSuddenTermination/enableSuddenTermination.
        * page/Chrome.h: Ditto.
        * page/ChromeClient.h: Ditto.
        * page/DOMWindow.cpp:
        (WebCore::pendingUnloadEventListenerMap): Create a static map.
        (WebCore::pendingBeforeUnloadEventListenerMap): Ditto.
        (WebCore::addPendingEventListener): Add the event listener to the map.
        (WebCore::removePendingEventListener): Remove the event listener from the map.
        (WebCore::removePendingEventListeners): Remove all listeners for the window.
        (WebCore::dispatchWindowEventToListeners): Dispatch the event to the given listeners.
        (WebCore::DOMWindow::dispatchAllPendingBeforeUnloadEvents): Send the beforeunload event.
        (WebCore::DOMWindow::pendingUnloadEventListeners): Return a count of pending listeners.
        (WebCore::DOMWindow::dispatchAllPendingUnloadEvents): Send the unload event.
        (WebCore::DOMWindow::~DOMWindow): Remove the window from both event listener maps.
        (WebCore::DOMWindow::addEventListener): Call addPendingEventListener when needed.
        (WebCore::DOMWindow::removeEventListener): Call removePendingEventListener when needed.
        (WebCore::DOMWindow::removeAllEventListeners): Call removePendingEventListeners.
        (WebCore::DOMWindow::removeInlineEventListenerForType): Call removePendingEventListener when needed.
        * page/DOMWindow.h:
        (WebCore::DOMWindow::frame): Changed to be const.
        * page/EventHandler.cpp:
        (WebCore::EventHandler::EventHandler): Remove count tracking code.
        * page/EventHandler.h: Ditto.
        * page/Page.cpp:
        (WebCore::Page::Page): Ditto.
        * page/Page.h: Ditto.

2009-04-21  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=19644
        Text copied with Select All pastes with a indent but shouldn't
        <rdar://problem/6102483> 
        Pasting the content of an HTML message in Mail causes addition nested <div> elements to be added
        
        To improve selectall/copy/paste fidelity of certain pages, we began wrapping copied content with
        a div that held properties and attributes from the fully selected body.  To fix the above issues, 
        only do this if if the body has certain properties or attributes.  We'll begin adding to this list as 
        necessary.  For now it's just background colors and images.  Tested copy/paste of nytimes, wired,
        arstechnica, and several others.
        
        Massive nesting can still happen, it will just be much less common.

        * editing/markup.cpp:
        (WebCore::createMarkup): 

2009-04-21  Peter Kasting  <pkasting@google.com>

        Reviewed by David Hyatt.

        https://bugs.webkit.org/show_bug.cgi?id=25250
        Allow platforms to snap the scroll thumb back to the drag origin
        during a drag.  Implement functions for Safari/Win and Chromium/Win
        to do this snapping at distances approximating the native ones.

        * platform/Scrollbar.cpp:
        (WebCore::Scrollbar::Scrollbar):
        (WebCore::Scrollbar::setValue):
        (WebCore::Scrollbar::scroll):
        (WebCore::Scrollbar::moveThumb):
        (WebCore::Scrollbar::setCurrentPos):
        (WebCore::Scrollbar::mouseMoved):
        (WebCore::Scrollbar::mouseDown):
        * platform/Scrollbar.h:
        * platform/ScrollbarTheme.h:
        (WebCore::ScrollbarTheme::shouldSnapBackToDragOrigin):
        * platform/chromium/ScrollbarThemeChromium.h:
        * platform/chromium/ScrollbarThemeChromiumLinux.cpp:
        (WebCore::ScrollbarThemeChromium::shouldSnapBackToDragOrigin):
        * platform/chromium/ScrollbarThemeChromiumWin.cpp:
        (WebCore::ScrollbarThemeChromium::shouldSnapBackToDragOrigin):
        * platform/win/ScrollbarThemeWin.cpp:
        (WebCore::ScrollbarThemeWin::shouldCenterOnThumb):
        (WebCore::ScrollbarThemeWin::shouldSnapBackToDragOrigin):
        * platform/win/ScrollbarThemeWin.h:

2009-04-21  Adam Roben  <aroben@apple.com>

        Windows build fix

        * bindings/js/JSLazyEventListener.cpp:
        (WebCore::eventParameterName): Remove unreachable code when SVG is
        enabled.

2009-04-21  Kevin Ollivier  <kevino@theolliviers.com>

        !ENABLE(SVG) build fix.
        
        * bindings/js/JSLazyEventListener.cpp:
        (WebCore::eventParameterName):

2009-04-21  Dave Moore  <davemoore@google.com>

        Reviewed by Dimitri Glazkov.

        https://bugs.webkit.org/show_bug.cgi?id=25309
        Better use AtomicStrings when calling from the V8
        bindings into WebCore code.

        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        * bindings/v8/custom/V8HTMLCollectionCustom.cpp:
        * bindings/v8/custom/V8HTMLFormElementCustom.cpp:
        * bindings/v8/custom/V8HTMLFrameSetElementCustom.cpp:

2009-04-21  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Darin Adler.
 
        Bug 25304: AX: Safari not identifying a secure text field
        https://bugs.webkit.org/show_bug.cgi?id=25304

        Secure text fields need to be able to return AXTitleUIElements.

        Test: accessibility/secure-textfield-title-ui.html

        * page/mac/AccessibilityObjectWrapper.mm:
        (-[AccessibilityObjectWrapper accessibilityAttributeNames]):

2009-04-21  Dan Bernstein  <mitz@apple.com>

        - fix the Tiger build

        * page/mac/EventHandlerMac.mm:
        (method_setImplementation):

2009-04-21   Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Sam Weinig.

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

        Fix the build with disabled DOM storage or disabled database support.

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

2009-04-21  Holger Hans Peter Freyther  <zecke@selfish.org>

        Unreviewed build fix.

        Compile fix for r42633. const qualifier does not work
        on a static method.

        * dom/Document.h:
        (WebCore::Document::isSVGDocument):

2009-04-21  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler and John Sullivan.

        - fix <rdar://problem/5914146> Crash at -[NSScrollView scrollWheel:]

        -[NSScrollView scrollWheel:] runs a nested event-tracking run loop
        in a mode that allows WebCore timers to fire and NSURLConnection
        callbacks to be dispatched, which can release the NSScrollView and
        cause it to be deallocated (one example is a DOM timer callback that
        removes a subframe from the document). This leads to a crash in
        -scrollView:.

        The fix is to replace the implementation of -[NSScrollView scrollWheel:]
        with one that optionally retains the receiver for the duration of the
        call.

        * page/mac/EventHandlerMac.mm:
        (WebCore::nsScrollViewScrollWheelShouldRetainSelf): Added.
        (WebCore::setNSScrollViewScrollWheelShouldRetainSelf): Added. Replaces
        the implementation of -[NSScrollView scrollWheel:] with the
        self-retaining one, and sets a static boolean that tells it whether to
        retain the receiver around the call to the original implementation.
        (WebCore::selfRetainingNSScrollViewScrollWheel): Added. If
        setNSScrollViewScrollWheelShouldRetainSelf(true) was called and this
        function is executing on the main thread, it retains the NSScrollView,
        invokes the original -[NSScrollView scrollWheel:], then releases the
        view. Otherwise it just calls through to the original implementation.
        (WebCore::EventHandler::passWheelEventToWidget): Added calls to
        setNSScrollViewScrollWheelShouldRetainSelf() around the call to
        -scrollWheel:.

2009-04-21  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Mark Rowe.

        Tiger crash fix: Put VM tags in their own header file, and fixed up the
        #ifdefs so they're not used on Tiger.

        * ForwardingHeaders/wtf/VMTags.h: Copied from WebCore/ForwardingHeaders/wtf/HashTraits.h.

2009-04-21  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        https://bugs.webkit.org/show_bug.cgi?id=21546
        [GTK] ATK accessibility enhancements

        Based on a patch by Alp Toker.

        Implement AtkComponent interface.

        * page/gtk/AccessibilityObjectWrapperAtk.cpp:
        (core):

2009-04-21  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        https://bugs.webkit.org/show_bug.cgi?id=21546
        [GTK] ATK accessibility enhancements

        Only implement AtkAction interface if we actually have an action.

        * page/gtk/AccessibilityObjectWrapperAtk.cpp:

2009-04-20  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=25290
        REGRESSION(r41732): Crash when constructing XMLHttpRequest in a detached document

        Test: fast/dom/xmlhttprequest-constructor-in-detached-document.html

        * bindings/js/JSAudioConstructor.cpp:
        (WebCore::JSAudioConstructor::JSAudioConstructor):
        * bindings/js/JSAudioConstructor.h:
        * bindings/js/JSDOMGlobalObject.h:
        (WebCore::getDOMConstructor):
        * bindings/js/JSImageConstructor.cpp:
        (WebCore::JSImageConstructor::JSImageConstructor):
        * bindings/js/JSImageConstructor.h:
        * bindings/js/JSMessageChannelConstructor.cpp:
        (WebCore::JSMessageChannelConstructor::JSMessageChannelConstructor):
        * bindings/js/JSMessageChannelConstructor.h:
        * bindings/js/JSOptionConstructor.cpp:
        (WebCore::JSOptionConstructor::JSOptionConstructor):
        * bindings/js/JSOptionConstructor.h:
        * bindings/js/JSXMLHttpRequestConstructor.cpp:
        (WebCore::JSXMLHttpRequestConstructor::JSXMLHttpRequestConstructor):
        * bindings/js/JSXMLHttpRequestConstructor.h:
        Avoid accessing JSDOMGlobalObject via ScriptExecutionContext, since it may not
        work during frame teardown.

2009-04-20  Geoffrey Garen  <ggaren@apple.com>

        Rubber stamped by Darin Adler and Sam Weinig.

        Renamed "*InlineEventListener*" => "*AttributeEventListener*", and
        "isInline" => "isAttribute".

        * bindings/js/JSDOMGlobalObject.cpp:
        (WebCore::JSDOMGlobalObject::createJSAttributeEventListener):
        * bindings/js/JSEventListener.cpp:
        (WebCore::JSEventListener::JSEventListener):
        (WebCore::JSEventListener::~JSEventListener):
        (WebCore::JSEventListener::handleEvent):
        (WebCore::JSEventListener::virtualisAttribute):
        * bindings/js/JSEventListener.h:
        (WebCore::JSEventListener::create):
        (WebCore::JSEventListener::isAttribute):
        * bindings/js/JSLazyEventListener.cpp:
        (WebCore::createAttributeEventListener):
        * bindings/js/JSLazyEventListener.h:
        * bindings/scripts/CodeGeneratorJS.pm:
        * dom/Element.cpp:
        (WebCore::Element::setWindowAttributeEventListener):
        * dom/Element.h:
        * dom/EventListener.h:
        (WebCore::EventListener::isAttribute):
        (WebCore::EventListener::virtualisAttribute):
        * dom/Node.cpp:
        (WebCore::Node::clearAttributeEventListener):
        (WebCore::Node::setAttributeEventListener):
        (WebCore::Node::getAttributeEventListener):
        (WebCore::Node::onabort):
        (WebCore::Node::setOnabort):
        (WebCore::Node::onblur):
        (WebCore::Node::setOnblur):
        (WebCore::Node::onchange):
        (WebCore::Node::setOnchange):
        (WebCore::Node::onclick):
        (WebCore::Node::setOnclick):
        (WebCore::Node::oncontextmenu):
        (WebCore::Node::setOncontextmenu):
        (WebCore::Node::ondblclick):
        (WebCore::Node::setOndblclick):
        (WebCore::Node::onerror):
        (WebCore::Node::setOnerror):
        (WebCore::Node::onfocus):
        (WebCore::Node::setOnfocus):
        (WebCore::Node::oninput):
        (WebCore::Node::setOninput):
        (WebCore::Node::onkeydown):
        (WebCore::Node::setOnkeydown):
        (WebCore::Node::onkeypress):
        (WebCore::Node::setOnkeypress):
        (WebCore::Node::onkeyup):
        (WebCore::Node::setOnkeyup):
        (WebCore::Node::onload):
        (WebCore::Node::setOnload):
        (WebCore::Node::onmousedown):
        (WebCore::Node::setOnmousedown):
        (WebCore::Node::onmousemove):
        (WebCore::Node::setOnmousemove):
        (WebCore::Node::onmouseout):
        (WebCore::Node::setOnmouseout):
        (WebCore::Node::onmouseover):
        (WebCore::Node::setOnmouseover):
        (WebCore::Node::onmouseup):
        (WebCore::Node::setOnmouseup):
        (WebCore::Node::onmousewheel):
        (WebCore::Node::setOnmousewheel):
        (WebCore::Node::onbeforecut):
        (WebCore::Node::setOnbeforecut):
        (WebCore::Node::oncut):
        (WebCore::Node::setOncut):
        (WebCore::Node::onbeforecopy):
        (WebCore::Node::setOnbeforecopy):
        (WebCore::Node::oncopy):
        (WebCore::Node::setOncopy):
        (WebCore::Node::onbeforepaste):
        (WebCore::Node::setOnbeforepaste):
        (WebCore::Node::onpaste):
        (WebCore::Node::setOnpaste):
        (WebCore::Node::ondragenter):
        (WebCore::Node::setOndragenter):
        (WebCore::Node::ondragover):
        (WebCore::Node::setOndragover):
        (WebCore::Node::ondragleave):
        (WebCore::Node::setOndragleave):
        (WebCore::Node::ondrop):
        (WebCore::Node::setOndrop):
        (WebCore::Node::ondragstart):
        (WebCore::Node::setOndragstart):
        (WebCore::Node::ondrag):
        (WebCore::Node::setOndrag):
        (WebCore::Node::ondragend):
        (WebCore::Node::setOndragend):
        (WebCore::Node::onreset):
        (WebCore::Node::setOnreset):
        (WebCore::Node::onresize):
        (WebCore::Node::setOnresize):
        (WebCore::Node::onscroll):
        (WebCore::Node::setOnscroll):
        (WebCore::Node::onsearch):
        (WebCore::Node::setOnsearch):
        (WebCore::Node::onselect):
        (WebCore::Node::setOnselect):
        (WebCore::Node::onselectstart):
        (WebCore::Node::setOnselectstart):
        (WebCore::Node::onsubmit):
        (WebCore::Node::setOnsubmit):
        (WebCore::Node::onunload):
        (WebCore::Node::setOnunload):
        * dom/Node.h:
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplacementFragment::ReplacementFragment):
        * html/HTMLBodyElement.cpp:
        (WebCore::HTMLBodyElement::parseMappedAttribute):
        * html/HTMLButtonElement.cpp:
        (WebCore::HTMLButtonElement::parseMappedAttribute):
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::parseMappedAttribute):
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::parseMappedAttribute):
        * html/HTMLFrameElementBase.cpp:
        (WebCore::HTMLFrameElementBase::parseMappedAttribute):
        * html/HTMLFrameSetElement.cpp:
        (WebCore::HTMLFrameSetElement::parseMappedAttribute):
        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::parseMappedAttribute):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::parseMappedAttribute):
        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::parseMappedAttribute):
        * html/HTMLScriptElement.cpp:
        (WebCore::HTMLScriptElement::parseMappedAttribute):
        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::parseMappedAttribute):
        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::parseMappedAttribute):
        * page/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::mouseButtonListener):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::setAttributeEventListener):
        (WebCore::DOMWindow::clearAttributeEventListener):
        (WebCore::DOMWindow::getAttributeEventListener):
        (WebCore::DOMWindow::onabort):
        (WebCore::DOMWindow::setOnabort):
        (WebCore::DOMWindow::onblur):
        (WebCore::DOMWindow::setOnblur):
        (WebCore::DOMWindow::onchange):
        (WebCore::DOMWindow::setOnchange):
        (WebCore::DOMWindow::onclick):
        (WebCore::DOMWindow::setOnclick):
        (WebCore::DOMWindow::ondblclick):
        (WebCore::DOMWindow::setOndblclick):
        (WebCore::DOMWindow::onerror):
        (WebCore::DOMWindow::setOnerror):
        (WebCore::DOMWindow::onfocus):
        (WebCore::DOMWindow::setOnfocus):
        (WebCore::DOMWindow::onkeydown):
        (WebCore::DOMWindow::setOnkeydown):
        (WebCore::DOMWindow::onkeypress):
        (WebCore::DOMWindow::setOnkeypress):
        (WebCore::DOMWindow::onkeyup):
        (WebCore::DOMWindow::setOnkeyup):
        (WebCore::DOMWindow::onload):
        (WebCore::DOMWindow::setOnload):
        (WebCore::DOMWindow::onmousedown):
        (WebCore::DOMWindow::setOnmousedown):
        (WebCore::DOMWindow::onmousemove):
        (WebCore::DOMWindow::setOnmousemove):
        (WebCore::DOMWindow::onmouseout):
        (WebCore::DOMWindow::setOnmouseout):
        (WebCore::DOMWindow::onmouseover):
        (WebCore::DOMWindow::setOnmouseover):
        (WebCore::DOMWindow::onmouseup):
        (WebCore::DOMWindow::setOnmouseup):
        (WebCore::DOMWindow::onmousewheel):
        (WebCore::DOMWindow::setOnmousewheel):
        (WebCore::DOMWindow::onreset):
        (WebCore::DOMWindow::setOnreset):
        (WebCore::DOMWindow::onresize):
        (WebCore::DOMWindow::setOnresize):
        (WebCore::DOMWindow::onscroll):
        (WebCore::DOMWindow::setOnscroll):
        (WebCore::DOMWindow::onsearch):
        (WebCore::DOMWindow::setOnsearch):
        (WebCore::DOMWindow::onselect):
        (WebCore::DOMWindow::setOnselect):
        (WebCore::DOMWindow::onsubmit):
        (WebCore::DOMWindow::setOnsubmit):
        (WebCore::DOMWindow::onunload):
        (WebCore::DOMWindow::setOnunload):
        (WebCore::DOMWindow::onbeforeunload):
        (WebCore::DOMWindow::setOnbeforeunload):
        (WebCore::DOMWindow::onwebkitanimationstart):
        (WebCore::DOMWindow::setOnwebkitanimationstart):
        (WebCore::DOMWindow::onwebkitanimationiteration):
        (WebCore::DOMWindow::setOnwebkitanimationiteration):
        (WebCore::DOMWindow::onwebkitanimationend):
        (WebCore::DOMWindow::setOnwebkitanimationend):
        (WebCore::DOMWindow::onwebkittransitionend):
        (WebCore::DOMWindow::setOnwebkittransitionend):
        * page/DOMWindow.h:
        * svg/SVGElement.cpp:
        (WebCore::SVGElement::parseMappedAttribute):
        * svg/SVGElementInstance.cpp:
        (WebCore::SVGElementInstance::onabort):
        (WebCore::SVGElementInstance::setOnabort):
        (WebCore::SVGElementInstance::onblur):
        (WebCore::SVGElementInstance::setOnblur):
        (WebCore::SVGElementInstance::onchange):
        (WebCore::SVGElementInstance::setOnchange):
        (WebCore::SVGElementInstance::onclick):
        (WebCore::SVGElementInstance::setOnclick):
        (WebCore::SVGElementInstance::oncontextmenu):
        (WebCore::SVGElementInstance::setOncontextmenu):
        (WebCore::SVGElementInstance::ondblclick):
        (WebCore::SVGElementInstance::setOndblclick):
        (WebCore::SVGElementInstance::onerror):
        (WebCore::SVGElementInstance::setOnerror):
        (WebCore::SVGElementInstance::onfocus):
        (WebCore::SVGElementInstance::setOnfocus):
        (WebCore::SVGElementInstance::oninput):
        (WebCore::SVGElementInstance::setOninput):
        (WebCore::SVGElementInstance::onkeydown):
        (WebCore::SVGElementInstance::setOnkeydown):
        (WebCore::SVGElementInstance::onkeypress):
        (WebCore::SVGElementInstance::setOnkeypress):
        (WebCore::SVGElementInstance::onkeyup):
        (WebCore::SVGElementInstance::setOnkeyup):
        (WebCore::SVGElementInstance::onload):
        (WebCore::SVGElementInstance::setOnload):
        (WebCore::SVGElementInstance::onmousedown):
        (WebCore::SVGElementInstance::setOnmousedown):
        (WebCore::SVGElementInstance::onmousemove):
        (WebCore::SVGElementInstance::setOnmousemove):
        (WebCore::SVGElementInstance::onmouseout):
        (WebCore::SVGElementInstance::setOnmouseout):
        (WebCore::SVGElementInstance::onmouseover):
        (WebCore::SVGElementInstance::setOnmouseover):
        (WebCore::SVGElementInstance::onmouseup):
        (WebCore::SVGElementInstance::setOnmouseup):
        (WebCore::SVGElementInstance::onmousewheel):
        (WebCore::SVGElementInstance::setOnmousewheel):
        (WebCore::SVGElementInstance::onbeforecut):
        (WebCore::SVGElementInstance::setOnbeforecut):
        (WebCore::SVGElementInstance::oncut):
        (WebCore::SVGElementInstance::setOncut):
        (WebCore::SVGElementInstance::onbeforecopy):
        (WebCore::SVGElementInstance::setOnbeforecopy):
        (WebCore::SVGElementInstance::oncopy):
        (WebCore::SVGElementInstance::setOncopy):
        (WebCore::SVGElementInstance::onbeforepaste):
        (WebCore::SVGElementInstance::setOnbeforepaste):
        (WebCore::SVGElementInstance::onpaste):
        (WebCore::SVGElementInstance::setOnpaste):
        (WebCore::SVGElementInstance::ondragenter):
        (WebCore::SVGElementInstance::setOndragenter):
        (WebCore::SVGElementInstance::ondragover):
        (WebCore::SVGElementInstance::setOndragover):
        (WebCore::SVGElementInstance::ondragleave):
        (WebCore::SVGElementInstance::setOndragleave):
        (WebCore::SVGElementInstance::ondrop):
        (WebCore::SVGElementInstance::setOndrop):
        (WebCore::SVGElementInstance::ondragstart):
        (WebCore::SVGElementInstance::setOndragstart):
        (WebCore::SVGElementInstance::ondrag):
        (WebCore::SVGElementInstance::setOndrag):
        (WebCore::SVGElementInstance::ondragend):
        (WebCore::SVGElementInstance::setOndragend):
        (WebCore::SVGElementInstance::onreset):
        (WebCore::SVGElementInstance::setOnreset):
        (WebCore::SVGElementInstance::onresize):
        (WebCore::SVGElementInstance::setOnresize):
        (WebCore::SVGElementInstance::onscroll):
        (WebCore::SVGElementInstance::setOnscroll):
        (WebCore::SVGElementInstance::onsearch):
        (WebCore::SVGElementInstance::setOnsearch):
        (WebCore::SVGElementInstance::onselect):
        (WebCore::SVGElementInstance::setOnselect):
        (WebCore::SVGElementInstance::onselectstart):
        (WebCore::SVGElementInstance::setOnselectstart):
        (WebCore::SVGElementInstance::onsubmit):
        (WebCore::SVGElementInstance::setOnsubmit):
        (WebCore::SVGElementInstance::onunload):
        (WebCore::SVGElementInstance::setOnunload):
        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::parseMappedAttribute):

2009-04-20  Geoffrey Garen  <ggaren@apple.com>

        Approved by Mark Rowe, Cameron Zwarich, Oliver Hunt, and Ojan Vafai.
        
        Used svn merge to roll out revisions 42678, 42690, 42694, 42697 because
        they broke the Tiger and Windows buildbots.

        * css/html4.css:
        * css/themeWin.css:
        * platform/graphics/SimpleFontData.cpp:
        * platform/graphics/SimpleFontData.h:
        * platform/graphics/chromium/SimpleFontDataChromiumWin.cpp:
        * platform/graphics/chromium/SimpleFontDataLinux.cpp:
        * platform/graphics/gtk/SimpleFontDataGtk.cpp:
        * platform/graphics/gtk/SimpleFontDataPango.cpp:
        * platform/graphics/mac/SimpleFontDataMac.mm:
        * platform/graphics/qt/SimpleFontDataQt.cpp:
        * platform/graphics/win/SimpleFontDataCGWin.cpp:
        * platform/graphics/win/SimpleFontDataCairoWin.cpp:
        * platform/graphics/win/SimpleFontDataWin.cpp:
        * platform/graphics/wx/SimpleFontDataWx.cpp:
        * rendering/RenderTextControl.cpp:
        * rendering/RenderTextControlMultiLine.cpp:
        * rendering/RenderTextControlSingleLine.cpp:

2009-04-20  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Adam Roben.

        One last loose end, discovered using COLLECT_ON_EVERY_ALLOCATION, for
        https://bugs.webkit.org/show_bug.cgi?id=21260
        Unbounded memory growth when churning elements with anonymous event handler functions
        
        * bindings/js/JSSVGElementInstanceCustom.cpp:
        (WebCore::JSSVGElementInstance::mark): Don't ASSERT that an ElementInstance's
        correspondingElement has a JS wrapper. If a GC falls exactly between the
        allocation of the ElementInstance wrapper and the correspondingElement
        wrapper, the correspondingElement won't have a wrapper at the time we
        mark the ElementInstance's wrapper.

2009-04-20  Brady Eidson  <beidson@apple.com>

        Rubberstamped by Mark Rowe

        Clean builds are broken on case-sensitive filesystems.  Let's fix, shall we?

        * platform/graphics/SimpleFontData.cpp: Remove "String.h" include.  Ojan probably intended to include
          "PlatformString.h" which was unnecessary because it is pulled in through other headers.  This wasn't a 
          build failure on case-insensitive file systems because those systems would find the system <string.h>, averting
          the warning.

2009-04-20  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Darin Adler.

        Last patch for https://bugs.webkit.org/show_bug.cgi?id=21260
        Unbounded memory growth when churning elements with anonymous event handler functions
        
        Converted "lazy" event listeners to be unprotected, just like all the others.

        * bindings/js/JSEventListener.cpp:
        (WebCore::JSEventListener::JSEventListener):
        (WebCore::JSEventListener::~JSEventListener):
        (WebCore::JSEventListener::jsFunction):
        (WebCore::JSEventListener::markJSFunction):
        (WebCore::JSEventListener::handleEvent):
        (WebCore::JSEventListener::virtualIsInline):
        * bindings/js/JSEventListener.h:
        (WebCore::JSEventListener::isInline): Merged JSAbstractEventListener
        into JSEventListener. Now that the only difference between JSEventListener
        and JSLazyEventListener is that JSLazyEventListener compiles lazily,
        there's no need for an abstract base class.

        * bindings/js/JSLazyEventListener.cpp: Converted JSLazyEventListener to
        inherit from JSEventListener and match its un-GC-protected behavior.
        (WebCore::JSLazyEventListener::JSLazyEventListener): ditto
        (WebCore::JSLazyEventListener::parseCode): ditto
        (WebCore::createInlineEventListener): When creating a lazy event listener,
        ensure that the related node has a JS wrapper to mark the listener. Since
        the parser makes these listeners, it's possible that no JS reference has
        been made to the node yet.
        * bindings/js/JSLazyEventListener.h: ditto

        * dom/EventListener.h:
        (WebCore::EventListener::clearJSFunction): Removed an usused function.

2009-04-20  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=25299
        Don't bound caret to root line box if it is still inside its containing block
        
        Can't yet write tests for behavior of non-standard caret widths.

        * rendering/RenderText.cpp:
        (WebCore::RenderText::localCaretRect):

2009-04-20  Steve Falkenburg  <sfalken@apple.com>

        Separate JavaScriptCore.dll from WebKit.dll.
        Slight performance improvement or no change on benchmarks.
        
        Allows us to break a circular dependency between CFNetwork and WebKit on Windows,
        and simplifies standalone JavaScriptCore builds.

        Reviewed by Oliver Hunt.

        * config.h: Specify __declspec(dllexport/dllimport) appropriately when exporting data.

2009-04-20  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        <rdar://problem/6722845> In the Cocoa event model, NPWindow's window field should be null

        * bridge/npapi.h:
        (_NPCocoaEvent::):
        Add a CGContextRef member to the draw struct. Add an NPCoordinateSpace enum.
        
        * plugins/npfunctions.h:
        Add a prototype for NPN_ConvertPoint.

2009-04-10  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Dan Bernstein.

        Make textarea and text input metrics more closely match IEs.
        https://bugs.webkit.org/show_bug.cgi?id=15312

        This involves:
        -set text input width to size*avgCharWidth + maxCharWidth - avgCharWidth
        -set textarea width to cols*avgCharWidth
        -Make default CSS match IEs
        -Correctly initializing m_avgCharWidth and m_maxCharWidth for each platform and SVG.

        Those values for textarea and inputs were derived by doing a ton of manual
        testing of IE's width values for various textareas and fonts.

        To get the average and max character width of a font, we do the following
        for each platform:
        -Win: TextMetrics expose avgCharWidth and maxCharWidth
        -SVG: avgCharWidth = width of an '0', fallback on width of a space glyph, then m_xHeight
            maxCharWidth = width of a 'W' for roman fonts, fallback on m_ascent
        -Linux: avgCharWidth = width of an '0', fallback on m_xHeight
            maxCharWidth = max of avgCharWidth and m_ascent
        -Mac: look in the OS/2 table for avgCharWidth and grab the maxCharWidth off the font.
            If either one is not there, then calculate the value using the Linux approach.

        Linux ports could probably dig into the OS/2 table as well, but I'll leave
        that up to them to implement.

        Tests: fast/forms/text-control-intrinsic-widths.html
               fast/forms/textarea-metrics.html
               svg/custom/svg-fonts-in-text-controls.html

        * css/html4.css:
        * css/themeWin.css:
        * platform/graphics/SimpleFontData.cpp:
        (WebCore::SimpleFontData::SimpleFontData):
        (WebCore::SimpleFontData::initCharWidths):
        * platform/graphics/SimpleFontData.h:
        (WebCore::SimpleFontData::maxCharWidth):
        (WebCore::SimpleFontData::avgCharWidth):
        * platform/graphics/chromium/SimpleFontDataChromiumWin.cpp:
        (WebCore::SimpleFontData::platformCharWidthInit):
        * platform/graphics/chromium/SimpleFontDataLinux.cpp:
        (WebCore::SimpleFontData::platformCharWidthInit):
        * platform/graphics/gtk/SimpleFontDataGtk.cpp:
        (WebCore::SimpleFontData::platformCharWidthInit):
        * platform/graphics/gtk/SimpleFontDataPango.cpp:
        (WebCore::SimpleFontData::platformCharWidthInit):
        * platform/graphics/mac/SimpleFontDataMac.mm:
        (WebCore::SimpleFontData::platformCharWidthInit):
        * platform/graphics/qt/SimpleFontDataQt.cpp:
        (WebCore::SimpleFontData::platformCharWidthInit):
        * platform/graphics/win/SimpleFontDataCGWin.cpp:
        (WebCore::SimpleFontData::platformCharWidthInit):
        * platform/graphics/win/SimpleFontDataCairoWin.cpp:
        (WebCore::SimpleFontData::platformInit):
        (WebCore::SimpleFontData::platformCharWidthInit):
        * platform/graphics/win/SimpleFontDataWin.cpp:
        (WebCore::SimpleFontData::initGDIFont):
        * platform/graphics/wx/SimpleFontDataWx.cpp:
        (WebCore::SimpleFontData::platformCharWidthInit):
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::calcPrefWidths):
        * rendering/RenderTextControlMultiLine.cpp:
        (WebCore::RenderTextControlMultiLine::createInnerTextStyle):
        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::preferredContentWidth):

2009-04-17  Eric Seidel  <eric@webkit.org>

        Reviewed by Simon Fraser.

        Remove m_absoluteBounds hack from SVG renderers and move outlineBoundsForRepaint into RenderSVGModelObject
        https://bugs.webkit.org/show_bug.cgi?id=25276

        This also exposed a buggy paint check in RenderSVGContainer::layout()
        we should repaint if we are self painting OR if our kids changed, not AND.

        Writing real outlineBoundsForRepaint required writing a mapLocalToContainer() function

        No functional changes, thus no tests.

        * rendering/RenderPath.cpp:
        (WebCore::RenderPath::localToParentTransform):
        (WebCore::RenderPath::layout):
        * rendering/RenderPath.h:
        * rendering/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::layout):
        * rendering/RenderSVGContainer.h:
        * rendering/RenderSVGModelObject.cpp:
        (WebCore::RenderSVGModelObject::mapLocalToContainer):
        (WebCore::RenderSVGModelObject::outlineBoundsForRepaint):
        * rendering/RenderSVGModelObject.h:
        * rendering/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::layout):
        (WebCore::RenderSVGRoot::paint):
        (WebCore::RenderSVGRoot::localToParentTransformWithoutCSSParentOffset):
        (WebCore::RenderSVGRoot::localToParentTransform):
        (WebCore::RenderSVGRoot::computeRectForRepaint):
        * rendering/RenderSVGRoot.h:
        * rendering/RenderSVGViewportContainer.cpp:
        (WebCore::RenderSVGViewportContainer::layout):

2009-04-20  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Eric Seidel

        https://bugs.webkit.org/show_bug.cgi?id=25282
        
        outlineBoundsForRepaint() should compute a quad relative to the
        repaintContainer. This fixes the repaint issues originally fixed in
        https://bugs.webkit.org/show_bug.cgi?id=12885 for elements in compositing layers.
        Failure was only apparent when building with ACCELERATED_COMPOSITING enabled.

        Tests: compositing/repaint/content-into-overflow.html
               compositing/repaint/overflow-into-content.html

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::outlineBoundsForRepaint):

2009-04-20  Sam Weinig  <sam@webkit.org>

        Rubber-stamped by Tim Hatcher.

        Add licenses for xcconfig files.

        * Configurations/Base.xcconfig:
        * Configurations/DebugRelease.xcconfig:
        * Configurations/FeatureDefines.xcconfig:
        * Configurations/Version.xcconfig:
        * Configurations/WebCore.xcconfig:

2009-04-20  Eric Roman  <eroman@chromium.org>

        Reviewed by Dimitri Glazkov.

        https://bugs.webkit.org/show_bug.cgi?id=25261
        Implement the V8 binding for DOMWindow.event similarly to JSC, by using
        the custom getter boilerplate from the IDL file. 
        Also, stub out DOMWindow.crypto which is defined by the idl.

        * bindings/v8/V8AbstractEventListener.cpp:
        (WebCore::V8AbstractEventListener::invokeEventHandler):
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::ACCESSOR_GETTER):

2009-04-20  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Xan Lopez.

        https://bugs.webkit.org/show_bug.cgi?id=25243
        Crash when data:// loads are cancelled

        Properly handle cancellation of the load for data:// loads. This
        fixes crashing in the followin test:

        plugins/return-error-from-new-stream-callback-in-full-frame-plugin.html

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

2009-04-19  Dan Bernstein  <mitz@apple.com>

        - maybe fix release builds

        * dom/ScriptElement.cpp:
        (WebCore::ScriptElementData::notifyFinished):

2009-04-19  Dan Bernstein  <mitz@apple.com>

        - not fix release builds

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

2009-04-19  Dan Bernstein  <mitz@apple.com>

        Reviewed by Mark Rowe.

        - fix <rdar://problem/6734365> REGRESSION eBay "Save this search" link
          does nothing the second time search results are opened

        Test: fast/dom/HTMLScriptElement/nested-execution.html

        Instead of executing scripts as soon as they finish loading, which may
        happen synchronously during execution of another script, defer their
        execution until the next run loop iteration, using a queue that is
        similar to the HTML5 notion of the "list of scripts that will execute as
        soon as possible", and in my testing was consistent with how Firefox
        behaved.

        * dom/Document.cpp:
        (WebCore::Document::Document): Initialize m_executeScriptSoonTimer.
        (WebCore::Document::~Document): deref() script elements in
        m_scriptsToExecuteSoon.
        (WebCore::Document::executeScriptSoonTimerFired): Added. Executes the
        scripts in m_scriptsToExecuteSoon and deref()s them.
        (WebCore::Document::executeScriptSoon): Added. Appends to
        m_scriptsToExecuteSoon and ref()s the script element, which keeps the
        ScriptElementData alive as well.
        * dom/Document.h:
        * dom/ScriptElement.cpp:
        (WebCore::ScriptElementData::ScriptElementData): Initialize m_requested.
        (WebCore::ScriptElementData::requestScript): Set m_requested to true, to
        prevent further load requests.
        (WebCore::ScriptElementData::execute): Added. Moved the code from
        notifyFinished() which should not execute synchronously here, to be
        called by the Document on a 0-interval timer.
        (WebCore::ScriptElementData::notifyFinished): Moved the code to
        dispatch events and evaluate the script, which should not execute
        synchronously, out of here.
        (WebCore::ScriptElementData::ignoresLoadRequest): Changed to test for
        m_requested instead of m_cachedScript, because the latter is cleared
        before the script is evaluated.
        * dom/ScriptElement.h:

2009-04-19  Oliver Hunt  <oliver@apple.com>

        Reviewed by Antti Koivisto and Darin Adler.

        <rdar://problem/6127705> Excessive memory consumption on image load failure

        When we fail to decode an image we clear most of the image data, but not the
        input data itself, which can be backed by a CFData object that itself holds onto
        a few hundred Kbs of memory.  This patch merely ensures that this buffer gets
        cleared.

        * loader/CachedImage.cpp:
        (WebCore::CachedImage::error):

2009-04-19  Darin Adler  <darin@apple.com>

        Reviewed by Sam Weinig.

        Add hooks so sudden termination will not cause loss of icons or local storage.
        rdar://problem/5951701

        * loader/icon/IconDatabase.cpp: Marked various constants static to give them
        internal linkage.
        (WebCore::IconDatabase::IconDatabase): Added initial value for m_syncTimer.
        Removed unneeded initial value for m_defaultIconRecord. Changed assertion to
        work cross-platform.
        (WebCore::IconDatabase::wakeSyncThread): Added disableSuddenTermination, so
        we won't terminate until the sync thread has done its thing.
        (WebCore::IconDatabase::scheduleOrDeferSyncTimer): Added disableSuddenTermination,
        so we won't terminate if we have an outstanding sync timer.
        (WebCore::IconDatabase::syncTimerFired): Added enableSuddenTermination, to
        balance the one in scheduleOrDeferSyncTimer.
        (WebCore::IconDatabase::syncThreadMainLoop): Added enableSuddenTermination, to
        balance the one in wakeSyncThread.
        (WebCore::IconDatabase::deleteAllPreparedStatements): Use clear() instead of set(0).

        * loader/icon/IconDatabase.h: Use a Timer instead of an OwnPtr<Timer>.

        * storage/LocalStorageArea.cpp:
        (WebCore::LocalStorageArea::scheduleFinalSync): Added disableSuddenTermination.
        (WebCore::LocalStorageArea::scheduleItemForSync): Ditto.
        (WebCore::LocalStorageArea::scheduleClear): Ditto.
        (WebCore::LocalStorageArea::syncTimerFired): Added a disableSuddenTermination if
        we schedule a performSync callback for later and an unconditional
        enableSuddenTermination to balance the ones in the schedule calls above.
        (WebCore::LocalStorageArea::sync): Factored out the work of the sync function so it
        can continue to use early return idiom.
        (WebCore::LocalStorageArea::performSync): Added a call to enableSuddenTermination.

        * storage/LocalStorageArea.h: Added declaration of the sync function.

2009-04-19  David Kilzer  <ddkilzer@apple.com>

        Make FEATURE_DEFINES completely dynamic

        Reviewed by Darin Adler.

        Make FEATURE_DEFINES depend on individual ENABLE_FEATURE_NAME
        variables for each feature, making it possible to remove all
        knowledge of FEATURE_DEFINES from build-webkit.

        * Configurations/FeatureDefines.xcconfig: Extract a variable
        from FEATURE_DEFINES for each feature setting.

2009-04-18  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Alexey Proskuryakov.

        More fix for https://bugs.webkit.org/show_bug.cgi?id=21260
        Unbounded memory growth when churning elements with anonymous event handler functions
        
        Removed a little more complexity from event handler creation and destruction.
        
        Removed the jsProtectedEventListeners, jsProtectedInlineEventListeners,
        and jsInlineEventListeners maps, and all the code for managing them.
        
        ProtectedEventListeners don't exist anymore, so they're easy to nix.
        
        Inline EventListeners do still exist, but there's no reason to track
        them in a map. The map exists to enable 'removeEventListener' to associate
        a unique JSEventListener with a given JavaScript function. But the
        'removeEventListener' API only works with non-inline event listeners!
        
        * bindings/js/JSDOMGlobalObject.cpp:
        (WebCore::JSDOMGlobalObject::~JSDOMGlobalObject):
        (WebCore::JSDOMGlobalObject::findJSEventListener):
        (WebCore::JSDOMGlobalObject::findOrCreateJSEventListener):
        (WebCore::JSDOMGlobalObject::createJSInlineEventListener):
        * bindings/js/JSDOMGlobalObject.h:
        * bindings/js/JSEventListener.cpp:
        (WebCore::JSEventListener::JSEventListener):
        (WebCore::JSEventListener::clearJSFunctionInline):
        * bindings/js/JSLazyEventListener.cpp:
        (WebCore::JSLazyEventListener::~JSLazyEventListener):
        (WebCore::JSLazyEventListener::parseCode):
        * bindings/scripts/CodeGeneratorJS.pm:

2009-04-18  Dan Bernstein  <mitz@apple.com>

        - try to fix the Windows build

        * editing/VisiblePosition.cpp:
        (WebCore::VisiblePosition::characterAfter):

2009-04-18  Dan Bernstein  <mitz@apple.com>

        - revert the previous change, which was to a file that the Windows
          port does not even use

        * icu/unicode/utf16.h:

2009-04-18  Dan Bernstein  <mitz@apple.com>

        Reviewed by Geoffrey Garen.

        - try to fix the Windows build

        * icu/unicode/utf16.h:

2009-04-18  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Antti Koivisto.
        
        https://bugs.webkit.org/show_bug.cgi?id=25066
        
        When a <video> element gained a RenderLayer via opacity, reflection etc., the
        layer hierarchy was not correctly updated because RenderMedia skipped a level
        when asked for its children; it skipped m_controlsShadowRoot's renderer, which
        actually has a layer.

        Test: fast/layers/video-layer.html

        * rendering/MediaControlElements.cpp:
        (WebCore::MediaControlShadowRootElement::MediaControlShadowRootElement):
        Don't manually call setParent() on the renderer. It will happen later
        as a result of addChild().
        
        * rendering/RenderMedia.cpp:
        (WebCore::RenderMedia::createControlsShadowRoot):
        Add m_controlsShadowRoot's renderer as a child. 

        * rendering/RenderMedia.h:
        (WebCore::RenderMedia::children):
        Now maintain a RenderObjectChildList, m_children, and remove the unneeded
        removeChild() method. Make the two children() methods inline.

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::moveLayers):
        Assert if moveLayers() is called with an oldParent that is not the
        layer's actual parent (which would have revealed this bug).

2009-04-18  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Cameron Zwarich.

        Fixed a layout test failure, caused by my last check-in
        (fast/dom/script-element-gc.html).

        * bindings/js/JSDOMBinding.cpp:
        (WebCore::isObservableThroughDOM):
        * html/HTMLScriptElement.h:
        (WebCore::HTMLScriptElement::haveFiredLoadEvent): Treat script elements
        just like image elements: if a script element is loading, mark its JS
        wrapper, even if the element is not in the document.

2009-04-18  Jian Li  <jianli@chromium.org>

        Reviewed by Dimitri Glazkov.

        https://bugs.webkit.org/show_bug.cgi?id=25170
        Upstream V8WorkerCustom.cpp and V8WorkerContextCustom.cpp for V8 bindings.

        * bindings/v8/WorkerContextExecutionProxy.cpp:
        (WebCore::WorkerContextExecutionProxy::findOrCreateEventListener):
        * bindings/v8/WorkerContextExecutionProxy.h:
        * bindings/v8/custom/V8WorkerContextCustom.cpp: Added.
        * bindings/v8/custom/V8WorkerCustom.cpp: Added.

2009-04-18  Jian Li  <jianli@chromium.org>

        Reviewed by Dimitri Glazkov.

        https://bugs.webkit.org/post_bug.cg://bugs.webkit.org/show_bug.cgi?id=25167 
        Change createHiddenXHRDependency and removeHiddenXHRDependency so that they can be used by other custom code in V8 bindings.

        * bindings/v8/V8Utilities.cpp: Renamed from WebCore/bindings/v8/V8XMLHttpRequestUtilities.cpp.
        (WebCore::createHiddenDependency):
        (WebCore::removeHiddenDependency):
        * bindings/v8/V8Utilities.h: Renamed from WebCore/bindings/v8/V8XMLHttpRequestUtilities.h.
        * bindings/v8/custom/V8XMLHttpRequestCustom.cpp:
        (WebCore::ACCESSOR_SETTER):
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8XMLHttpRequestUploadCustom.cpp:
        (WebCore::ACCESSOR_SETTER):
        (WebCore::CALLBACK_FUNC_DECL):

2009-04-18  Drew Wilson  <amw@apple.com>

        <rdar://problem/6781407> VisiblePosition.characterAfter should return UChar32

        Reviewed by Dan Bernstein.

        No test case since there is no change in behavior.

        * editing/VisiblePosition.cpp:
        (WebCore::VisiblePosition::characterAfter): Now handles surrogate
        pairs correctly and returns a UChar32.
        * editing/VisiblePosition.h:
        (WebCore::VisiblePosition::characterBefore): Now returns a UChar32.
        * editing/visible_units.cpp:
        (WebCore::endOfFirstWordBoundaryContext): Renamed
        firstNonComplexContextLineBreak() to this. Changed it to use the
        generic requiresContextForWordBoundary() instead of
        hasLineBreakingPropertyComplexContext().
        (WebCore::startOfLastWordBoundaryContext): Replaces
        lastNonComplexContextLineBreak(), but returns the offset of
        the character after the last character that does not require
        context for word breaking. Also changed to use
        requiresContextForWordBoundary().
        (WebCore::previousBoundary): Updated for the above changes in
        names and semantics, and changed to use
        requiresContextForWordBoundary().
        (WebCore::nextBoundary): Ditto.
        (WebCore::startWordBoundary): Ditto.
        (WebCore::endWordBoundary): Ditto.
        (WebCore::previousWordPositionBoundary): Ditto.
        (WebCore::nextWordPositionBoundary): Ditto.
        * platform/text/TextBoundaries.h:
        (WebCore::requiresContextForWordBoundary): Added.
        * platform/text/mac/TextBoundaries.mm:

2009-04-18  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Cameron Zwarich.

        Fixed <rdar://problem/6797442> | https://bugs.webkit.org/show_bug.cgi?id=25285
        REGRESSION (r42569): Profiles cannot be selected in inspector profiler
        
        EventListeners are shared; RegisteredEventListeners are not. Therefore,
        when a node wrapper needs to invalidate the node's JS event listeners,
        it should invalidate its RegisteredEventListeners, not its EventListeners.
        Otherwise, it might invalidate an EventListener shared by another node.

        * dom/RegisteredEventListener.h:
        (WebCore::invalidateEventListeners): ditto

2009-04-18  Pierre d'Herbemont  <pdherbemont@apple.com>

        Reviewed by Mark Rowe.

        <rdar://problem/6781295> video.buffered and video.seekable are not
        the same. video.buffered should return only what is buffered and
        not what is seekable

        * WebCore.base.exp: Added wkQTMovieMaxTimeSeekable.

        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivate::maxTimeSeekable): Return wkQTMovieMaxTimeSeekable.

        * platform/mac/WebCoreSystemInterface.h: Add wkQTMovieMaxTimeSeekable.
        * platform/mac/WebCoreSystemInterface.mm: Ditto.

2009-04-18  Pierre d'Herbemont  <pdherbemont@apple.com>

        Reviewed by Adele Peterson.

        <rdar://problem/6747241> work around QTKit no longer reaching
        QTMovieLoadStateComplete

        * WebCore.base.exp: Export wkQTMovieMaxTimeLoadedChangeNotification.

        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivate::createQTMovie): observe QTMovieMaxTimeLoadedChangeNotification.
        (WebCore::MediaPlayerPrivate::updateStates): compare duuration() with maxTimeLoaded() instead of
        using QTMovieLoadStateComplete to determine if a movie are fully loaded.

        * platform/mac/WebCoreSystemInterface.h: Add wkQTMovieMaxTimeLoadedChangeNotification.
        * platform/mac/WebCoreSystemInterface.mm: Ditto.

2009-04-18  Nikolas Zimmermann  <nikolas.zimmermann@torchmobile.com>

        Reviewed by George Staikos.

        Make WML work again, most regressions test were failing.

        * dom/Document.cpp: Be sure to create WML elements in WML namespace. Otherwhise hasTagName() comparisions fail.
        (WebCore::Document::createElement):
        * wml/WMLCardElement.cpp: Add ASSERT(hasTagName(cardTag)) to catch errors like this in future.
        (WebCore::WMLCardElement::WMLCardElement):
        * wml/WMLTagNames.in: Wrap comment in #if 0/#endif blocks, to silence the generation script.

2009-04-17  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=25277
        If there is no line wrapping, a caret can leave its containing block but it shouldn't leave its root line box
        
        Also added code to handle a caret wider than one pixel.
        
        Added fast/inline/25277.html and fast/inline/25277-2.html

        * rendering/RenderText.cpp:
        (WebCore::RenderText::localCaretRect): Distribute a caret's width to either side of the offset,
        so that a caret between two characters doesn't hang over one character more than the other.
        If there is no wrapping, the caret can leave its containing block, but not its root line box.

2009-04-17  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.

        More fix for https://bugs.webkit.org/show_bug.cgi?id=21260
        Unbounded memory growth when churning elements with anonymous event handler functions
        
        Some refactoring of "inline" event listeners.
        
        Renames:
            dispatchEventForType => dispatchEvent
            setWindowInlineEventListenerForTypeAndAttribute => setWindowInlineEventListener
            removeInlineEventListenerForType => clearInlineEventListener
            setInlineEventListenerForType => setInlineEventListener
            inlineEventListenerForType => getInlineEventListener

        * bindings/js/JSLazyEventListener.cpp:
        (WebCore::eventParameterName):
        (WebCore::JSLazyEventListener::JSLazyEventListener):
        (WebCore::createInlineEventListener):
        * bindings/js/JSLazyEventListener.h: Added two helper functions for
        creating "inline" event listeners. These replace Document::createEventListener,
        and abstract the creation of JS event listeners for DOM attributes out
        of the DOM. Removed legacy JSProtectedEventListener constructor code for
        adding the event listener's function to a map, since lazy event listeners
        don't have functions at construction time.

        * dom/Document.cpp:
        (WebCore::Document::setFocusedNode):
        * dom/Document.h:
        (WebCore::Document::isSVGDocument):
        * dom/Element.cpp:
        (WebCore::Element::setWindowInlineEventListener):
        * dom/Element.h: Updated for renames. Nixed Document::createEventListener,
        mentioned above. Moved setWindowInlineEventListenerForTypeAndAttribute
        to Element, for simplicity.

        * dom/InputElement.cpp:
        (WebCore::InputElement::setValueFromRenderer):
        * dom/Node.cpp:
        (WebCore::Node::dispatchFocusEvent):
        (WebCore::Node::dispatchBlurEvent):
        (WebCore::Node::dispatchEvent):
        (WebCore::Node::clearInlineEventListener):
        (WebCore::Node::setInlineEventListener):
        (WebCore::Node::getInlineEventListener):
        (WebCore::Node::onabort):
        (WebCore::Node::setOnabort):
        (WebCore::Node::etc.):
        * dom/Node.h: Updated for renames.
        
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplacementFragment::ReplacementFragment): Updated for renames.
        
        Updated these files for renames, and to use the new createInlineEventListener
        helper function:

        * html/HTMLBodyElement.cpp:
        (WebCore::HTMLBodyElement::parseMappedAttribute):
        * html/HTMLButtonElement.cpp:
        (WebCore::HTMLButtonElement::parseMappedAttribute):
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::parseMappedAttribute):
        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::onChange):
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::prepareSubmit):
        (WebCore::HTMLFormElement::reset):
        (WebCore::HTMLFormElement::parseMappedAttribute):
        * html/HTMLFrameElementBase.cpp:
        (WebCore::HTMLFrameElementBase::parseMappedAttribute):
        * html/HTMLFrameSetElement.cpp:
        (WebCore::HTMLFrameSetElement::parseMappedAttribute):
        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::parseMappedAttribute):
        * html/HTMLImageLoader.cpp:
        (WebCore::HTMLImageLoader::dispatchLoadEvent):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::parseMappedAttribute):
        (WebCore::HTMLInputElement::onSearch):
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::loadInternal):
        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::parseMappedAttribute):
        * html/HTMLScriptElement.cpp:
        (WebCore::HTMLScriptElement::parseMappedAttribute):
        (WebCore::HTMLScriptElement::dispatchLoadEvent):
        (WebCore::HTMLScriptElement::dispatchErrorEvent):
        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::parseMappedAttribute):
        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::parseMappedAttribute):
        * html/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::notifyFinished):
        * page/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::mouseButtonListener):
        * page/DOMWindow.cpp:
        * page/DOMWindow.h:
        (WebCore::DOMWindow::eventListeners):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::canMouseDownStartSelect):
        (WebCore::EventHandler::canMouseDragExtendSelect):
        (WebCore::EventHandler::sendScrollEvent):
        * page/Page.cpp:
        (WebCore::networkStateChanged):
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::valueChanged):
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::selectionChanged):
        * svg/SVGElement.cpp:
        (WebCore::SVGElement::parseMappedAttribute):
        * svg/SVGElementInstance.cpp:
        * svg/SVGImageLoader.cpp:
        (WebCore::SVGImageLoader::dispatchLoadEvent):
        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::parseMappedAttribute):
        * svg/SVGScriptElement.cpp:
        (WebCore::SVGScriptElement::dispatchErrorEvent):
        * wml/WMLInputElement.cpp:
        (WebCore::WMLInputElement::defaultEventHandler):

2009-04-17  David Kilzer  <ddkilzer@apple.com>

        Simplify FEATURE_DEFINES definition

        Reviewed by Darin Adler.

        This moves FEATURE_DEFINES and its related ENABLE_FEATURE_NAME
        variables to their own FeatureDefines.xcconfig file.  It also
        extracts a new ENABLE_GEOLOCATION variable so that
        FEATURE_DEFINES only needs to be defined once.

        * Configurations/FeatureDefines.xcconfig: Added.
        * Configurations/WebCore.xcconfig: Removed definition of
        ENABLE_SVG_DOM_OBJC_BINDINGS and FEATURE_DEFINES.  Added include
        of FeatureDefines.xcconfig.
        * WebCore.xcodeproj/project.pbxproj: Added
        FeatureDefines.xcconfig file.
        * bindings/scripts/CodeGeneratorObjC.pm: When creating a list of
        command-line macro definitions, split on one-or-more spaces
        instead of a single space since the FEATURE_DEFINES macro may
        now contain more than one space between macros if some macros
        aren't defined.

2009-04-17  Brady Eidson  <beidson@apple.com>

        Reviewed by Mark Rowe

        <rdar://problem/6786999> Tiger WebKit shouldn't try to POST on back/forward without nagging.

        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::willLoadFromCache):

2009-04-17  Darin Adler  <darin@apple.com>

        Reviewed by Timothy Hatcher.

        Added sudden termination functions that can be called without involving
        the page or client.

        * GNUmakefile.am: Added SuddenTermination.h.
        * WebCore.vcproj/WebCore.vcproj: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto. Also added SuddenTermination.mm.

        * platform/SuddenTermination.h: Added.
        * platform/mac/SuddenTermination.mm: Added.

2009-04-17  Eric Seidel  <eric@webkit.org>

        Reviewed by Simon Fraser.

        Move more code into RenderSVGModelObject

        needsLayer() already returns false from RenderSVGModelObject
        lineHeight and baselinePosition are from days of RenderPath having RenderBox parents.

        I also added comments to explain how focus rings work (now that I understand)
        I got rid of two more uses of m_absoluteBounds (nearly dead!)

        * rendering/RenderPath.cpp:
        * rendering/RenderPath.h:
        * rendering/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::paint):
        (WebCore::RenderSVGContainer::addFocusRingRects):
        * rendering/RenderSVGContainer.h:
        * rendering/RenderSVGModelObject.cpp:
        (WebCore::RenderSVGModelObject::absoluteRects):
        (WebCore::RenderSVGModelObject::absoluteQuads):
        * rendering/RenderSVGModelObject.h:

2009-04-16  Peter Kasting  <pkasting@google.com>

        Reviewed by Adele Peterson.

        https://bugs.webkit.org/show_bug.cgi?id=25238
        Invalidate the hovered scrollbar part when resetting the pressed part,
        since once there is no pressed part we can draw a hovered state.

        * platform/Scrollbar.cpp:
        (WebCore::Scrollbar::setHoveredPart):
        (WebCore::Scrollbar::setPressedPart):

2009-04-16  Darin Fisher  <darin@chromium.org>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=25223
        REGRESSION: Back button after form submission to the same URL fails to navigate.

        Test: http/tests/navigation/post-goback-same-url.html

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadItem): Check if the page we are leaving has
        FormData.

2009-04-17  Nikolas Zimmermann  <nikolas.zimmerman@torchmobile.com>

        Not reviewed. Fix WML enabled builds.

        * rendering/RenderTableRow.cpp: Remove dead code, which is no longer necessary.
        (WebCore::RenderTableRow::addChild):
        * wml/WMLInputElement.cpp: Apply same fix HTMLInputElement received. Covert RenderObject's to RenderTextControl where needed.
        (WebCore::WMLInputElement::defaultEventHandler):

2009-04-17  Pierre d'Herbemont  <pdherbemont@apple.com>

        Reviewed by Simon Fraser.
        
        https://bugs.webkit.org/show_bug.cgi?id=24849

        Add support for the media element 'played' attribute.
        This involves support of "normalized TimeRanges" as described by
        the spec.

        Test: media/video-played.html

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::HTMLMediaElement): Renamed 
        m_currentTimeDuringSeek->m_lastSeekTime. Added m_playing and m_playedTimeRanges.
        (WebCore::HTMLMediaElement::loadInternal): Reset m_playing, m_lastSeekTime, and
        m_playedTimeRanges
        (WebCore::HTMLMediaElement::seek): Set current time to m_playedTimeRanges
        (WebCore::HTMLMediaElement::currentTime): m_currentTimeDuringSeek -> m_lastSeekTime
        (WebCore::HTMLMediaElement::played): Returns m_playedTimeRanges.
        (WebCore::HTMLMediaElement::updatePlayState): Add the new played time ranges when pausing. 
        Set the m_playing flag.
        * html/HTMLMediaElement.h:

        * html/TimeRanges.cpp:
        (TimeRanges::add): Merge range(s) if overlap.
        * html/TimeRanges.h: Add various helpers (below).
        (WebCore::TimeRanges::Range::isPointInRange): Added.
        (WebCore::TimeRanges::Range::isOverlappingRange): Ditto.
        (WebCore::TimeRanges::Range::unionWithOverlappingRange): Ditto.
        (WebCore::TimeRanges::Range::isBeforeRange): Ditto.

2009-04-17  Darin Adler  <darin@apple.com>

        Reviewed by Antti Koivisto.

        Bug 25210: don't use ObjC methods to wrap/unwrap DOM objects with ObjC
        https://bugs.webkit.org/show_bug.cgi?id=25210

        * WebCore.base.exp: Export the core and kit function overloads that are used
        in WebKit. Also resorted this file.

        * WebCore.xcodeproj/project.pbxproj: Re-added DOMHTMLCanvasElement.h to fix
        a strange problem with the file type.

        * bindings/objc/DOM.mm: Removed the many extraneous includes. Added new includes
        so we can use and implement the new core and kit functions. Import DOMInternal.h
        first so it can do its public/private magic.
        (-[DOMNode _rootObject]): Changed to use early-return style.
        (kitClass): Added. Tells the wrapper generator what kind of node class to create
        to wrap DOM nodes. This has the code that used to be in the _wrapNode method.
        (kit): Added. Takes an EventTarget and makes the appropriate type of wrapper,
        dpending on whether it's a Node or an SVGElementInstance. This replace methods
        that used to be on both of those classes.
        (-[DOMNode boundingBox]): Changed to use early return, and the core function.
        (-[DOMNode lineBoxRects]): Ditto.
        (-[DOMNode renderedImage]): Ditto.
        (-[DOMRange boundingBox]): Ditto.
        (-[DOMRange lineBoxRects]): Ditto.
        (-[DOMElement image]): Ditto.
        (-[DOMElement _font]): Ditto.
        (-[DOMElement _imageTIFFRepresentation]): Ditto.
        (-[DOMElement _getURLAttribute:]): Ditto.
        (-[DOMElement isFocused]): Ditto.
        (kit): Hand-wrote the version of this for NodeFilter, since it's a protocol,
        not a class in the binding.
        (core): Ditto.
        (-[DOMNodeFilter acceptNode:]): Use core.

        * bindings/objc/DOMAbstractView.mm:
        (-[DOMAbstractView document]): Use kit.
        (-[DOMAbstractView _disconnectFrame]): Call removeDOMWrapper, which is no longer
        in the WebCore namespace, since it's headed for WebKit in the future.
        (core): Hand-wrote the version of this for DOMAbstractView.mm, since we store
        a pointer to the Frame, not the DMWindow.
        (kit): Ditto.

        * bindings/objc/DOMCSS.mm:
        (kitClass): Added. Tells the wrapper generator what kind of node class to create
        to wrap CSS objects. This has the code that used to be in the _wrapStyleSheet,
        _wrapCSSRule, and _wrapCSSValue methods.

        * bindings/objc/DOMEvents.mm:
        (kitClass): Added. Tells the wrapper generator what kind of node class to create
        to wrap event objects. This has the code that used to be in the _wrapEvent methods.

        * bindings/objc/DOMHTML.mm:
        (-[DOMHTMLDocument createDocumentFragmentWithMarkupString:baseURL:]): Use kit and core.
        (-[DOMHTMLDocument createDocumentFragmentWithText:]): Ditto.
        (-[DOMHTMLDocument _createDocumentFragmentWithMarkupString:baseURLString:]): Ditto.
        (-[DOMHTMLInputElement _rectOnScreen]): Ditto.
        (-[DOMHTMLInputElement _replaceCharactersInRange:withString:selectingFromIndex:]): Ditto.
        (-[DOMHTMLInputElement _selectedRange]): Ditto.
        (-[DOMHTMLInputElement _setAutofilled:]): Ditto.
        (-[DOMHTMLSelectElement _activateItemAtIndex:]): Ditto.
        (-[DOMHTMLInputElement _isEdited]): Ditto.
        (-[DOMHTMLTextAreaElement _isEdited]): Ditto.
        (kitClass): Added. Gives HTMLOptionCollection objects an appropriate wrapper.

        * bindings/objc/DOMInternal.h: Removed most of the imports. There's no reason
        to have this header include all the other internal DOM headers. Removed unneeded
        interfaces, including the redeclaration of _init in DOMObject, since it's already
        inherited from WebScriptObject. Moved all the functions out of the WebCore
        namespace since this code is destined for WebKit, which doesn't use a namespace.
        Added kit and core functions for the two classes that live in this header.

        * bindings/objc/DOMInternal.mm:
        (-[WebScriptObject _initializeScriptDOMNodeImp]): Use core.

        * bindings/objc/DOMObject.h: Made the _internal field be private instead of
        protected. This also allows the "#define private public" trick to be used to
        make the field accessible inside the bindings code.

        * bindings/objc/DOMObject.mm:
        (-[DOMObject dealloc]): Updated for namespace change.
        (-[DOMObject sheet]): Use core and kit functions.

        * bindings/objc/DOMRGBColor.mm:
        (-[DOMRGBColor dealloc]): Updated for namespace change.
        (-[DOMRGBColor red]): Use kit function.
        (-[DOMRGBColor green]): Ditto.
        (-[DOMRGBColor blue]): Ditto.
        (-[DOMRGBColor alpha]): Ditto.
        (core): Added. Replaces the _RGBColor method.
        (kit): Added. Replaces the _wrapRGBColor method.

        * bindings/objc/DOMSVGPathSegInternal.mm:
        (kitClass): Added. Replaces the _wrapSVGPathSeg method.

        * bindings/objc/DOMUtility.mm:
        (JSC::createDOMWrapper): Use kit function.
        (createDOMWrapper): Ditto.

        * bindings/objc/DOMXPath.mm:
        (core): Added. Replaces the _xpathNSResolver method.
        (kit): Added. Replaces the _wrapXPathNSResolver method.

        * bindings/objc/ObjCEventListener.mm:
        (WebCore::ObjCEventListener::find): Changed to use early return.
        (WebCore::ObjCEventListener::handleEvent): Use kit function.

        * bindings/objc/ObjCNodeFilterCondition.mm:
        (WebCore::ObjCNodeFilterCondition::acceptNode): Use kit function.

        * bindings/objc/WebScriptObject.mm:
        (+[WebScriptObject scriptObjectForJSObject:originRootObject:rootObject:]):
        Updated for namespace change.

        * bindings/scripts/CodeGeneratorObjC.pm: Changed spelling of "license"
        to U.S. spelling. Removed GetObjCTypeMaker, GetObjCTypeGetterName,
        GetInternalTypeGetterSignature, and GetInternalTypeMakerSignature.
        Changed includes to conform to new scheme. Generate core and kit
        functions instead of methods and calls to those functions. Added a new
        attribute, Polymorphic, to indicate classes that have derived subclasses.
        Removed the old ObjCCustomInternalImpl attribute.

        * css/CSSRule.idl: Use Polymorphic attribute, so core and kit functions
        will be generated, with kit calling kitClass. This requires less hand-
        written code than the old ObjCCustomInternalImpl.
        * css/CSSValue.idl: Ditto.
        * css/StyleSheet.idl: Ditto.
        * dom/Event.idl: Ditto.
        * dom/Node.idl: Ditto.
        * html/HTMLCollection.idl: Ditto.
        * svg/SVGPathSeg.idl: Ditto.

        * editing/TextAffinity.h: Moved kit and core functions out of the
        WebCore namespace since this code is destined for WebKit, which
        doesn't use a namespace

        * platform/mac/ClipboardMac.mm:
        (WebCore::ClipboardMac::declareAndWriteDragImage): Use kit function.

        * platform/mac/DragDataMac.mm:
        (WebCore::DragData::asFragment): Use core function.

        * platform/mac/PasteboardMac.mm:
        (WebCore::Pasteboard::writeSelection): Use kit function.

        * svg/SVGElementInstance.idl: Removed now-unneeded ObjCCustomInternalImpl
        function. This can be generated in a standard way now.
        * svg/SVGViewSpec.idl: Ditto.

2009-04-17  Brady Eidson  <beidson@apple.com>

        Reviewed by Maciej Stachowiak

        <rdar://problem/5753299> "Private Browsing" doesn't affect HTML 5 Database storage

        If the Page is in private browsing mode when a statement is queued up, flag that 
        statement as read-only.

        It would be better to set the read-only flag on the database thread when it actually
        executes, but that would either require making Settings access a lock-protected operation
        or involve a synchronous callback to the WebCore thread, neither of which seem worth it.
        If it becomes an issue in practice, we can revisit this later.

        Test: storage/private-browsing-readonly.html

        * storage/Database.cpp:
        (WebCore::Database::setAuthorizerReadOnly):
        * storage/Database.h:

        * storage/DatabaseAuthorizer.cpp:  For all action types that would alter the database,
          deny when in read-only mode.
        (WebCore::DatabaseAuthorizer::reset):
        (WebCore::DatabaseAuthorizer::createTable):
        (WebCore::DatabaseAuthorizer::dropTable):
        (WebCore::DatabaseAuthorizer::allowAlterTable):
        (WebCore::DatabaseAuthorizer::createIndex):
        (WebCore::DatabaseAuthorizer::dropIndex):
        (WebCore::DatabaseAuthorizer::createTrigger):
        (WebCore::DatabaseAuthorizer::dropTrigger):
        (WebCore::DatabaseAuthorizer::createVTable):
        (WebCore::DatabaseAuthorizer::dropVTable):
        (WebCore::DatabaseAuthorizer::allowDelete):
        (WebCore::DatabaseAuthorizer::allowInsert):
        (WebCore::DatabaseAuthorizer::allowUpdate):
        (WebCore::DatabaseAuthorizer::setReadOnly):
        * storage/DatabaseAuthorizer.h:

        * storage/SQLStatement.cpp:
        (WebCore::SQLStatement::create): Add a m_readOnly flag.
        (WebCore::SQLStatement::SQLStatement): Ditto.
        (WebCore::SQLStatement::execute): If m_readOnly is set, tell the authorizer to change
          to read-only mode.
        * storage/SQLStatement.h:

        * storage/SQLTransaction.cpp:
        (WebCore::SQLTransaction::executeSQL): Flag the statement as read-only if the Page is
          currently in private browsing mode.

2009-04-17  Eric Seidel  <eric@webkit.org>

        Reviewed by Antti Koivisto.

        Move RenderPath and RenderSVGContainer onto a unified clippedOverflowRectForRepaint
        https://bugs.webkit.org/show_bug.cgi?id=25268

        Lots of minus lines.  Now we're sharing more sane code
        (which will respect -webkit-transforms! and scroll offsets correctly)

        Which means this fixes:
        https://bugs.webkit.org/show_bug.cgi?id=20769 and
        https://bugs.webkit.org/show_bug.cgi?id=21968 too!

        We're no longer expanding the paint rect "for anti-aliasing", since
        I can't find a case where that's required.  If it is, repaintRectInLocalCoordinates()
        should be fixed to handle those cases instead of here.

        This fixes svg/custom/scroll-hit-test (now that we respect scroll offsets when repainting)
        as well as improves our focus ring drawing seen in svg/custom/focus-ring
        focus rings are now closer to transformed content by a couple pixels (they were needlessly outset by the antialiasing hack)
        Also, it fixes the dumped rects for markers, causing a progression in svg/custom/marker-overflow-clip

        * rendering/RenderPath.cpp:
        (WebCore::RenderPath::repaintRectInLocalCoordinates):
        (WebCore::RenderPath::setPath):
        * rendering/RenderPath.h:
        * rendering/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::repaintRectInLocalCoordinates):
        * rendering/RenderSVGContainer.h:
        * rendering/RenderSVGModelObject.cpp:
        (WebCore::RenderSVGModelObject::clippedOverflowRectForRepaint):
        (WebCore::RenderSVGModelObject::computeRectForRepaint):
        * rendering/RenderSVGModelObject.h:
        * rendering/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::computeRectForRepaint):
        * rendering/RenderSVGRoot.h:

2009-04-17  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Darin Adler.

        Bug 25259: AX: VoiceOver cmd-cntl-space does not follow the google.com->more link
        https://bugs.webkit.org/show_bug.cgi?id=25259
  
        When a node becomes visible or hidden, accessibility needs to be told to update.

        Test: accessibility/visible-elements.html

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

2009-04-17  Kevin Ollivier  <kevino@theolliviers.com>

        wx build fix, added missing header.

        * platform/graphics/wx/TransformationMatrixWx.cpp:

2009-04-17  Simon Hausmann  <simon.hausmann@nokia.com>

        Unreviewed build fix.

        Fix the build with enabled SVG filters

        * rendering/RenderSVGModelObject.cpp: Include SVGResourceFilter.h.

2009-04-16  Eric Roman  <eroman@chromium.org>

        Reviewed by Dimitri Glazkov.

        https://bugs.webkit.org/show_bug.cgi?id=25196
        Add a missing V8DOMMap include.

        * bindings/v8/WorkerScriptController.cpp: Included V8DOMMap.h.

2009-04-16  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Darin Fisher.

        https://bugs.webkit.org/show_bug.cgi?id=25260
        Finish V8 custom bindings for InspectorController.

        * bindings/v8/custom/V8InspectorControllerCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL): Added.

2009-04-16  Kevin Watters  <kevinwatters@gmail.com>

        Reviewed by Kevin Ollivier.

        Switch to wxGraphicsBitmap when using wxGraphicsContext so that we're not doing
        unnecessary conversions internally when drawing bitmaps.
        
        https://bugs.webkit.org/show_bug.cgi?id=25248

        * platform/graphics/ImageSource.h:
        * platform/graphics/wx/ImageSourceWx.cpp:
        (WebCore::ImageSource::createFrameAtIndex):
        * platform/graphics/wx/ImageWx.cpp:
        (WebCore::BitmapImage::draw):
        (WebCore::BitmapImage::drawPattern):

2009-04-16  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by Dan Bernstein.

        Performing a block style change in an editable root that contains only a br adds a newline
        https://bugs.webkit.org/show_bug.cgi?id=25256

        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::moveParagraphContentsToNewBlockIfNecessary): Fix a bad check for an root
        block that didn't handle a root that contained a placeholder.

2009-04-16  Eric Seidel  <eric@webkit.org>

        Reviewed by Simon Fraser.

        Fix computeContainerBoundingBox to respect viewport translations
        https://bugs.webkit.org/show_bug.cgi?id=25254

        Previously computeContainerBoundingBox was just adding the viewportTranslation.
        Which, although it has a confusing name, only contains the scale and translation
        for the viewBox/preserveAspectRatio adjustment.  It does not contain the
        translation for the x/y offset of the viewport.
        localToParentTransform() does contain this offset, so we use that instead
        of the previous hacky code.

        * rendering/RenderSVGContainer.h:
        * rendering/RenderSVGViewportContainer.h:
        * rendering/SVGRenderSupport.cpp:
        (WebCore::computeContainerBoundingBox):

2009-04-16  Eric Seidel  <eric@webkit.org>

        Reviewed by Simon Fraser.

        Add a localToParentTransform() method which includes the
        full transform between local and parent local coordinates.
        https://bugs.webkit.org/show_bug.cgi?id=25226

        Moved m_localTransform up into RenderSVGTransformableContainer
        and added a comment to RenderSVGViewportContainer to make it more
        clear that it does not have a localTransform().

        This patch reveals two more failed design decisions:
        1.  Use of RenderBox::absoluteTransform() to mean "absoluteTransform()
            including only my localTransform()" callers are probably using it
            incorrectly anyway and are just masking bugs in the confused code.
        2.  computeContainerBoundingBox does not include viewport translations in
            its computed bounding box, so bounding boxes will be off for parents of
            inner <svg> elements.  I'll fix this an updated the results in a separate change.

        No functional changes, thus no tests.

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::localToParentTransform):
        (WebCore::RenderObject::absoluteTransform):
        * rendering/RenderObject.h:
        * rendering/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::layout):
        * rendering/RenderSVGContainer.h:
        (WebCore::RenderSVGContainer::viewportTransform):
        * rendering/RenderSVGHiddenContainer.cpp:
        * rendering/RenderSVGHiddenContainer.h:
        (WebCore::RenderSVGHiddenContainer::absoluteTransform):
        * rendering/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::localToParentTransform):
        (WebCore::RenderSVGRoot::absoluteTransform):
        * rendering/RenderSVGRoot.h:
        * rendering/RenderSVGTransformableContainer.cpp:
        (WebCore::RenderSVGTransformableContainer::localToParentTransform):
        (WebCore::RenderSVGTransformableContainer::localTransform):
        * rendering/RenderSVGTransformableContainer.h:
        * rendering/RenderSVGViewportContainer.cpp:
        (WebCore::RenderSVGViewportContainer::localToParentTransform):
        (WebCore::RenderSVGViewportContainer::absoluteTransform):
        * rendering/RenderSVGViewportContainer.h:
        * rendering/SVGRenderSupport.cpp:
        (WebCore::computeContainerBoundingBox):

2009-04-16  Adam Langley  <agl@google.com>

        Reviewed by Darin Fisher.

        Fix Chromium's rendering of <option> elements inside of <optgroups>.

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

        Test (will included as a manual test by https://bugs.webkit.org/show_bug.cgi?id=24900):

        <select>
          <optgroup label="Should be bold">
            <option>Should not be bold</option>
          </optgroup>
        </select>

        * css/themeWin.css: adding comments
        * platform/chromium/PopupMenuChromium.cpp:
        (WebCore::PopupListBox::getRowFont): use menuStyle() rather than the item's style

2009-04-16  Eric Roman  <eroman@chromium.org>

        Reviewed by Alexey Proskuryakov.

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

        Make DOMWindow::inlineEventListenerForType not have the "inline"
        keyword. As this method gets used outside of DOMWindow.

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::inlineEventListenerForType):

2009-04-16  Greg Bolsinga  <bolsinga@apple.com>

        Reviewed by Antti Koivisto.

        Fix <rdar://problem/6766969>
        
        When deferred repaints are enabled and being reset and there is a active
        timer, stop the timer and do the deferred repaints immediately.

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

2009-04-16  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=25241
        Remove superfluous NotImplemented.h includes.

        * html/CanvasRenderingContext2D.cpp:
        * html/CanvasStyle.cpp:
        * page/AccessibilityRenderObject.cpp:
        * platform/chromium/ScrollbarThemeChromiumLinux.cpp:
        * platform/graphics/GraphicsContext.cpp:
        * platform/graphics/cairo/ImageBufferCairo.cpp:
        * platform/graphics/cairo/PathCairo.cpp:
        * platform/graphics/chromium/SimpleFontDataLinux.cpp:
        * platform/graphics/gtk/FontGtk.cpp:
        * platform/graphics/gtk/IconGtk.cpp:
        * platform/graphics/qt/IconQt.cpp:
        * platform/graphics/qt/ImageQt.cpp:
        * platform/graphics/qt/ImageSourceQt.cpp:
        * platform/graphics/skia/ImageBufferSkia.cpp:
        * platform/graphics/skia/ImageSkia.cpp:
        * platform/graphics/win/ColorSafari.cpp:
        * platform/graphics/win/FontWin.cpp:
        * platform/graphics/win/GraphicsContextCGWin.cpp:
        * platform/graphics/win/GraphicsContextCairoWin.cpp:
        * platform/graphics/win/SimpleFontDataCairoWin.cpp:
        * platform/graphics/wx/ImageWx.cpp:
        * platform/graphics/wx/TransformationMatrixWx.cpp:
        * platform/gtk/PlatformScreenGtk.cpp:
        * platform/gtk/PopupMenuGtk.cpp:
        * platform/gtk/ScrollViewGtk.cpp:
        * platform/gtk/ScrollbarGtk.cpp:
        * platform/network/cf/ResourceHandleCFNet.cpp:
        * platform/posix/FileSystemPOSIX.cpp:
        * platform/qt/DragDataQt.cpp:
        * platform/qt/FileSystemQt.cpp:
        * platform/qt/Localizations.cpp:
        * platform/qt/PopupMenuQt.cpp:
        * platform/win/EditorWin.cpp:
        * platform/win/PasteboardWin.cpp:
        * platform/wx/KeyboardEventWx.cpp:
        * platform/wx/PopupMenuWx.cpp:
        * platform/wx/SharedTimerWx.cpp:
        * plugins/gtk/PluginViewGtk.cpp:
        * plugins/mac/PluginPackageMac.cpp:
        * plugins/qt/PluginPackageQt.cpp:
        * plugins/win/PluginViewWin.cpp:
        * rendering/RenderThemeChromiumLinux.cpp:
        * svg/graphics/SVGImage.cpp:

2009-04-16  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig.

        More fix for https://bugs.webkit.org/show_bug.cgi?id=21260
        Unbounded memory growth when churning elements with anonymous event handler functions
        
        Some cleanup in event handling code.

        * bindings/js/JSDOMGlobalObject.cpp:
        * bindings/js/JSDOMGlobalObject.h: Removed findJSProtectedEventListener
        and findJSProtectedEventListener because they are now unused.

        * bindings/js/JSEventListener.cpp:
        * bindings/js/JSEventListener.h:
        (WebCore::JSEventListener::clearGlobalObject):
        * bindings/js/JSLazyEventListener.cpp:
        (WebCore::JSLazyEventListener::JSLazyEventListener):
        (WebCore::JSLazyEventListener::~JSLazyEventListener):
        (WebCore::JSLazyEventListener::globalObject):
        * bindings/js/JSLazyEventListener.h:
        (WebCore::JSLazyEventListener::clearGlobalObject): Nixed JSProtectedEventListener,
        and merged it with JSLazyEventListener, the only remaining event listener
        that still GC-protects its function and global object.

        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::ScriptController):
        * bindings/js/ScriptController.h:
        (WebCore::ScriptController::setEventHandlerLineNumber):
        (WebCore::ScriptController::eventHandlerLineNumber): Renamed handlerLineno =>
        handlerLineNumber, because anything less would be uncivilized. Removed
        createInlineEventListener because it mostly did irrelevent work, so it
        just got in the way of understanding how event handler creation works.

        * dom/Document.cpp:
        (WebCore::Document::createEventListener):
        * dom/XMLTokenizerLibxml2.cpp:
        (WebCore::XMLTokenizer::startElementNs):
        * html/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::processToken): Ditto.

2009-04-16  Beth Dakin  <bdakin@apple.com>

        Reviewed by Dave Hyatt.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=20765 Website 
        crashes on load due to messy HTML in search form
        -and corresponding-
        <rdar://problem/6210633>

        Before this patch, <form>s were allowed to sit inside tables 
        without being wrapped by anonymous table parts. There was also a 
        concept that such a form could be "demoted" and would not be 
        allowed to have any children. This patch has the HTML parser mark 
        form elements that have been demoted as such, and then the demoted 
        forms are not given renderers. I also removed the code that allowed 
        forms to sit in tables without anonymous table sections. So now any 
        forms that do manage to get a renderer inside a table will also be 
        wrapped with appropriate table parts.

        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::HTMLFormElement):
        (WebCore::HTMLFormElement::rendererIsNeeded):
        * html/HTMLFormElement.h:
        (WebCore::HTMLFormElement::setDemoted):
        (WebCore::HTMLFormElement::isDemoted):
        * html/HTMLParser.cpp:
        (WebCore::HTMLParser::insertNode):
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::addChild):
        * rendering/RenderTableRow.cpp:
        (WebCore::RenderTableRow::addChild):
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::addChild):

2009-04-16  Xiaomei Ji  <xji@chromium.org>

        Reviewed by Simon Fraser.

        Fix https://bugs.webkit.org/show_bug.cgi?id=24527
        caret does not paint the first time you focus on a 0px right padding RTL div

        Test: fast/forms/caret-rtl.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::localCaretRect): When calculating x-axis if 
        alignment is alignRight, we need to subtract the caretWidth so that the
        caret at IntRect(x, y, caretWidth, height) is inside the block.

2009-04-16  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by Simon Fraser.

        https://bugs.webkit.org/show_bug.cgi?id=25228
        SelectionController::absoluteCaretBounds returns an inflated caret (the caret repaint rect)
        
        Return the bounds of the transformed caret, not the transformed repaint rect for the caret (which is inflated).

        * editing/SelectionController.cpp:
        (WebCore::SelectionController::localCaretRect):
        (WebCore::SelectionController::absoluteBoundsForLocalRect):
        (WebCore::SelectionController::caretRepaintRect):
        (WebCore::SelectionController::recomputeCaretRect):
        * editing/SelectionController.h:

2009-04-16  Pierre d'Herbemont  <pdherbemont@apple.com>

        Reviewed by Simon Fraser.

        https://bugs.webkit.org/show_bug.cgi?id=25187
        Bug 25187: <video> may not be rendered upon certain racy conditions

        Always create the video renderer when the load state reaches QTMovieLoadStateLoaded and
        the element is visible, not just when the movie has just been opened.

        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivate::updateStates): Make sure we do not make false
        assumption on the state changes order. Create the renderer if none is present,
        when movie is loaded instead.

2009-04-16  Eric Seidel  <eric@webkit.org>

        Reviewed by Geoffrey Garen.

        Add filterBoundingBox() to RenderSVGModelObject to share a tiny bit of code

        RenderSVGModelObject has much more interesting code it can share,
        but I'm just trying to get the commits out of my local branch and into
        the repository in any order I can. :)  This one was small.

        This will be used by the unified RenderSVGModelObject
        clippedOverflowRectForRepaint patch coming soon.

        * rendering/RenderPath.cpp:
        (WebCore::RenderPath::clippedOverflowRectForRepaint):
        * rendering/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::clippedOverflowRectForRepaint):
        * rendering/RenderSVGModelObject.cpp:
        (WebCore::RenderSVGModelObject::filterBoundingBox):
        * rendering/RenderSVGModelObject.h:

2009-04-16  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Eric Seidel and Adam Roben.

        More fix for https://bugs.webkit.org/show_bug.cgi?id=21260
        Unbounded memory growth when churning elements with anonymous event handler functions
        
        Simplified some EventHandler creation code.
        
        Removed a pile of code whose sole purpose was to allow SVG event handlers
        to supply a parameter named "evt" instead of the normal "event", and
        replaced it with a single parameter to JSLazyEventListener's constructor
        specifying the parameter name to use.

        * bindings/js/JSDOMWindowBase.h:
        * bindings/js/JSLazyEventListener.cpp:
        (WebCore::JSLazyEventListener::JSLazyEventListener):
        (WebCore::JSLazyEventListener::parseCode):
        * bindings/js/JSLazyEventListener.h:
        (WebCore::JSLazyEventListener::create):
        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::createInlineEventListener):
        * bindings/js/ScriptController.h:
        * dom/Document.cpp:
        (WebCore::Document::createEventListener):

2009-04-15  Eric Seidel  <eric@webkit.org>

        Reviewed by David Hyatt.

        Split out objectBoundingBox and repaintRectInLocalCoordinates from relativeBBox
        in preparation for simplifying (and fixing) repaint logic in the SVG rendering tree.
        https://bugs.webkit.org/show_bug.cgi?id=25224

        objectBoundingBox() matches the SVG 1.1 concept of a "bounding box"

        repaintRectInLocalCoordinates() should return the a rect covering all painted content.
        However, repaintRectInLocalCoordinates() still only returns the "stroke bounding box"
        in this patch.  In a future patch, repaintRectInLocalCoordinates will be fixed to return
        a rect covering all painted content.  In order to avoid changing several hundred layout test results, I've left
        the behavior as-is for now.  The returned rect is used by various repaintRectInLocalCoordinates
        implementations and sometimes adjusted to include all painted content, but not always, and
        the places where the adjustments are made are sometimes wrong.  Again, will be fixed in
        an upcoming patch.

        This patch discovered a bug in Font::drawTextUsingSVGFont, which is probably causing
        bounding-box relative gradients on SVGFont glyphs to not paint correctly.
        I chose not to try and fix the bug in this patch and instead left a FIXME.

        This patch also discovered that at least tspan.getBBox() is broken.  This
        along with the foreignObject.getBBox() change will be tested (and fixed) in a
        later patch.  https://bugs.webkit.org/show_bug.cgi?id=25225

        No change in behavior (besides the above mentioned foreignObject.getBBox()), thus no tests.

        * rendering/RenderForeignObject.cpp:
        (WebCore::RenderForeignObject::objectBoundingBox): this is a behavior improvement for getBBox() test case coming in a later patch
        (WebCore::RenderForeignObject::repaintRectInLocalCoordinates): only really used for layout test results, might some day be used for repaint.
        * rendering/RenderForeignObject.h:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::objectBoundingBox): new methods, ASSERT if used but not implemented.
        (WebCore::RenderObject::repaintRectInLocalCoordinates):
        * rendering/RenderObject.h:
        * rendering/RenderPath.cpp:
        (WebCore::RenderPath::objectBoundingBox):
        (WebCore::RenderPath::repaintRectInLocalCoordinates):
        (WebCore::RenderPath::clippedOverflowRectForRepaint):
        (WebCore::RenderPath::lineHeight):
        (WebCore::RenderPath::baselinePosition):
        (WebCore::RenderPath::paint):
        (WebCore::RenderPath::addFocusRingRects):
        * rendering/RenderPath.h:
        * rendering/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::paint):
        (WebCore::RenderSVGContainer::objectBoundingBox):
        (WebCore::RenderSVGContainer::repaintRectInLocalCoordinates):
        * rendering/RenderSVGContainer.h:
        * rendering/RenderSVGGradientStop.h:
        (WebCore::RenderSVGGradientStop::objectBoundingBox):
        (WebCore::RenderSVGGradientStop::repaintRectInLocalCoordinates):
        * rendering/RenderSVGHiddenContainer.cpp:
        (WebCore::RenderSVGHiddenContainer::objectBoundingBox):
        (WebCore::RenderSVGHiddenContainer::repaintRectInLocalCoordinates):
        * rendering/RenderSVGHiddenContainer.h:
        * rendering/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::objectBoundingBox):
        (WebCore::RenderSVGImage::repaintRectInLocalCoordinates):
        (WebCore::RenderSVGImage::calculateAbsoluteBounds):
        (WebCore::RenderSVGImage::addFocusRingRects):
        * rendering/RenderSVGImage.h:
        * rendering/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::paint):
        (WebCore::RenderSVGRoot::objectBoundingBox):
        (WebCore::RenderSVGRoot::repaintRectInLocalCoordinates):
        * rendering/RenderSVGRoot.h:
        * rendering/RenderSVGTSpan.h:
        (WebCore::RenderSVGTSpan::objectBoundingBox):
        (WebCore::RenderSVGTSpan::repaintRectInLocalCoordinates):
        * rendering/RenderSVGText.cpp:
        (WebCore::RenderSVGText::clippedOverflowRectForRepaint):
        (WebCore::RenderSVGText::absoluteRects):
        (WebCore::RenderSVGText::absoluteQuads):
        (WebCore::RenderSVGText::objectBoundingBox):
        (WebCore::RenderSVGText::repaintRectInLocalCoordinates):
        * rendering/RenderSVGText.h:
        * rendering/RenderSVGViewportContainer.cpp:
        (WebCore::RenderSVGViewportContainer::viewportTransform):
        * rendering/SVGRenderSupport.cpp:
        (WebCore::computeContainerBoundingBox):
        * rendering/SVGRenderSupport.h:
        * rendering/SVGRenderTreeAsText.cpp:
        (WebCore::operator<<):
        * svg/SVGFont.cpp:
        (WebCore::Font::drawTextUsingSVGFont):
        * svg/SVGLocatable.cpp:
        (WebCore::SVGLocatable::getBBox):
        * svg/SVGPatternElement.cpp:
        (WebCore::SVGPatternElement::buildPattern):
        * svg/graphics/SVGPaintServerGradient.cpp:
        (WebCore::createMaskAndSwapContextForTextGradient):
        (WebCore::clipToTextMask):
        (WebCore::SVGPaintServerGradient::setup):
        * svg/graphics/SVGPaintServerPattern.cpp:
        (WebCore::SVGPaintServerPattern::setup):

2009-04-16  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        - fix <rdar://problem/6032139> Table cell widths calculated
          incorrectly on table that uses table-layout:fixed, colspans, and a mix
          of percentage and pixel widths

        Test: fast/table/fixed-granular-cols.html

        The incorrect widths resulted from incorrect handling of the case where
        the <col> elements are more granular than the table cells.

        * rendering/FixedTableLayout.cpp:
        (WebCore::FixedTableLayout::calcWidthArray): When processing <col>
        elements, append effective columns or split existing effective columns
        as needed.

2009-04-16  Alexey Proskuryakov  <ap@webkit.org>

        <rdar://problem/6795285> Infinite recursion in ResourceHandle::receivedRequestToContinueWithoutCredential

        Rolled out <http://trac.webkit.org/projects/webkit/changeset/42536> - the two instances of
        authentication challenge are different, after all. Added a FIXME comment about a possible
        future improvement.

        * platform/network/ResourceHandle.cpp:
        (WebCore::ResourceHandle::clearAuthentication):
        * platform/network/ResourceHandleInternal.h:
        (WebCore::ResourceHandleInternal::ResourceHandleInternal):
        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::ResourceHandle::didReceiveAuthenticationChallenge):
        (WebCore::ResourceHandle::receivedCredential):
        (WebCore::ResourceHandle::receivedRequestToContinueWithoutCredential):
        (WebCore::ResourceHandle::receivedCancellation):
        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::didReceiveAuthenticationChallenge):
        (WebCore::ResourceHandle::didCancelAuthenticationChallenge):
        (WebCore::ResourceHandle::receivedCredential):
        (WebCore::ResourceHandle::receivedRequestToContinueWithoutCredential):
        (WebCore::ResourceHandle::receivedCancellation):

2009-04-15  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig.
        
        More fix for https://bugs.webkit.org/show_bug.cgi?id=21260
        Unbounded memory growth when churning elements with anonymous event handler functions

        Also fixed <rdar://problem/6792909> WebInspector crashes when reloading
        a page with breakpoints set
        
        * bindings/js/JSEventListener.cpp:
        (WebCore::JSEventListener::clearJSFunctionInline):
        (WebCore::JSEventListener::markJSFunction):
        * bindings/js/JSEventListener.h: Actually clear our function and global
        object pointers when our client instructs us to. (Oops!) Also, mark
        our global object while we still intend to use it.

        * bindings/js/JSSVGElementInstanceCustom.cpp:
        (WebCore::JSSVGElementInstance::mark):
        (WebCore::toJS):
        * bindings/scripts/CodeGeneratorJS.pm:
        * svg/SVGElementInstance.idl: For every SVGElementInstance wrapper, ensure
        that the corresponding element also has a wrapper, to keep its event
        listeners alive.

2009-04-15  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Darin Fisher.

        https://bugs.webkit.org/show_bug.cgi?id=25201
        Add ScriptFunctionCall/ScriptObject for V8.

        * bindings/v8/ScriptFunctionCall.cpp: Added.
        * bindings/v8/ScriptFunctionCall.h: Added.
        * bindings/v8/ScriptObject.cpp: Added.
        * bindings/v8/ScriptObject.h: Added.
        * bindings/v8/ScriptObjectQuarantine.cpp: Added.
        * bindings/v8/ScriptObjectQuarantine.h: Added.
        * bindings/v8/ScriptScope.cpp: Added.
        * bindings/v8/ScriptScope.h: Added.
        * bindings/v8/ScriptState.h:
        (WebCore::ScriptState::ScriptState): Added new constructors.
        (WebCore::ScriptState::frame): Added Frame ptr accessor.
        * bindings/v8/ScriptString.h:
        (WebCore::ScriptString::ScriptString): Added default constructor.
        * bindings/v8/ScriptValue.h:
        (WebCore::ScriptValue::isEqual): Added.

2009-04-15  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Unreviewed build fix. Add RenderSVGModelObject.* to GTK+'s build.

        * GNUmakefile.am:

2009-04-15  Steve Falkenburg  <sfalken@apple.com>

        <rdar://problem/6785760> WebCore should use a maximum of 6 connections per host, not 4

        Reviewed by Adam Roben.

        * platform/network/ResourceRequestBase.cpp:
        * platform/network/cf/ResourceRequestCFNet.cpp:
        (WebCore::initializeMaximumHTTPConnectionCountPerHost):

2009-04-15  Sam Weinig  <sam@webkit.org>

        Reviewed by Mark Rowe.

        Add special casing to bindings generator so that custom functions
        starting with xml or xslt conform to WebKit style guidelines.

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::xmlHttpRequest):
        (WebCore::JSDOMWindow::xsltProcessor):
        * bindings/scripts/CodeGenerator.pm:

2009-04-15  Eric Seidel  <eric@webkit.org>

        Reviewed by Simon Fraser.

        Add minimal RenderSVGModelObject and make RenderPath and RenderSVGContainer use it.
        https://bugs.webkit.org/show_bug.cgi?id=25221
        
        RenderSVGModelObject is the base rendering class for things which live
        in the SVG rendering tree.  Not all SVG renders are RenderSVGModelObjects yet.
        
        More patches coming.  This is just adding the class, future patches
        will pull more logic out of RenderPath and RenderSVGContainer into RenderSVGModelObject.

        * WebCore.pro:
        * WebCore.scons:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * rendering/RenderPath.cpp:
        (WebCore::RenderPath::RenderPath):
        * rendering/RenderPath.h:
        * rendering/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::RenderSVGContainer):
        * rendering/RenderSVGContainer.h:
        * rendering/RenderSVGModelObject.cpp: Added.
        (WebCore::RenderSVGModelObject::RenderSVGModelObject):
        * rendering/RenderSVGModelObject.h: Added.
        (WebCore::RenderSVGModelObject::requiresLayer):
        * rendering/RenderTreeAsText.cpp:
        * rendering/SVGRenderTreeAsText.cpp:

2009-04-15  Eric Seidel  <eric@webkit.org>

        Reviewed by Simon Fraser.

        Remove more dead code from RenderSVGHiddenContainer.

        lineHeight and baselinePosition used to be on RenderSVGContainer
        (of which this is a subclass) because RenderSVGContainer used
        to be a RenderBox and always the renderer for <svg>
        Now <svg> uses RenderSVGRoot when needing a RenderBox (inside HTML)
        and RenderSVGViewportContainer (when inside SVG content)
        so there is no need for RenderSVGHiddenContainer to have these HTML-specific methods.

        * rendering/RenderSVGHiddenContainer.cpp:
        * rendering/RenderSVGHiddenContainer.h:

2009-04-15  Eric Seidel  <eric@webkit.org>

        Reviewed by Simon Fraser.

        Remove unneeded (broken) code from SVG renderers
        https://bugs.webkit.org/show_bug.cgi?id=25214

        Mostly due to my historical confusions about the render tree
        and some methods not being removed after classes were split.

        RenderSVGRoot is an RenderBox and should just use all the
        standard RenderBox methods for inspector and repaint rects.

        RenderSVGContainer is *not* a RenderBox (any more) and thus
        doesn't need lineHeight or width/height or calcBounds.

        RenderSVGViewportContainer had some broken code which tried
        to see if the click was inside the container at all, but it
        was using width/height metrics based off of the containing
        block (from calcWidth) which is wrong (since its real
        width/height are from its containing viewport not containing block).

        * rendering/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::RenderSVGContainer):
        (WebCore::RenderSVGContainer::layout):
        * rendering/RenderSVGContainer.h:
        * rendering/RenderSVGRoot.cpp:
        * rendering/RenderSVGRoot.h:
        * rendering/RenderSVGViewportContainer.cpp:
        (WebCore::RenderSVGViewportContainer::layout):
        (WebCore::RenderSVGViewportContainer::nodeAtPoint):

2009-04-15  Eric Seidel  <eric@webkit.org>

        Reviewed by Simon Fraser and Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=25217
        Simplify nearestViewportElement and farthestViewportElement using isViewportElement and a for loop
        Add ASSERT(element) to all these functions since they should never be passed a null element.

        * svg/SVGLocatable.cpp:
        (WebCore::isViewportElement):
        (WebCore::SVGLocatable::nearestViewportElement):
        (WebCore::SVGLocatable::farthestViewportElement):
        (WebCore::SVGLocatable::getBBox):
        (WebCore::SVGLocatable::getCTM):
        (WebCore::SVGLocatable::getScreenCTM):

2009-04-15  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Remove support for the ObjCIvar extended attribute from the Objective-C
        bindings generator.  It is not used anymore.

        * bindings/scripts/CodeGeneratorObjC.pm:

2009-04-15  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=25204
        Create a fast path for ReplaceSelectionCommand that merges text nodes
        
        During simple pastes, where we're just pasting a text node into a run of text, we would split the current
        text and insert the new node in between.  This is slow and we hit this bug:

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

        in the layout and rendering code where adjacent text nodes don't shape correctly in Arabic.
        
        This change creates a fast path for ReplaceSelectionCommand that inserts text directly into the
        text node that holds the selection (very similar to the fast path we wrote for InsertTextCommand).

        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::doApply):
        (WebCore::ReplaceSelectionCommand::performTrivialReplace):
        * editing/ReplaceSelectionCommand.h:
        * editing/TextIterator.cpp:

2009-04-15  Adam Langley  <agl@google.com>

        Reviewed by Darin Fisher.

        Move VDMX parsing into the Chromium Linux port.

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

        VDMX tables are optional tables in TrueType fonts which contain the
        exact pixel height of a given font at a given pel size. In order to
        match Windows font metrics we have to use these numbers.

        Previously, the parsing was performed in Skia. As part of the merge
        with upstream Skia, an interface for getting table data from a font
        has been added to Skia and we're moving the parsing into WebKit.

        This does not change any layout tests.

        * platform/graphics/chromium/FontPlatformDataLinux.cpp:
        (WebCore::FontPlatformData::uniqueID):
        * platform/graphics/chromium/FontPlatformDataLinux.h:
        * platform/graphics/chromium/FontTrueTypeLinux.cpp: Added.
        * platform/graphics/chromium/FontTrueTypeLinux.h: Added.
        * platform/graphics/chromium/SimpleFontDataLinux.cpp:
        (WebCore::SimpleFontData::platformInit):
        (WebCore::SimpleFontData::platformWidthForGlyph):

2009-04-15  Stephen White  <senorblanco@chromium.org>

        Reviewed by Dimitri Glazkov.

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

        Restore stroked outlines to PlatformContextSkia::drawRect().
        These were removed inadvertently in r41805, aka
        https://bugs.webkit.org/show_bug.cgi?id=24662.
        SkRect is { left, top, right, bottom }, not { left, top, width, height }.

        * platform/graphics/skia/PlatformContextSkia.cpp:
        (PlatformContextSkia::drawRect):

2009-04-15  Dan Bernstein  <mitz@apple.com>

        Reviewed by Dave Hyatt.

        - fix <rdar://problem/6777374> Generated content with display: run-in
          causes a crash

        Test: fast/runin/generated.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::handleRunInChild): Check if the run-in block is
        generated, and if so, make the RenderInline anonymous instead of passing
        a 0 node to the RenderInline constructor. If the run-in itself is
        generated, do move :before and :after children from the block into the
        inline, as they will not be regenerated. Changed nested ifs into early
        returns.

2009-04-15  Eric Roman  <eroman@chromium.org>

        Reviewed by Geoffrey Garen.

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

        Expose DOMWindow::removeInlineEventListenerForType and
        DOMWindow::inlineEventListenerForType as public.

        * page/DOMWindow.h:

2009-04-14  Eric Roman  <eroman@chromium.org>

        Reviewed by Darin Adler.

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

        Wrap RegisteredEventListener's markEventListeners and invalidateEventListeners
        in a USE(JSC), since it doesn't compile with V8 bindings.

        * dom/RegisteredEventListener.h:

2009-04-15  Eric Roman  <eroman@chromium.org>

        Reviewed by Darin Adler.

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

        Fix a caller of Settings::javaScriptCanOpenWindowsAutomatically() to
        use the new name.

        * bindings/v8/custom/V8DOMWindowCustom.cpp:

2009-04-14  Alexey Proskuryakov  <ap@webkit.org>

        Rubber-stamped by Darin Adler.

        Don't keep platform objects for authentication challenge in ResourceHandleInternal.
        We already have a copy in AuthenticationChallenge object.

        * platform/network/ResourceHandle.cpp:
        (WebCore::ResourceHandle::clearAuthentication):
        * platform/network/ResourceHandleInternal.h:
        (WebCore::ResourceHandleInternal::ResourceHandleInternal):
        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::ResourceHandle::didReceiveAuthenticationChallenge):
        (WebCore::ResourceHandle::receivedCredential):
        (WebCore::ResourceHandle::receivedRequestToContinueWithoutCredential):
        (WebCore::ResourceHandle::receivedCancellation):
        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::didReceiveAuthenticationChallenge):
        (WebCore::ResourceHandle::didCancelAuthenticationChallenge):
        (WebCore::ResourceHandle::receivedCredential):
        (WebCore::ResourceHandle::receivedRequestToContinueWithoutCredential):
        (WebCore::ResourceHandle::receivedCancellation):

2009-04-14  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig.

        Nixed some now-defunct autogeneration code.

        * bindings/scripts/CodeGeneratorJS.pm:

2009-04-14  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Alexey Proskuryakov.
        
        Fix <rdar://problem/6755724> <audio> and <video> elements can reference local 
        file:/// URLs from remote in Safari

        Tests: http/tests/security/local-video-poster-from-remote.html
               http/tests/security/local-video-source-from-remote.html
               http/tests/security/local-video-src-from-remote.html

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::loadResource): Don't pass url to media engine unless loader->canLoad()
        says it is OK.

2009-04-14  Sam Weinig  <sam@webkit.org>

        Reviewed by Darin Adler.

        Part of <rdar://problem/6150868>
        Fix incorrect handling of content that needs to go into the head element
        once the head element has been removed.

        Test: fast/parser/head-content-after-head-removal.html

        * html/HTMLParser.cpp:
        (WebCore::HTMLParser::HTMLParser): Remove unneeded initializer of m_head.
        (WebCore::HTMLParser::handleError): Update since m_head is now a RefPtr.
        (WebCore::HTMLParser::createHead): Ditto.
        * html/HTMLParser.h: Make m_head a RefPtr.

2009-04-14  Geoffrey Garen  <ggaren@apple.com>

        Used svn merge -r42529:42528 to roll out my last patch because it broke
        the build.

        * bindings/js/JSDOMGlobalObject.cpp:
        (WebCore::JSDOMGlobalObject::~JSDOMGlobalObject):
        (WebCore::JSDOMGlobalObject::findJSProtectedEventListener):
        (WebCore::JSDOMGlobalObject::findOrCreateJSProtectedEventListener):
        (WebCore::JSDOMGlobalObject::jsProtectedEventListeners):
        (WebCore::JSDOMGlobalObject::jsProtectedInlineEventListeners):
        * bindings/js/JSDOMGlobalObject.h:

2009-04-14  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig.

        Nixed some now-dead code related to protected event listeners.

        * bindings/js/JSDOMGlobalObject.cpp:
        (WebCore::JSDOMGlobalObject::~JSDOMGlobalObject):
        * bindings/js/JSDOMGlobalObject.h:

2009-04-14  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig.

        More fix for https://bugs.webkit.org/show_bug.cgi?id=21260
        Unbounded memory growth when churning elements with anonymous event handler functions

        Stop using protected event listeners on SVGElementInstance.

        * bindings/js/JSSVGElementInstanceCustom.cpp:
        (WebCore::JSSVGElementInstance::mark): Mark our event listeners, since
        they're not protected anymore.

        (WebCore::JSSVGElementInstance::addEventListener):
        (WebCore::JSSVGElementInstance::removeEventListener): Make unprotected
        event listeners, since we mark them now.

        * bindings/scripts/CodeGeneratorJS.pm: Autogenerate event listener
        invalidation for SVGElementInstance.

        * svg/SVGElementInstance.h:
        (WebCore::SVGElementInstance::eventListeners): Added an accessor, for
        the sake of autogenerated code.

        * svg/SVGElementInstance.idl: Removed the ProtectedEventListener attribute
        from event listener properties. Added a CustomMarkFunction attribute,
        since we need to mark our event listeners.

2009-04-14  Steve Falkenburg  <sfalken@apple.com>

        Windows build fix.

        * WebCore.vcproj/WebCore.vcproj:

2009-04-14  Steve Falkenburg  <sfalken@apple.com>

        Add header guards to WebCore forwarding headers.
        
        Speeds up WebCore debug build on Windows by 12% on my system,
        since Visual Studio appears to not optimize for standard header
        guards in included files.
        
        Rubber stamped by Ada Chan.

        * ForwardingHeaders/debugger/Debugger.h:
        * ForwardingHeaders/debugger/DebuggerActivation.h:
        * ForwardingHeaders/debugger/DebuggerCallFrame.h:
        * ForwardingHeaders/interpreter/CallFrame.h:
        * ForwardingHeaders/interpreter/Interpreter.h:
        * ForwardingHeaders/masm/X86Assembler.h:
        * ForwardingHeaders/parser/Parser.h:
        * ForwardingHeaders/parser/SourceCode.h:
        * ForwardingHeaders/parser/SourceProvider.h:
        * ForwardingHeaders/pcre/pcre.h:
        * ForwardingHeaders/profiler/Profile.h:
        * ForwardingHeaders/profiler/ProfileNode.h:
        * ForwardingHeaders/profiler/Profiler.h:
        * ForwardingHeaders/runtime/ArgList.h:
        * ForwardingHeaders/runtime/ArrayPrototype.h:
        * ForwardingHeaders/runtime/BooleanObject.h:
        * ForwardingHeaders/runtime/CallData.h:
        * ForwardingHeaders/runtime/Collector.h:
        * ForwardingHeaders/runtime/CollectorHeapIterator.h:
        * ForwardingHeaders/runtime/Completion.h:
        * ForwardingHeaders/runtime/ConstructData.h:
        * ForwardingHeaders/runtime/DateInstance.h:
        * ForwardingHeaders/runtime/Error.h:
        * ForwardingHeaders/runtime/FunctionConstructor.h:
        * ForwardingHeaders/runtime/FunctionPrototype.h:
        * ForwardingHeaders/runtime/Identifier.h:
        * ForwardingHeaders/runtime/InitializeThreading.h:
        * ForwardingHeaders/runtime/InternalFunction.h:
        * ForwardingHeaders/runtime/JSArray.h:
        * ForwardingHeaders/runtime/JSByteArray.h:
        * ForwardingHeaders/runtime/JSFunction.h:
        * ForwardingHeaders/runtime/JSGlobalData.h:
        * ForwardingHeaders/runtime/JSGlobalObject.h:
        * ForwardingHeaders/runtime/JSLock.h:
        * ForwardingHeaders/runtime/JSNumberCell.h:
        * ForwardingHeaders/runtime/JSObject.h:
        * ForwardingHeaders/runtime/JSString.h:
        * ForwardingHeaders/runtime/JSValue.h:
        * ForwardingHeaders/runtime/Lookup.h:
        * ForwardingHeaders/runtime/ObjectPrototype.h:
        * ForwardingHeaders/runtime/Operations.h:
        * ForwardingHeaders/runtime/PropertyMap.h:
        * ForwardingHeaders/runtime/PropertyNameArray.h:
        * ForwardingHeaders/runtime/Protect.h:
        * ForwardingHeaders/runtime/PrototypeFunction.h:
        * ForwardingHeaders/runtime/StringObject.h:
        * ForwardingHeaders/runtime/StringObjectThatMasqueradesAsUndefined.h:
        * ForwardingHeaders/runtime/StringPrototype.h:
        * ForwardingHeaders/runtime/Structure.h:
        * ForwardingHeaders/runtime/SymbolTable.h:
        * ForwardingHeaders/runtime/UString.h:
        * ForwardingHeaders/wrec/WREC.h:
        * ForwardingHeaders/wtf/ASCIICType.h:
        * ForwardingHeaders/wtf/AlwaysInline.h:
        * ForwardingHeaders/wtf/Assertions.h:
        * ForwardingHeaders/wtf/ByteArray.h:
        * ForwardingHeaders/wtf/CurrentTime.h:
        * ForwardingHeaders/wtf/Deque.h:
        * ForwardingHeaders/wtf/DisallowCType.h:
        * ForwardingHeaders/wtf/FastMalloc.h:
        * ForwardingHeaders/wtf/Forward.h:
        * ForwardingHeaders/wtf/GetPtr.h:
        * ForwardingHeaders/wtf/HashCountedSet.h:
        * ForwardingHeaders/wtf/HashFunctions.h:
        * ForwardingHeaders/wtf/HashMap.h:
        * ForwardingHeaders/wtf/HashSet.h:
        * ForwardingHeaders/wtf/HashTable.h:
        * ForwardingHeaders/wtf/HashTraits.h:
        * ForwardingHeaders/wtf/ListHashSet.h:
        * ForwardingHeaders/wtf/ListRefPtr.h:
        * ForwardingHeaders/wtf/Locker.h:
        * ForwardingHeaders/wtf/MainThread.h:
        * ForwardingHeaders/wtf/MathExtras.h:
        * ForwardingHeaders/wtf/MessageQueue.h:
        * ForwardingHeaders/wtf/Noncopyable.h:
        * ForwardingHeaders/wtf/NotFound.h:
        * ForwardingHeaders/wtf/OwnArrayPtr.h:
        * ForwardingHeaders/wtf/OwnPtr.h:
        * ForwardingHeaders/wtf/PassRefPtr.h:
        * ForwardingHeaders/wtf/Platform.h:
        * ForwardingHeaders/wtf/PtrAndFlags.h:
        * ForwardingHeaders/wtf/RandomNumber.h:
        * ForwardingHeaders/wtf/RefCounted.h:
        * ForwardingHeaders/wtf/RefCountedLeakCounter.h:
        * ForwardingHeaders/wtf/RefPtr.h:
        * ForwardingHeaders/wtf/RetainPtr.h:
        * ForwardingHeaders/wtf/StdLibExtras.h:
        * ForwardingHeaders/wtf/StringExtras.h:
        * ForwardingHeaders/wtf/ThreadSpecific.h:
        * ForwardingHeaders/wtf/Threading.h:
        * ForwardingHeaders/wtf/TypeTraits.h:
        * ForwardingHeaders/wtf/UnusedParam.h:
        * ForwardingHeaders/wtf/Vector.h:
        * ForwardingHeaders/wtf/VectorTraits.h:
        * ForwardingHeaders/wtf/dtoa.h:
        * ForwardingHeaders/wtf/unicode/Collator.h:
        * ForwardingHeaders/wtf/unicode/UTF8.h:
        * ForwardingHeaders/wtf/unicode/Unicode.h:
        * ForwardingHeaders/wtf/unicode/icu/UnicodeIcu.h:

2009-04-14  Sam Weinig  <sam@webkit.org>

        Reviewed by Adele Peterson.

        Use a template function to generalize the way we create non-caching
        JS function getters.

        * bindings/js/JSDOMWindowCustom.cpp:
        * bindings/js/JSDOMWindowCustom.h:
        (WebCore::nonCachingStaticFunctionGetter):
        (WebCore::JSDOMWindow::customGetOwnPropertySlot):

2009-04-14  Benjamin C Meyer  <benjamin.meyer@torchmobile.com>

        Reviewed by George Staikos.

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

        When creating a QNetworkRequest make sure to populate the
        CacheLoadControlAttribute with the value set by the ResourceRequest::cachePolicy() so that the cache will be used as WebKit expects.

        * WebKit/qt/tests/qwebpage/tst_qwebpage.cpp:
        (tst_QWebPage::requestCache):

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

2009-04-14  Timothy Hatcher  <timothy@apple.com>

        Fix a world leak caused by opening the Web Inspector. This was
        a regression caused by the InspectorController becoming refcounted.

        <rdar://problem/6782944>

        Reviewed by Darin Adler.

        * bindings/js/ScriptObject.cpp:
        (WebCore::ScriptGlobalObject::get): Renamed to better match the
        other functions.
        (WebCore::ScriptGlobalObject::remove): Added. Deletes the property.
        * bindings/js/ScriptObject.h:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::~InspectorController): Do less work
        at destruction time since the object lifetime is tied to JS GC.
        Assert that inspectedPageDestroyed cleared everything needed.
        (WebCore::InspectorController::inspectedPageDestroyed): Do most
        of the work that ~InspectorController was doing.
        (WebCore::InspectorController::scriptObjectReady): Renamed getObject.

2009-04-14  Antony Sargent  <asargent@chromium.org>

        Reviewed by Dimitri Glazkov.

        This is some cleanup motivated by the crash in http://crbug.com/9775 , which 
        happens because of calling window.open inside a window.onload handler. 

        These changes are just part of the fix, along with some asserts to help prevent
        breakage on future changes. 

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

        * bindings/v8/V8EventListenerList.cpp:
        (WebCore::V8EventListenerList::add):
        (WebCore::V8EventListenerList::remove):
        (WebCore::V8EventListenerList::clear):
        * bindings/v8/V8EventListenerList.h:
        (WebCore::V8EventListenerList::size):

2009-04-14  Evan Martin  <evan@chromium.org>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=25142
        Fix a race that can occur between flex and the perl script that parses
        its output.

        * css/maketokenizer: Consume all input.

2009-04-14  Rohit Rao  <rohitrao@google.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=25184
        Do not change the text color for selected text in Mac Chromium.

        * rendering/RenderThemeChromiumMac.h:
        (WebCore::RenderThemeChromiumMac::supportsSelectionForegroundColors):
        Now returns false, matching the behavior of Safari on Mac.

2009-04-14  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=25172
        Extra partial layout during the first keypress in an empty block
        
        Determining if a placeholder needs to be removed requires the creation of a VisiblePosition 
        which was triggering layout before we were finished modifying the DOM for the insert operation.
        
        Find out if we need to remove a placeholder near the start of the operation, and if we do remember 
        where it's located.  Then, later, remove it along with all of the other DOM operations we perform.
        
        Renamed lineBreakExistsAtPosition to lineBreakExistsAtVisiblePosition and added a lineBreakExistsAtPosition
        that takes in a Position.  In InsertTextCommand, we can use the latter, since we normalize manually.
        
        removePlaceholderAt now takes in a Position that it assumes has already been checked for a placeholder.
        
        No test added as this only effects performance.

        * editing/BreakBlockquoteCommand.cpp:
        (WebCore::BreakBlockquoteCommand::doApply):
        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::removePlaceholderAt):
        (WebCore::CompositeEditCommand::moveParagraphs):
        (WebCore::CompositeEditCommand::breakOutOfEmptyMailBlockquotedParagraph):
        (WebCore::CompositeEditCommand::positionAvoidingSpecialElementBoundary):
        * editing/CompositeEditCommand.h:
        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::calculateTypingStyleAfterDelete):
        (WebCore::DeleteSelectionCommand::doApply):
        * editing/FormatBlockCommand.cpp:
        (WebCore::FormatBlockCommand::doApply):
        * editing/InsertLineBreakCommand.cpp:
        (WebCore::InsertLineBreakCommand::doApply):
        * editing/InsertParagraphSeparatorCommand.cpp:
        (WebCore::InsertParagraphSeparatorCommand::doApply):
        * editing/InsertTextCommand.cpp:
        (WebCore::InsertTextCommand::input):
        * editing/htmlediting.cpp:
        (WebCore::lineBreakExistsAtVisiblePosition):
        (WebCore::lineBreakExistsAtPosition):
        * editing/htmlediting.h:

2009-04-14  Adam Roben  <aroben@apple.com>

        Remove support for profile-guided optimization on Windows

        Rubber-stamped by Steve Falkenburg.

        * WebCore.vcproj/WebCore.vcproj: Removed the Release_PGO
        configuration.

2009-04-14  Dmitry Titov  <dimich@chromium.org>

        Reviewed by Dimitri Glazkov.

        https://bugs.webkit.org/show_bug.cgi?id=25163
        Upstream fix for releasing v8 objects on worker thread termination in Chromium.

        * bindings/v8/V8DOMMap.cpp:
        (WebCore::domDataList): Now uses Vector instead of HashMap.
        (WebCore::domDataListMutex):
        (WebCore::ThreadSpecificDOMData::ThreadSpecificDOMData):  remove usage of currentThread();
        (WebCore::ThreadSpecificDOMData::~ThreadSpecificDOMData): ditto.
        (WebCore::NonMainThreadSpecificDOMData::~NonMainThreadSpecificDOMData): moved call to removeAllDOMObjectsInCurrentThread() to ~WorkerScriptController.
        (WebCore::handleWeakObjectInOwningThread):
        (WebCore::derefDelayedObjects):
        (WebCore::removeAllDOMObjectsInCurrentThread): not static anymore.
        * bindings/v8/V8DOMMap.h:
        * bindings/v8/WorkerContextExecutionProxy.cpp:
        (WebCore::WorkerContextExecutionProxy::dispose): removed code that avoided dual-dereference of WorkerContext.
        (WebCore::WorkerContextExecutionProxy::initContextIfNeeded): this ref() is countered in removeAllDOMObjectsInCurrentThread(), when the WorkerContext is removed from the v8 map.
        * bindings/v8/WorkerScriptController.cpp:
        (WebCore::WorkerScriptController::~WorkerScriptController):

2009-04-14  Adam Roben  <aroben@apple.com>

        Fix Bug 25183: Split up WebCore.vcproj's settings into vsprops files

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

        WebCore.vcproj now uses a set of .vsprops files to store most of its
        settings.

        Reviewed by Darin Adler.

        * WebCore.vcproj/WebCore.vcproj: Moved settings from here into the new
        .vsprops files.

        * WebCore.vcproj/WebCoreCFNetwork.vsprops: Added. Contains settings
        for ports that build against CFNetwork.
        * WebCore.vcproj/WebCoreCG.vsprops: Added. Contains settings for ports
        that build against CoreGraphics.
        * WebCore.vcproj/WebCoreCURL.vsprops: Added. Contains settings for
        ports that build against libcurl.
        * WebCore.vcproj/WebCoreCairo.vsprops: Added. Contains settings for
        ports that build against Cairo.
        * WebCore.vcproj/WebCoreCommon.vsprops: Added. Contains settings
        shared by all ports.
        * WebCore.vcproj/WebCoreMediaQT.vsprops: Added. Contains settings for
        ports that use QTMovieWin to implement the MediaPlayerPrivate
        interface.
        * WebCore.vcproj/WebCorePthreads.vsprops: Added. Contains settings for
        ports that build against pthreads.

2009-04-14  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin Adler.

        http/tests/xmlhttprequest/basic-auth.html fails on Tiger.

        Turns out that NSURLCredentialPersistenceNone doesn't work on Tiger, so we have to use
        session persistence.

        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::didReceiveAuthenticationChallenge): Route the credential through
        receivedCredential(), ensuring that the Tiger-specific need to use session credentials
        is honored.
        (WebCore::ResourceHandle::receivedCredential): On Tiger, change PersistenceNone to
        PersistenceForSession, because the former doesn't work.

2009-04-14  Adele Peterson  <adele@apple.com>

        Reviewed by Darin Adler.

        Fix for <rdar://problem/6703873> Triple-click quoted line and type Return creates an extra quoted blank line

        Test: editing/inserting/6703873.html

        * editing/BreakBlockquoteCommand.cpp: (WebCore::BreakBlockquoteCommand::doApply):
        If the startNode's original parent is now empty, we can remove it.  Its already been cloned and copied with the startNode,
        so we only need to keep it around if it actually holds some original content, otherwise it will look like an extra empty 
        container in the document.

2009-04-14  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Holger Freyther.

        https://bugs.webkit.org/show_bug.cgi?id=21546
        [GTK] ATK accessibility enhancements

        Add a proper implementation of AtkText::get_text and
        AtkText::get_character_count, which takes into account non
        TextControl text. With this the 'Text' field in Accerciser's
        Interface Viewer is filled correctly.

        * page/gtk/AccessibilityObjectWrapperAtk.cpp:

2009-04-14  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Holger Freyther.

        https://bugs.webkit.org/show_bug.cgi?id=21546
        [GTK] ATK accessibility enhancements

        Remove some dead code and g_return_if_fail from static functions.

        * page/gtk/AccessibilityObjectWrapperAtk.cpp:

2009-04-14  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Holger Freyther.

        https://bugs.webkit.org/show_bug.cgi?id=21546
        [GTK] ATK accessibility enhancements

        Also implement text interface for StaticTextRole, which covers
        most of the text in web pages.

        * page/gtk/AccessibilityObjectWrapperAtk.cpp:

2009-04-14  Alexey Proskuryakov  <ap@webkit.org>

        Another Windows build fix.

        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::WebCoreSynchronousLoader::load):

2009-04-14  Alexey Proskuryakov  <ap@webkit.org>

        Windows build fix.

        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::WebCoreSynchronousLoader::willSendRequest):
        (WebCore::WebCoreSynchronousLoader::didReceiveChallenge):

2009-04-13  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Sam Weinig.

        <rdar://problem/6698851> Implement XMLHttpRequest withCredentials attribute

        * WebCore.xcodeproj/project.pbxproj: Made ThreadableLoader.h private, as enum definitions
        from it are now used in otehr private headers.

        * xml/XMLHttpRequest.h:
        * xml/XMLHttpRequest.idl:
        Added withCredentials attribute. When it is false (default), neither credentials nor cookies
        are sent with cross origin requests, When it is true, those are sent, but the server needs
        to allow handling results via Access-Control-Allow-Credentials header. It was always possible
        to send a cross-site request with credentials via IFRAME or IMG, so this just adds a way to
        read results, as long as the server reports that it's allowed.
        Having the default set to false ensures that requests won't fail unexpectedly because of
        stored credentials and cookies for other resources in the target protection space.

        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::loadRequestSynchronously): Allow stored credentials for same origin
        requests, and for cross origin ones that have withCredentials attribute set. Such code already
        existed for cookies (but it's simpler, because we could just set a ResourceRequest flag).
        (WebCore::XMLHttpRequest::loadRequestAsynchronously): Ditto.

        * platform/network/ResourceHandle.h: Added willSendRequest() - just like for other callbacks,
        is is easier to have code in the class. Also, loadResourceSynchronously() now takes a
        StoredCredentials option, matching async case.

        * platform/network/ResourceHandleClient.h:
        (WebCore::ResourceHandleClient::receivedCredential): Removed. This method could never be
        called, and no client used it.
        (WebCore::ResourceHandleClient::receivedRequestToContinueWithoutCredential): Ditto.

        * platform/network/ResourceHandleInternal.h:
        (WebCore::ResourceHandleInternal::ResourceHandleInternal): Split username and password out
        of request URL. We want to always get a callback for credentials to manage them in WebCore,
        so network back-end shouldn't see them too early.

        * platform/network/ResourceRequestBase.cpp:
        (WebCore::ResourceRequestBase::removeCredentials):
        * platform/network/ResourceRequestBase.h:
        Added a removeCredentials() method that removes login and password parts from request URL.

        * platform/network/mac/ResourceHandleMac.mm:
        (WebCoreCredentialStorage): Added a simple storage class for per-session credentials.
        (WebCore::ResourceHandle::loadResourceSynchronously): Pass allowStoredCredentials through.
        (WebCore::ResourceHandle::willSendRequest): On a redirect, credentials should be replaced.
        (WebCore::ResourceHandle::didReceiveAuthenticationChallenge): Try credentials from the URL
        and per-session credentials. Code was partially moved from Obj-C callback.
        (WebCore::ResourceHandle::receivedCredential): Intercept per-session credentials and store
        them in WebCore storage.
        (-[WebCoreResourceHandleAsDelegate connection:willSendRequest:redirectResponse:]): Don't
        store the redirected URL - we only needed credentials, which are now stored separately.
        (-[WebCoreResourceHandleAsDelegate connection:didReceiveAuthenticationChallenge:]): Removed
        code that was setting credentials from URL. First, the code is now in ResourceHandle, and
        also, it wasn't actually needed in Leopard release before this patch, see <rdar://problem/5298142>.
        (-[WebCoreSynchronousLoader dealloc]): Release credentials. Note that unlike ResourceHandle,
        this class still needs to track URL for checking whether a redirect is allowed. This is
        not a great solution, and we should unify client code to use the same checks in sync and
        async cases.
        (-[WebCoreSynchronousLoader connection:willSendRequest:redirectResponse:]): Just like in
        async case, put credentials aside to ensure that network back-end asks for them.
        (-[WebCoreSynchronousLoader connection:didReceiveAuthenticationChallenge:]): Use credentials
        from URL, or from WebCore storage.
        (-[WebCoreSynchronousLoader connectionShouldUseCredentialStorage:]): Don't use stored
        credentials when not allowed to.
        (+[WebCoreSynchronousLoader loadRequest:allowStoredCredentials:returningResponse:error:]):
        Put credentials aside to ensure that network back-end asks for them.

        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::WebCoreCredentialStorage::set):
        (WebCore::WebCoreCredentialStorage::get):
        (WebCore::willSendRequest):
        (WebCore::ResourceHandle::start):
        (WebCore::ResourceHandle::willSendRequest):
        (WebCore::ResourceHandle::didReceiveAuthenticationChallenge):
        (WebCore::ResourceHandle::receivedCredential):
        (WebCore::ResourceHandle::loadResourceSynchronously):
        (WebCore::WebCoreSynchronousLoader::willSendRequest):
        (WebCore::WebCoreSynchronousLoader::didReceiveChallenge):
        (WebCore::WebCoreSynchronousLoader::shouldUseCredentialStorage):
        (WebCore::WebCoreSynchronousLoader::load):
        Same changes as in Mac case.

        * platform/network/curl/ResourceHandleCurl.cpp:
        (WebCore::ResourceHandle::loadResourceSynchronously):
        * platform/network/qt/ResourceHandleQt.cpp:
        (WebCore::ResourceHandle::loadResourceSynchronously):
        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::ResourceHandle::loadResourceSynchronously):
        Trying not to break the build.

        * dom/XMLTokenizerLibxml2.cpp: (WebCore::openFunc):
        * xml/XSLTProcessor.cpp: (WebCore::docLoaderFunc):
        Unconditionally allow stored credentials for these, as they only support same origin loads.

        * workers/WorkerContext.cpp: (WebCore::WorkerContext::importScripts):
        WorkerContext.importScripts() can be cross-origin, but sending credentials with it is no worse
        than sending them with <script src=...>, so this is also unconditionally allowed.

        * loader/DocumentThreadableLoader.cpp:
        (WebCore::DocumentThreadableLoader::loadResourceSynchronously): Pass through storedCredentials.
        (WebCore::DocumentThreadableLoader::create): Ditto.
        (WebCore::DocumentThreadableLoader::DocumentThreadableLoader): Save storedCredentials and
        sameOrigin flags foruse in callbacks.
        (WebCore::DocumentThreadableLoader::willSendRequest): Assert that loaders aren't all confused.
        (WebCore::DocumentThreadableLoader::didSendData): Ditto.
        (WebCore::DocumentThreadableLoader::didReceiveResponse): Ditto.
        (WebCore::DocumentThreadableLoader::didReceiveData): Ditto.
        (WebCore::DocumentThreadableLoader::didFinishLoading): Ditto.
        (WebCore::DocumentThreadableLoader::didFail): Ditto.
        (WebCore::DocumentThreadableLoader::getShouldUseCredentialStorage): Don't use credential
        storage if that's not allowed by the code that invoked DocumentThreadableLoader.
        (WebCore::DocumentThreadableLoader::didReceiveAuthenticationChallenge): Simulate a failure
        and cancel the request if we are about to ask the user for credentials for a cross-origin
        request, which is forbidden by CORS (and would have been very confusing if allowed).
        (WebCore::DocumentThreadableLoader::receivedCancellation): Assert that loaders aren't all confused.

        * loader/DocumentThreadableLoader.h: Updated for the new flags (storedCredentials and
        sameOrigin) that affect the loader. Eventually, we need to move all CORS logic from XHR here.

        * loader/ThreadableLoader.h: (StoredCredentials): Added another flag that affects loader
        behavior. We should combine all of these into a structure, and use it for sync requests, too.

        * loader/FrameLoader.cpp: (WebCore::FrameLoader::loadResourceSynchronously):
        * loader/FrameLoader.h:
        * loader/ThreadableLoader.cpp:
        (WebCore::ThreadableLoader::create):
        (WebCore::ThreadableLoader::loadResourceSynchronously):
        * loader/WorkerThreadableLoader.cpp:
        (WebCore::WorkerThreadableLoader::WorkerThreadableLoader):
        (WebCore::WorkerThreadableLoader::loadResourceSynchronously):
        (WebCore::WorkerThreadableLoader::MainThreadBridge::MainThreadBridge):
        (WebCore::WorkerThreadableLoader::MainThreadBridge::mainThreadCreateLoader):
        * loader/WorkerThreadableLoader.h:
        (WebCore::WorkerThreadableLoader::create):
        Pass through storedCredentials.

2009-04-13  David Hyatt  <hyatt@apple.com>

        Reviewed by Cameron Zwarich.

        Remove an outdated comment in ScrollView.h

        * platform/ScrollView.h:

2009-04-13  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Mark Rowe.

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

        QTTrack's -media method always return NULL in 64-bit QTKit, so
        MediaPlayerPrivate::disableUnsupportedTracks should use 
        QTTrackMediaTypeAttribute to get a track's type.

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

2009-04-13  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Cameron Zwarich.

        More fix for https://bugs.webkit.org/show_bug.cgi?id=21260
        Unbounded memory growth when churning elements with anonymous event handler functions

        Stop using protected event listeners on the window object.

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::mark): Mark our event listeners, since they're
        no longer protected.

        (WebCore::JSDOMWindow::addEventListener):
        (WebCore::JSDOMWindow::removeEventListener): Create unprotected event
        listeners, since we mark them now.

        * bindings/js/JSEventListener.h: Made some functions public so
        DOMWindow could call them.

        * bindings/js/JSNodeCustom.cpp: Moved markEventListeners to a header,
        so it could be shared.

        * bindings/scripts/CodeGeneratorJS.pm: Generate event listener marking
        and invalidating code for the DOMWindow.

        * dom/RegisteredEventListener.h:
        (WebCore::markEventListeners):
        (WebCore::invalidateEventListeners): Added helper functions.

        * page/DOMWindow.idl: Make the window's event listener attributes not
        protected.

2009-04-13  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Mark Rowe.
        
        https://bugs.webkit.org/show_bug.cgi?id=25155

        OS X standalone media documents should not switch from <video> to <embed> when 
        QTKit load state is QTMovieLoadStateLoading as that happens frequently when a loading
        with a slow network connection or when a movie is not saved fast-start.

        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivate::updateStates): Don't open movie with plug-in when QTKit's
        loadstate is QTMovieLoadStateLoading, wait until it drops below QTMovieLoadStateError.

2009-04-13  Dmitry Titov  <dimich@chromium.org>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=24453
        REGRESSION: If setTimeout is called on a iframe's window, the DOM changes to
        the main document that timer callback makes are not flushed.

        * bindings/js/ScheduledAction.cpp:
        (WebCore::ScheduledAction::execute):
        Use Document::updateStyleForAllDocuments() instead of document->updateStyleIfNeeded()
        since timers may affect documents other then their own.

2009-04-13  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by David Hyatt.

        Check document for nullity to avoid crashing on GTK+, when
        creating the WebView.

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

2009-04-13  Ada Chan  <adachan@apple.com>

        Forgot to capitalize the "US".

        * platform/text/win/TextBreakIteratorInternalICUWin.cpp:
        (WebCore::currentTextBreakLocaleID):

2009-04-13  Ada Chan  <adachan@apple.com>

        <rdar://problem/6564956> URL field double-click selects entire domain, rather than single word or entire URL
        Revert back to the old word breaking behavior by using en_US_POSIX locale.        

        Reviewed by Steve Falkenburg.

        * platform/text/win/TextBreakIteratorInternalICUWin.cpp:
        (WebCore::currentTextBreakLocaleID):

2009-04-13  Darin Adler  <darin@apple.com>

        Reviewed by Dan Bernstein.

        * platform/cf/BinaryPropertyList.cpp: Added comment.
        * platform/cf/BinaryPropertyList.h: Fixed mistakes in comments.

2009-04-13  Darin Adler  <darin@apple.com>

        Reviewed by Dan Bernstein.

        Bug 25158: hit testing doesn't work right in some cases involving anonymous blocks
        https://bugs.webkit.org/show_bug.cgi?id=25158
        rdar://problem/6769693

        Test: editing/selection/click-after-nested-block.html

        * rendering/RenderBlock.cpp:
        (WebCore::isChildHitTestCandidate): Added. Helper so the two loops in positionForPoint
        can share code.
        (WebCore::RenderBlock::positionForPoint): Removed unneeded special case for first
        child box. Changed special case for last child box to propertly handle the various
        types of child box that are not hit test candidates (the same ones already handled
        by the hit test loop below), adding in a loop so we find the last candidate.

2009-04-13  David Hyatt  <hyatt@apple.com>

        Reviewed by Sam Weinig.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=25125.  Rework scrolling so that a layout happens first when
        it's already needed so that the code doesn't end up making bad decisions based off invalid document sizes.

        * WebCore.base.exp:
        * page/FrameView.h:
        (WebCore::FrameView::visibleContentsResized):
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::ScrollView):
        (WebCore::ScrollView::updateScrollbars):
        * platform/ScrollView.h:

2009-04-13  Adam Roben  <aroben@apple.com>

        Add SharedBuffer::wrapCFData

        This is the CF-equivalent of wrapNSData.

        Reviewed by Brady Eidson.

        * platform/SharedBuffer.h:
        * platform/cf/SharedBufferCF.cpp:
        (WebCore::SharedBuffer::wrapCFData):

2009-04-13  Dan Bernstein  <mitz@apple.com>

        - build fix

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

2009-04-13  Antti Koivisto  <antti@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/6740294> Increase the connection count per host
        
        Try to use six connections per host if possible.

        * WebCore.base.exp:
        * loader/loader.cpp:
        (WebCore::Loader::Loader):
        * platform/mac/WebCoreSystemInterface.h:
        * platform/mac/WebCoreSystemInterface.mm:
        * platform/network/ResourceRequestBase.cpp:
        (WebCore::initMaximumHTTPConnectionCountPerHost):
        * platform/network/ResourceRequestBase.h:
        * platform/network/mac/ResourceRequestMac.mm:
        (WebCore::initMaximumHTTPConnectionCountPerHost):

2009-04-13  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by Adele Peterson.

        https://bugs.webkit.org/show_bug.cgi?id=25153
        Can't place the caret into text field that scrolls the window on focus
        
        We refetch the target node in the shadow node case, and when we do so the window coordinate for the mouse event may
        be invalid because of scrolling that the focus handler did.  Cache the document point (that we derived from the window
        coordinate) and use that any time we refetch.

        * page/EventHandler.cpp:
        (WebCore::documentPointForWindowPoint):
        (WebCore::EventHandler::handleMousePressEvent):
        (WebCore::EventHandler::prepareMouseEvent):

2009-04-13  Sam Weinig  <sam@webkit.org>

        Reviewed by Geoffrey Garen.

        Rename JavaScriptCanOpenWindowsAutomatically to javaScriptCanOpenWindowsAutomatically
        to conform to our style guidelines.

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::allowPopUp):
        * page/Settings.h:
        (WebCore::Settings::javaScriptCanOpenWindowsAutomatically):

2009-04-13  Geoffrey Garen  <ggaren@apple.com>

        Mac build fix: Made another header private.

        * WebCore.xcodeproj/project.pbxproj:

2009-04-13  Jian Li  <jianli@chromium.org>

        Reviewed by Darin Fisher.

        https://bugs.webkit.org/show_bug.cgi?id=25121
        Upstream changes to handle error messages from V8 when running worker script.

        * bindings/v8/WorkerContextExecutionProxy.cpp:
        (WebCore::reportFatalErrorInV8):
        (WebCore::handleConsoleMessage):
        (WebCore::WorkerContextExecutionProxy::WorkerContextExecutionProxy):
        (WebCore::WorkerContextExecutionProxy::dispose):
        (WebCore::WorkerContextExecutionProxy::initV8IfNeeded):
        (WebCore::WorkerContextExecutionProxy::initContextIfNeeded):
        (WebCore::WorkerContextExecutionProxy::evaluate):
        * bindings/v8/WorkerContextExecutionProxy.h:

2009-04-13  Geoffrey Garen  <ggaren@apple.com>

        Build fix: Made setInlineEventListenerForType not inline, since Document
        calls it now. Made RegisteredEventListener.h a private header on Mac,
        so WebKit can use it.

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::setInlineEventListenerForType):

2009-04-13  Dan Bernstein  <mitz@apple.com>

        Reviewed by Sam Weinig.

        - fix <rdar://problem/6404439> REGRESSION: Overlapping text and other
          layout issues in View Sample feature of MYOB FIrstEdge v3

        * page/Navigator.cpp:
        (WebCore::shouldHideFourDot): Added "tdqm_loader.js" to the list of
        JavaScript files this quirk applies to.

2009-04-13  Sam Weinig  <sam@webkit.org>

        Reviewed by Oliver Hunt.

        Move open and showModalDialog functions out of JSDOMWindowBase
        and into JSDOMWindow by partially generating them.

        This slightly changes the behavior of getting window.showModalDialog
        when the embedding app does not support it to return undefined regardless
        of shadowing.  This should not be an issue in a practice, but will be addressed
        when we add a generic way to handle runtime specialization of property
        access.

        * DerivedSources.make: Remove JSDOMWindowBase.lut.h
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::):
        (WebCore::JSDOMWindowBase::getOwnPropertySlot): Move canShowModalDialog check from
        here to JSDOMWindow::customGetOwnPropertySlot.
        (WebCore::JSDOMWindowBase::put): Remove dead code.
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::createWindow):
        (WebCore::JSDOMWindow::open):
        (WebCore::JSDOMWindow::showModalDialog):
        * bindings/js/JSDOMWindowCustom.h:
        (WebCore::JSDOMWindow::customGetOwnPropertySlot):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::parseModalDialogFeatures): Move from JSDOMWindowBase.
        (WebCore::DOMWindow::allowPopUp): Ditto.
        (WebCore::DOMWindow::canShowModalDialog): Ditto.
        (WebCore::DOMWindow::canShowModalDialogNow): Ditto.
        * page/DOMWindow.h:
        * page/DOMWindow.idl:

2009-04-13  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig.

        Moved storage for window event listeners into the window object.

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::addEventListener):
        (WebCore::JSDOMWindow::removeEventListener): Add / remove window event
        listeners to / from the window object.

        * dom/Document.cpp:
        (WebCore::Document::removeAllEventListeners):
        (WebCore::Document::clear):
        (WebCore::Document::setWindowInlineEventListenerForTypeAndAttribute): Moved
        a bunch of code to the DOMWindow class, and left behind a few calls through
        to DOMWindow, to support legacy clients. (Eventually, these will go away, too.)

        * dom/Document.h: ditto.

        * dom/Node.cpp:
        (WebCore::Node::dispatchGenericEvent):
        (WebCore::Node::dispatchWindowEvent): Dipatch window events on the window
        object, not the document.

        * dom/Node.h:
        * dom/RegisteredEventListener.h: Moved RegisteredEventListenerVector
        declaration, since it's required in more places now.

        * history/CachedFrame.cpp:
        (WebCore::CachedFrame::clear): Updated for rename. Also, remove event
        listeners before detaching and clearing the document's window pointer,
        since the the document needs its window pointer in order to tell the window
        to clear its event listeners.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::stopLoading):
        (WebCore::FrameLoader::canCachePageContainingThisFrame):
        (WebCore::FrameLoader::logCanCacheFrameDecision): Updated for rename, and
        movement of window event listeners into the window.

        * loader/ImageDocument.cpp:
        (WebCore::ImageDocument::createDocumentStructure): Updated for movement
        of window event listeners into the window.

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::handleEvent):
        (WebCore::DOMWindow::addEventListener):
        (WebCore::DOMWindow::removeEventListener):
        (WebCore::DOMWindow::removeAllEventListeners):
        (WebCore::DOMWindow::hasEventListener):
        (WebCore::DOMWindow::setInlineEventListenerForType):
        (WebCore::DOMWindow::removeInlineEventListenerForType):
        (WebCore::DOMWindow::inlineEventListenerForType):
        (WebCore::DOMWindow::addPendingFrameUnloadEventCount):
        (WebCore::DOMWindow::removePendingFrameUnloadEventCount):
        (WebCore::DOMWindow::addPendingFrameBeforeUnloadEventCount):
        (WebCore::DOMWindow::removePendingFrameBeforeUnloadEventCount):
        * page/DOMWindow.h: Moved a bunch of code to the DOMWindow class, from the Document.

        * page/Frame.cpp:
        (WebCore::Frame::shouldClose): Updated for movement of window event listeners into the window.

2009-04-13  Greg Bolsinga  <bolsinga@apple.com>

        Reviewed by Sam Weinig.

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

        The Geolocation timer needs to start after the UA has granted permission.

        * bindings/js/JSGeolocationCustom.cpp: Use PassRefPtr<PositionOptions>
        (WebCore::JSGeolocation::getCurrentPosition):
        (WebCore::JSGeolocation::watchPosition):
        * page/Geolocation.cpp: Add a RefPtr<PositionOptions> so it can be used
        later when the timer is started. Change PositionOptions* to PassRefPtr<PositionOptions>
        where needed.
        (WebCore::Geolocation::GeoNotifier::GeoNotifier):
        (WebCore::Geolocation::GeoNotifier::startTimer):
        (WebCore::Geolocation::getCurrentPosition):
        (WebCore::Geolocation::watchPosition):
        (WebCore::Geolocation::setIsAllowed): Start the timer is the UA allows
        (WebCore::Geolocation::startTimer):
        (WebCore::Geolocation::startTimersForOneShots):
        (WebCore::Geolocation::startTimersForWatchers):
        (WebCore::Geolocation::startTimers):
        * page/Geolocation.h:
        (WebCore::Geolocation::GeoNotifier::create):

2009-04-13  Pamela Greene  <pam@chromium.org>

        Reviewed by Darin Fisher.

        Fix Chromium (V8) build by renaming methods to match changes
        in http://trac.webkit.org/changeset/42377.

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

        * bindings/v8/ScheduledAction.cpp:
     (WebCore::ScheduledAction::execute): updateRendering() -> updateStyleIfNeeded()
        * bindings/v8/V8AbstractEventListener.cpp:
        (WebCore::V8AbstractEventListener::handleEvent): updateDocumentsRendering() -> updateStyleForAllDocuments()

2009-04-13  Darin Fisher  <darin@chromium.org>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=25136
        CRASH in DocumentLoader::removeSubresourceLoader due to null m_frame

        Test: fast/frames/frame-unload-crash.html

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::updateLoading): Added null check of m_frame.

2009-04-13  Sam Weinig  <sam@webkit.org>

        Reviewed by Tim Hatcher.

        Put the MessagePort constructor back in ENABLE_CHANNEL_MESSAGING.

        * page/DOMWindow.idl:

2009-04-13  Greg Bolsinga  <bolsinga@apple.com>

        Fix GTK build break.

        * platform/gtk/GeolocationServiceGtk.cpp:
        (WebCore::GeolocationServiceGtk::updatePosition):

2009-04-13  David Hyatt  <hyatt@apple.com>

        Reviewed by Darin Adler and Dan Bernstein.

        Assertion in updateStyleForAllDocuments.  Make sure to unscheduleStyleRecalc when an object goes into
        the page cache.  Disallow scheduling of style recalcs on a document that is already in the page cache.
        Schedule a style recalc if needed when an object comes out of the page cache.

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

2009-04-13  Timothy Hatcher  <timothy@apple.com>

        Correctly sort (program) scripts in the Scripts panel popup menu.

        Reviewed by Ada Chan.

        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype._addScriptToFilesMenu): Refactor the code
        and sort "(program)" options by the sourceID to maintain some order.
        * inspector/front-end/utilities.js:
        (indexOfObjectInListSortedByFunction): Fix a bug where identical objects would cause
        an incorrect return value that confuses insertionIndexForObjectInListSortedByFunction.
        Just set 'first' and break so the correct result will be returned.

2009-04-13  Greg Bolsinga  <bolsinga@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=24770
        
        Add custom code for Coordinates that returns null when required by the
        Geolocation spec.
        
        http://dev.w3.org/geo/api/spec-source.html#coordinates

        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSCoordinatesCustom.cpp: Added.
        (WebCore::JSCoordinates::altitude): returns null if the value cannot be provided.
        (WebCore::JSCoordinates::altitudeAccuracy): Ditto
        (WebCore::JSCoordinates::heading): Ditto
        (WebCore::JSCoordinates::speed): Ditto
        * page/Coordinates.h:
        (WebCore::Coordinates::create): Add 'canProvide' parameters and values
        (WebCore::Coordinates::canProvideAltitude):
        (WebCore::Coordinates::canProvideAltitudeAccuracy):
        (WebCore::Coordinates::canProvideHeading):
        (WebCore::Coordinates::canProvideSpeed):
        (WebCore::Coordinates::Coordinates):
        * page/Coordinates.idl: specify custom getters
        * platform/mac/GeolocationServiceMac.mm: Set the values correctly if they cannot be provided.
        (-[WebCoreCoreLocationObserver locationManager:didUpdateToLocation:fromLocation:]):

2009-04-13  Adele Peterson  <adele@apple.com>

        Reviewed by Darin Adler.

        Fix for <rdar://problem/5510537> Typing return at start of block quote yields empty quoted line

        Test: editing/inserting/5510537.html

        * editing/BreakBlockquoteCommand.cpp: (WebCore::BreakBlockquoteCommand::doApply): If the break insertion position
        is at the beginning of the topmost quote, then just insert the <br> before the blockquote.  Otherwise, if the break
        insertion position is at the beginning of any quote, adjust the position so the break comes before the current quote level
        so we don't end up with an empty line in that quote in addition to the new line we're adding with the <br>.

2009-04-11  Darin Adler  <darin@apple.com>

        Reviewed by Dan Bernstein.

        Fix problem when encoding history files with duplicate integer arrays near the end of the file.
        This results in an assertion failure, and if assertions are turned off, corrupted output.

        When writing an integer array it's important not to add an object reference to the
        aggregate buffer. The writing of the array does not depend on the aggregate buffer. But,
        more importantly, it's possible this instance integer array is a duplicate and won't be
        written out. If so, there's no guarantee there's enough space in the aggregate buffer to
        store the object references (the references will be ignored). In some cases the aggregate
        buffer can then overrun the data being written; normally this is prevented by the fact that
        the data being written will include a copy of the aggregate buffer.

        Also removed a bit of unneeded dead code to handle the integer -1.

        * platform/cf/BinaryPropertyList.cpp:
        (WebCore::BinaryPropertyListPlan::BinaryPropertyListPlan): Removed unneeded
        m_integerNegativeOneObjectReference, since property lists support only non-negative integers.
        (WebCore::BinaryPropertyListPlan::writeInteger): Removed support for
        m_integerNegativeOneObjectReference.
        (WebCore::BinaryPropertyListPlan::integerObjectReference): Ditto.
        (WebCore::BinaryPropertyListSerializer::writeIntegerWithoutAddingAggregateObjectReference):
        Added. Factored out most of writeInteger, for use in writeIntegerArray, without calling
        addAggregateObjectReference.
        (WebCore::BinaryPropertyListSerializer::writeInteger): Changed to call the new
        writeIntegerWithoutAddingAggregateObjectReference function.
        (WebCore::BinaryPropertyListSerializer::writeIntegerArray): Call the new
        writeIntegerWithoutAddingAggregateObjectReference function and therefore remove the
        code to save and restore m_currentAggregateBufferByte, which is no longer needed.

2009-04-13  Holger Hans Peter Freyther  <zecke@selfish.org>

        Unreviewed Qt build fix.

        * platform/graphics/qt/FontQt.cpp:
        (WebCore::Font::floatWidthForComplexText):

2009-04-12  Sam Weinig  <sam@webkit.org>

        Reviewed by Mark Rowe.

        Move the event and crypto attributes and the captureEvents and releaseEvents
        functions out of JSDOMWindowBase by partially generating them.

        * bindings/js/JSDOMGlobalObject.cpp:
        (WebCore::JSDOMGlobalObject::currentEvent): Make const.
        * bindings/js/JSDOMGlobalObject.h:
        * bindings/js/JSDOMWindowBase.cpp:
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::crypto): Not implemented.
        (WebCore::JSDOMWindow::event):
        (WebCore::JSDOMWindow::captureEvents): Not implemented.
        (WebCore::JSDOMWindow::releaseEvents): Ditto.
        * page/DOMWindow.idl:

2009-04-12  Sam Weinig  <sam@webkit.org>

        Reviewed by Mark Rowe.

        Move more attributes out of JSDOMWindowBase by
        partially generating them.

        - Expose the MessagePort constructor.

        * bindings/js/JSDOMGlobalObject.h:
        (WebCore::getDOMConstructor):
        * bindings/js/JSDOMWindowBase.cpp:
        (setJSDOMWindowBaseEvent):
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::image):
        (WebCore::JSDOMWindow::option):
        (WebCore::JSDOMWindow::audio):
        (WebCore::JSDOMWindow::webKitPoint):
        (WebCore::JSDOMWindow::webKitCSSMatrix):
        (WebCore::JSDOMWindow::xMLHttpRequest):
        (WebCore::JSDOMWindow::xSLTProcessor):
        (WebCore::JSDOMWindow::messageChannel):
        (WebCore::JSDOMWindow::worker):
        * page/DOMWindow.idl:

2009-04-12  Timothy Hatcher  <timothy@apple.com>

        A resource's filename is not correct after a redirect in the Inspector.

        Reviewed by Dan Bernstein.

        * inspector/InspectorResource.cpp:
        (WebCore::InspectorResource::updateScriptObject): Fix a typo in the
        lastPathComponent property name.

2009-04-12  Adele Peterson  <adele@apple.com>

        Reviewed by Darin Adler.

        Test: editing/inserting/6609479-1.html

        Follow-up to <rdar://problem/6609479>.

        Before my last change, a Mail blockquote would've been broken up earlier, and you would've been guaranteed that the inserted content
        was at the start of a paragraph.  Now we need to check for that explicitly, and only merge the start of the inserted content if it is 
        at the start of a paragraph.

        * editing/ReplaceSelectionCommand.cpp: (WebCore::ReplaceSelectionCommand::shouldMergeStart):

2009-04-11  Adele Peterson  <adele@apple.com>

        Reviewed by Dan Bernstein.

        Fix for <rdar://problem/6609479> Pressing return inside a table cell that's inside quoted content will split the table

        Test: editing/inserting/6609479.html

        Don't break a blockquote if pasting or inserting into a table.

        * editing/ReplaceSelectionCommand.cpp: (WebCore::ReplaceSelectionCommand::doApply):
        * editing/TypingCommand.cpp: (WebCore::TypingCommand::insertParagraphSeparatorInQuotedContent):

2009-04-11  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        - fix <rdar://problem/6643103> Unscaled values from body.scrollHeight

        Test: fast/css/zoom-body-scroll.html

        Adjust scroll{Left,Top,Width,Height} values for zoom in getters and
        setters.

        * html/HTMLBodyElement.cpp:
        (WebCore::adjustForZoom):
        (WebCore::HTMLBodyElement::scrollLeft):
        (WebCore::HTMLBodyElement::setScrollLeft):
        (WebCore::HTMLBodyElement::scrollTop):
        (WebCore::HTMLBodyElement::setScrollTop):
        (WebCore::HTMLBodyElement::scrollHeight):
        (WebCore::HTMLBodyElement::scrollWidth):

2009-04-10  Timothy Hatcher  <timothy@apple.com>

        Allow page navigation and reload while stopped at a breakpoint.

        <rdar://problem/6781108> Having a breakpoint active prevents page reload

        Reviewed by Darin Adler.

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::didContinue): Call the resumedScript function.
        * inspector/InspectorController.h: Added didContinue.
        * inspector/JavaScriptDebugListener.h: Ditto.
        * inspector/JavaScriptDebugServer.cpp:
        (WebCore::JavaScriptDebugServer::pauseIfNeeded): Call didContinue on the listeners.
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype.debuggerResumed): Update the interface and state.
        * inspector/front-end/inspector.js:
        (WebInspector.resumedScript): Call ScriptsPanel.debuggerResumed.
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::continueLoadAfterNavigationPolicy): Call resumeDebugger.

2009-04-10  Sam Weinig  <sam@webkit.org>

        Reviewed by Adele Peterson.

        Remove unused include for JSLock.

        * page/mac/FrameMac.mm:

2009-04-10  Sam Weinig  <sam@webkit.org>

        Reviewed by Darin Adler.

        Add back the keepAlive timer for after the script execution to
        protect the callers of evaluate, as was part of the original intent
        of timer.

        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::evaluate):
        * page/mac/FrameMac.mm:

2009-04-10  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Simon Fraser.

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

        If we reload, the animation controller sticks around and has
        a stale animation time. So the needed delay is computed wrong.
        I added a reset of the animation timer on load.

        I did not do a test case because this only happens on reload so I
        couldn't make an automated test. I tried using an iframe and using
        reload() but that doesn't tickle the bug.

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

2009-04-10  Grace Kloba  <klobag@gmail.com>

        Reviewed by Darin Adler.

        Move WORKERS header files inside ENABLE(WORKERS).
        So if WORKERS is not enabled and the generated files are not generated, the build is still working.

        * bindings/js/JSDOMGlobalObject.cpp:
        * bindings/js/JSMessageChannelConstructor.cpp:
        * bindings/js/ScheduledAction.cpp:

2009-04-10  Darin Adler  <darin@apple.com>

        Reviewed by Brady Eidson.

        <rdar://problem/6773515> crash in push_heap inside WebCore when printing

        The crash was due to manipulating a timer on a different thread than the one it was created on.
        This adds some diagnostics so we'll catch that kind of mistake immediately.

        * platform/Timer.cpp:
        (WebCore::TimerBase::TimerBase): Store the thread identifier in debug versions.
        (WebCore::TimerBase::start): Assert it's the same thread the timer was created on.
        (WebCore::TimerBase::stop): Ditto.
        (WebCore::TimerBase::isActive): Ditto.
        (WebCore::TimerBase::setNextFireTime): Ditto.

        * platform/Timer.h: Added the thread identifier data member.

2009-04-10  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Dan Bernstein

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

        If you remove a class with a transition while that transition is running
        the animation timer will continue to fire after the transition is finished.
        This has no visual indication, but it does drain the processor. And in some
        cases it might even cause a glitch in future animations. Unfortunately there
        is no way to test this without putting in printfs.

        This happens because the animation logic is never traversed after a transition
        is removed, so we never get a chance to cleanup. So I added cleanup in the logic
        that fires the dispatch of the last style change when the animation finishes.

        Test: transitions/remove-transition-style.html

        * page/animation/AnimationController.cpp:
        (WebCore::AnimationControllerPrivate::updateStyleIfNeededDispatcherFired):
        * page/animation/CompositeAnimation.cpp:
        (WebCore::CompositeAnimation::updateTransitions):
        (WebCore::CompositeAnimation::animate):
        (WebCore::CompositeAnimation::cleanupFinishedAnimations):
        * page/animation/CompositeAnimation.h:

2009-04-10  Sam Weinig  <sam@webkit.org>

        Reviewed by Geoffrey Garen.

        Fix for <rdar://problem/6648858>
        CrashTracer: [REGRESSION(Safari 4)] 60 crashes in Safari at com.apple.WebCore • WebCore::ScriptController::evaluate + 241

        The Frame (and therefore ScriptController) were being destroyed
        during JavaScript execution causing the JSDOMWindowShell to become
        null.

        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::evaluate): Use a RefPtr to protect the Frame
        instead of the keep-alive timer, since a nested event loop used from with-in 
        JavaScript execution could cause the timer to fire before returning.

2009-04-10  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Timothy Hatcher.

        https://bugs.webkit.org/show_bug.cgi?id=25133
        Fix an error in InspectorController's bindings, clean up a few header
        includes, make empty object construction in ScriptObject less ambiguous.

        * bindings/js/JSInspectorControllerCustom.cpp:
        (WebCore::JSInspectorController::setSetting): Send correct argument from
            the bindings.
        * bindings/js/ScriptObject.cpp:
        (WebCore::ScriptObject::createNew): Added.
        * bindings/js/ScriptObject.h: Removed constructor, added decl for createNew.
        * inspector/ConsoleMessage.cpp: Remove unused header.
        * inspector/ConsoleMessage.h: Ditto.
        * inspector/InspectorResource.cpp:
        (WebCore::createHeadersObject): Changed to use ScriptObject::createNew.

2009-04-10  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Simon Fraser.

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

        This both fixes a bug where I was not sending in the right time
        to continue the animation and was not recomputing current time
        when coming out of suspend.

        * page/animation/AnimationBase.cpp:
        (WebCore::AnimationBase::updateStateMachine):
        * page/animation/AnimationController.cpp:
        (WebCore::AnimationControllerPrivate::suspendAnimations):
        (WebCore::AnimationControllerPrivate::resumeAnimations):

2009-04-10  Adam Roben  <aroben@apple.com>

        Give Windows's <select> popup menus drop shadows

        Rubber-stamped by Steve Falkenburg.

        No test possible.

        * platform/win/PopupMenuWin.cpp:
        (WebCore::registerPopup): Use the CS_DROPSHADOW window class style.

2009-04-10  Timothy Hatcher  <timothy@apple.com>

        Fix a bug in the Web Inspector where it would show scripts
        from previous pages when toggling the debugger off and back on.

        https://bugs.webkit.org/show_bug.cgi?id=25095
        rdar://problem/6769970

        Reviewed by John Sullivan.

        * bindings/js/ScriptCachedFrameData.cpp:
        (WebCore::ScriptCachedFrameData::ScriptCachedFrameData): Null out the
        debugger for the scriptController. This balances the attachDebugger
        that was already in ScriptCachedFrameData::restore.
        (WebCore::ScriptCachedFrameData::restore): Clean up an if statement.
        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::clearWindowShell): Clear the debugger from
        the current window before setting the new window.
        * inspector/JavaScriptDebugServer.cpp:
        (WebCore::JavaScriptDebugServer::recompileAllJSFunctions): Only accumulate
        source providers for code associated this as the debugger.

2009-04-10  Pierre d'Herbemont  <pdherbemont@apple.com>

        Reviewed by Adele Peterson.

        <rdar://problem/6646998> Avoid starting QTKitServer if possible
        When possible avoid asking QTKit for the MIME types that require QTKitServer
        when running 64-bit.

        * WebCore.base.exp: Added new entry point.

        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::addFileTypesToCache): Add an NSArray of types to the cache.
        (WebCore::mimeCommonTypesCache): Add all "common" QTKit types to the cache.
        (WebCore::mimeModernTypesCache): Add only "modern" QTKit types to the cache (this list does 
        not start QTKitServer if it is not already running).
        (WebCore::MediaPlayerPrivate::getSupportedTypes): Refactored.
        (WebCore::MediaPlayerPrivate::supportsType): Look in list of "modern" types first to avoid
        starting QTKitServer if possible.

        * platform/mac/WebCoreSystemInterface.h: Add wkQTIncludeOnlyModernMediaFileTypes.
        * platform/mac/WebCoreSystemInterface.mm: Ditto.

2009-04-10  Adam Roben  <aroben@apple.com>

        Turn on window animations for <select> popup menus

        We turned these off back when <select> popup menus were partially
        transparent. Now that they're opaque, there's no reason not to
        animate them.

        Reviewed by Steve Falkenburg.

        No test possible.

        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenu::show): Remove the #ifdef that was disabling the
        window animation.

2009-04-10  Dan Bernstein  <mitz@apple.com>

        Reviewed by Sam Weinig.

        - fix a regression from r42379 which made zero-width characters affect
          line height

        Test: fixes fast/text/wide-zero-width-space.html

        * platform/graphics/mac/FontMacATSUI.mm:
        (WebCore::overrideLayoutOperation): Add to the fallback font list set
        here, and only if the glyph is not zero-width...
        (WebCore::ATSULayoutParameters::initialize): ...instead of doing it
        here. This matches WidthIterator's behavior.

2009-04-10  Darin Fisher  <darin@chromium.org>

        Fixing build bustage caused by warnings being treated as errors.
        1- A local variable was only be used inside a debug assertion, which
           caused grief for the release build.
        2- Missing initializer for member 'DocumentMarker::activeMatch'

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

2009-04-10  Finnur Thorarinsson  <finnur.webkit@gmail.com>

        Reviewed by John Sullivan.

        Fixing: https://bugs.webkit.org/show_bug.cgi?id=25117
        (TextMatches don't have a concept of active match)

        For the ports that use the DocumentMarker as highlighting for FindInPage it is
        useful to have a flag that specifies which marker is active, so it can be drawn
        in a different color.

        This allows me to remove the hack to use the SelectionController to highlight
        the active match (in the ChromiumWin port).

        * dom/Document.cpp:
        (WebCore::Document::setMarkersActive):
        * dom/Document.h:
        * dom/DocumentMarker.h:
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paintTextMatchMarker):
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::platformActiveTextSearchHighlightColor):
        (WebCore::RenderTheme::platformInactiveTextSearchHighlightColor):
        * rendering/RenderTheme.h:
        * rendering/RenderThemeChromiumWin.cpp:
        (WebCore::RenderThemeChromiumWin::platformActiveSelectionBackgroundColor):
        (WebCore::RenderThemeChromiumWin::platformInactiveSelectionBackgroundColor):
        (WebCore::RenderThemeChromiumWin::platformActiveTextSearchHighlightColor):
        (WebCore::RenderThemeChromiumWin::platformInactiveTextSearchHighlightColor):
        * rendering/RenderThemeChromiumWin.h:

2009-04-10  Pamela Greene  <pam@chromium.org>

        Reviewed by Dimitri Glazkov.

        Build fix for Chromium.
        https://bugs.webkit.org/show_bug.cgi?id=12440

        * page/chromium/FrameChromium.cpp:
        (WebCore::computePageRectsForFrame): change docWidth() to overflowWidth()

2009-04-09  David Hyatt  <hyatt@apple.com>

        Reviewed by Oliver Hunt

        Add a timer for style recalc (similar to the one used for scheduling layouts).  For now in order
        to reduce the risk of regressions, I have left in all the synchronous machinery for updating style
        following DOM events and JavaScript timeouts.  Eventually these calls will be removed.

        Where the timer will really kick in and be useful is for clients that do style changes from
        Objective-C DOM bindings or that execute JavaScript to manipulate style from the JavaScriptCore C API.

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::insertBefore):
        (WebCore::ContainerNode::replaceChild):
        (WebCore::ContainerNode::removeChild):
        (WebCore::ContainerNode::appendChild):
        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::Document::~Document):
        (WebCore::Document::scheduleStyleRecalc):
        (WebCore::Document::unscheduleStyleRecalc):
        (WebCore::Document::styleRecalcTimerFired):
        (WebCore::Document::updateStyleForAllDocuments):
        (WebCore::Document::detach):
        * dom/Document.h:
        * dom/Node.cpp:
        (WebCore::Node::setNeedsStyleRecalc):
        (WebCore::Node::lazyAttach):

2009-04-09  Oliver Hunt  <oliver@apple.com>

        Reviewed by Gavin Barraclough.

        <rdar://problem/6586787> JS debugger does not work in 64-bit

        Don't truncate the source id in JSCallFrame

        * inspector/JavaScriptCallFrame.h:

2009-04-09  Adam Roben  <aroben@apple.com>

        Start compiling HistoryPropertyList on Windows

        Reviewed by Darin Adler.

        * WebCore.vcproj/WebCore.vcproj: Added HistoryPropertyList and its
        dependencies to the project. Copy headers from history/cf to
        $WebKitOutputDir.
        * history/cf/HistoryPropertyList.cpp: Added StringExtras.h so that
        this file will compile on Windows.

2009-04-09  Dan Bernstein  <mitz@apple.com>

        Reviewed by Dave Hyatt.

        - fix <rdar://problem/6166612> Text boxes' metrics should be based on
          the actual fonts used in them, not just the primary font

        Covered by many existing layout tests

        * platform/graphics/Font.cpp:
        (WebCore::Font::floatWidth): Added a fallbackFonts parameter. If the
        platform supports collecting fallback fonts in its complex font path
        and fallbackFonts is not null, all fallback fonts used for the text run
        will be added to it.

        * platform/graphics/Font.h:
        (WebCore::Font::width): Ditto.

        * platform/graphics/FontFastPath.cpp:
        (WebCore::Font::glyphDataForCharacter): Removed an unnecessary namespace
        qualifier.
        (WebCore::Font::floatWidthForSimpleText): Added a fallbackFonts
        parameter, which is passed down to WidthIterator.

        * platform/graphics/WidthIterator.cpp:
        (WebCore::WidthIterator::WidthIterator): Added a fallbackFonts parameter
        and used it to initialize the m_fallbackFonts member.
        (WebCore::WidthIterator::advance): Track the fonts being used and add
        any fallback fonts to the m_fallbackFonts set. Make sure to only add
        non-small-caps fonts.

        * platform/graphics/WidthIterator.h:

        * platform/graphics/chromium/FontChromiumWin.cpp:
        (WebCore::Font::canReturnFallbackFontsForComplexText): Added an
        implementation that returns false, meaning this platform's
        implementation of floatWidthForComplexText() does not populate the
        fallbackFonts set.
        (WebCore::Font::floatWidthForComplexText): Updated for the new
        prototype.

        * platform/graphics/chromium/FontLinux.cpp: Ditto.

        * platform/graphics/gtk/FontGtk.cpp: Ditto.

        * platform/graphics/mac/CoreTextController.cpp:
        (WebCore::CoreTextController::CoreTextController): Added a fallbackFonts
        parameter and used it to initialize the m_fallbackFonts member.
        (WebCore::CoreTextController::collectCoreTextRunsForCharacters): Add
        fallback fonts to m_fallbackFonts.

        * platform/graphics/mac/CoreTextController.h:

        * platform/graphics/mac/FontMac.mm:
        (WebCore::Font::canReturnFallbackFontsForComplexText): Added an
        implementation that returns true, indicating that the Mac
        implementations of floatWidthForComplexText() populate the fallbackFonts
        set.
        * platform/graphics/mac/FontMacATSUI.mm:
        (WebCore::ATSULayoutParameters::ATSULayoutParameters): Added a
        fallbackFonts parameter and used it to initialize the m_fallbackFonts
        member.
        (WebCore::ATSULayoutParameters::initialize): Add fallback fonts to
        m_fallbackFonts.
        (WebCore::Font::floatWidthForComplexText): Added a fallbackFonts
        parameter, which is passed down to ATSULayoutParameters.

        * platform/graphics/mac/FontMacCoreText.cpp:
        (WebCore::Font::floatWidthForComplexText): Added a fallbackFonts
        parameter, which is passed down to CoreTextController.

        * platform/graphics/win/FontWin.cpp:
        (WebCore::Font::canReturnFallbackFontsForComplexText): Added an
        implementation that returns true, indicating that the
        UniscribeController-based implementations of floatWidthForComplexText()
        populate the fallbackFonts set.
        (WebCore::Font::floatWidthForComplexText): Added a fallbackFonts
        parameter, which is passed down to UniscribeController.

        * platform/graphics/win/UniscribeController.cpp:
        (WebCore::UniscribeController::UniscribeController): Added a
        fallbackfonts parameter and used it to initialize m_fallbackFonts.
        (WebCore::UniscribeController::advance): Add fallback fonts to
        m_fallbackFonts.

        * platform/graphics/win/UniscribeController.h:
        
        * platform/graphics/wx/FontWx.cpp:
        (WebCore::Font::canReturnFallbackFontsForComplexText): Added an
        implementation that returns false, meaning this platform's
        implementation of floatWidthForComplexText() does not populate the
        fallbackFonts set.
        (WebCore::Font::floatWidthForComplexText): Updated for the new
        prototype.

        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::computeLogicalBoxHeights): For an InlineTextBox
        with multiple fonts, compute a common baseline and line height by
        considering all fonts' ascents and descents (and line spacing, if
        applicable).

        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::setFallbackFonts): Added. Temporarily stores
        the set of fallback fonts in a vector.
        (WebCore::InlineTextBox::takeFallbackFonts): Added. Returns the fallback
        fonts previously stored and removes them from storage.

        * rendering/InlineTextBox.h:

        * rendering/RenderText.cpp:
        (WebCore::RenderText::RenderText): Initialized the
        m_knownNotToUseFallbackFonts to false.
        (WebCore::RenderText::styleDidChange): Reset
        m_knownNotToUseFallbackFonts to false if the style difference is such that
        affects layout.
        (WebCore::RenderText::widthFromCache): Added a fallbackFonts parameter,
        which is passed down to Font::width().
        (WebCore::RenderText::trimmedPrefWidths): Updated for the change to
        widthFromCache().
        (WebCore::RenderText::calcPrefWidths): Made this call a private version
        of calcPrefWidths() that takes a fallbackFonts parameter and set the
        m_knownNotToUseFallbackFonts to true if the set comes back empty.
        The private version passes the fallbackFonts set to widthFromCache().
        (WebCore::RenderText::setText): Reset m_knownNotToUseFallbackFonts to
        false.
        (WebCore::RenderText::createFallbackFontMetricsBox): Added.
        (WebCore::RenderText::width): Added a fallbackFonts parameter, which is
        passed down to calcPrefWidths(), widthFromCache() and Font::width().
        Set m_knownNotToUseFallbackFonts to true when appropriate.

        * rendering/RenderText.h:

        * rendering/bidi.cpp:
        (WebCore::RenderBlock::constructLine): Added an assertion and a continue
        statement to remove one level of indentation.
        (WebCore::RenderBlock::computeHorizontalPositionsForLine): Temporarily
        store the set of fallback fonts in the InlineTextBox.
        (WebCore::RenderBlock::computeVerticalPositionsForLine): Added an
        assertion.

2009-04-09  David Hyatt  <hyatt@apple.com>

        Reviewed by Adam Roben

        Rename all of the changed()/setChanged()/setDocumentChanged() methods to mention style recalc
        explicitly instead.

        * bindings/js/JSCustomPositionCallback.cpp:
        (WebCore::JSCustomPositionCallback::handleEvent):
        * bindings/js/JSCustomPositionErrorCallback.cpp:
        (WebCore::JSCustomPositionErrorCallback::handleEvent):
        * bindings/js/JSCustomSQLStatementCallback.cpp:
        (WebCore::JSCustomSQLStatementCallback::handleEvent):
        * bindings/js/JSCustomSQLStatementErrorCallback.cpp:
        (WebCore::JSCustomSQLStatementErrorCallback::handleEvent):
        * bindings/js/JSCustomSQLTransactionCallback.cpp:
        (WebCore::JSCustomSQLTransactionCallback::handleEvent):
        * bindings/js/JSCustomSQLTransactionErrorCallback.cpp:
        (WebCore::JSCustomSQLTransactionErrorCallback::handleEvent):
        * bindings/js/JSCustomVoidCallback.cpp:
        (WebCore::JSCustomVoidCallback::handleEvent):
        * bindings/js/JSCustomXPathNSResolver.cpp:
        (WebCore::JSCustomXPathNSResolver::lookupNamespaceURI):
        * bindings/js/JSEventListener.cpp:
        (WebCore::JSAbstractEventListener::handleEvent):
        * bindings/js/ScheduledAction.cpp:
        (WebCore::ScheduledAction::execute):
        * bindings/js/ScriptControllerMac.mm:
        (WebCore::updateStyleIfNeededForBindings):
        (WebCore::ScriptController::initJavaJSBindings):
        * css/CSSMutableStyleDeclaration.cpp:
        (WebCore::CSSMutableStyleDeclaration::removeProperty):
        (WebCore::CSSMutableStyleDeclaration::setNeedsStyleRecalc):
        (WebCore::CSSMutableStyleDeclaration::setProperty):
        (WebCore::CSSMutableStyleDeclaration::setStringProperty):
        (WebCore::CSSMutableStyleDeclaration::setImageProperty):
        (WebCore::CSSMutableStyleDeclaration::parseDeclaration):
        (WebCore::CSSMutableStyleDeclaration::addParsedProperties):
        (WebCore::CSSMutableStyleDeclaration::setCssText):
        (WebCore::CSSMutableStyleDeclaration::merge):
        (WebCore::CSSMutableStyleDeclaration::removePropertiesInSet):
        * css/CSSMutableStyleDeclaration.h:
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::SelectorChecker::allVisitedStateChanged):
        (WebCore::CSSStyleSelector::SelectorChecker::visitedStateChanged):
        * css/CSSVariablesDeclaration.cpp:
        (WebCore::CSSVariablesDeclaration::removeVariable):
        (WebCore::CSSVariablesDeclaration::setVariable):
        (WebCore::CSSVariablesDeclaration::setNeedsStyleRecalc):
        * css/CSSVariablesDeclaration.h:
        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::insertBefore):
        (WebCore::ContainerNode::replaceChild):
        (WebCore::ContainerNode::removeChild):
        (WebCore::ContainerNode::appendChild):
        (WebCore::ContainerNode::detach):
        (WebCore::ContainerNode::setFocus):
        (WebCore::ContainerNode::setActive):
        (WebCore::ContainerNode::setHovered):
        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::Document::~Document):
        (WebCore::Document::scheduleStyleRecalc):
        (WebCore::Document::unscheduleStyleRecalc):
        (WebCore::Document::recalcStyle):
        (WebCore::Document::updateStyleIfNeeded):
        (WebCore::Document::updateStyleForAllDocuments):
        (WebCore::Document::updateLayout):
        (WebCore::Document::implicitClose):
        (WebCore::Document::prepareMouseEvent):
        (WebCore::Document::setFocusedNode):
        (WebCore::Document::setCSSTarget):
        * dom/Document.h:
        * dom/Element.cpp:
        (WebCore::Element::recalcStyle):
        (WebCore::checkForSiblingStyleChanges):
        * dom/InputElement.cpp:
        (WebCore::InputElement::parseMaxLengthAttribute):
        * dom/MouseRelatedEvent.cpp:
        (WebCore::MouseRelatedEvent::receivedTarget):
        * dom/Node.cpp:
        (WebCore::Node::Node):
        (WebCore::Node::setNeedsStyleRecalc):
        (WebCore::Node::lazyAttach):
        (WebCore::Node::dispatchGenericEvent):
        * dom/Node.h:
        (WebCore::Node::needsStyleRecalc):
        (WebCore::Node::childNeedsStyleRecalc):
        (WebCore::Node::setChildNeedsStyleRecalc):
        * dom/OptionElement.cpp:
        (WebCore::OptionElement::setSelectedState):
        * dom/ScriptElement.cpp:
        (WebCore::ScriptElementData::evaluateScript):
        * dom/StyledElement.cpp:
        (WebCore::StyledElement::attributeChanged):
        (WebCore::StyledElement::classAttributeChanged):
        (WebCore::StyledElement::parseMappedAttribute):
        * dom/Text.cpp:
        (WebCore::Text::recalcStyle):
        * dom/XMLTokenizer.cpp:
        (WebCore::XMLTokenizer::insertErrorMessageBlock):
        * editing/DeleteButtonController.cpp:
        (WebCore::DeleteButtonController::enable):
        * editing/Editor.cpp:
        (WebCore::Editor::setBaseWritingDirection):
        * editing/SelectionController.cpp:
        (WebCore::SelectionController::nodeWillBeRemoved):
        (WebCore::SelectionController::layout):
        (WebCore::SelectionController::focusedOrActiveStateChanged):
        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::parseMappedAttribute):
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::setInnerText):
        (WebCore::HTMLElement::isContentEditable):
        (WebCore::HTMLElement::isContentRichlyEditable):
        (WebCore::HTMLElement::contentEditable):
        * html/HTMLEmbedElement.cpp:
        (WebCore::HTMLEmbedElement::updateWidget):
        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::parseMappedAttribute):
        * html/HTMLFrameSetElement.cpp:
        (WebCore::HTMLFrameSetElement::parseMappedAttribute):
        (WebCore::HTMLFrameSetElement::recalcStyle):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::parseMappedAttribute):
        (WebCore::HTMLInputElement::setChecked):
        (WebCore::HTMLInputElement::setIndeterminate):
        (WebCore::HTMLInputElement::setValue):
        (WebCore::HTMLInputElement::setAutofilled):
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::finishParsingChildren):
        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::updateWidget):
        (WebCore::HTMLObjectElement::finishParsingChildren):
        (WebCore::HTMLObjectElement::childrenChanged):
        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::recalcStyle):
        (WebCore::HTMLSelectElement::restoreState):
        (WebCore::HTMLSelectElement::setRecalcListItems):
        (WebCore::HTMLSelectElement::reset):
        (WebCore::HTMLSelectElement::typeAheadFind):
        * html/HTMLTableElement.cpp:
        (WebCore::setTableCellsChanged):
        (WebCore::HTMLTableElement::parseMappedAttribute):
        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::setValue):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::stopLoading):
        (WebCore::FrameLoader::executeScript):
        (WebCore::FrameLoader::gotoAnchor):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::alert):
        (WebCore::DOMWindow::confirm):
        (WebCore::DOMWindow::prompt):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::hoverTimerFired):
        * page/FrameView.cpp:
        (WebCore::FrameView::layout):
        (WebCore::FrameView::needsLayout):
        * page/animation/AnimationBase.cpp:
        (WebCore::AnimationBase::setNeedsStyleRecalc):
        (WebCore::AnimationBase::updateStateMachine):
        * page/animation/AnimationBase.h:
        * page/animation/AnimationController.cpp:
        (WebCore::AnimationControllerPrivate::AnimationControllerPrivate):
        (WebCore::AnimationControllerPrivate::clear):
        (WebCore::AnimationControllerPrivate::updateAnimationTimer):
        (WebCore::AnimationControllerPrivate::updateStyleIfNeededDispatcherFired):
        (WebCore::AnimationControllerPrivate::startupdateStyleIfNeededDispatcher):
        (WebCore::AnimationControllerPrivate::addEventToDispatch):
        (WebCore::AnimationControllerPrivate::addNodeChangeToDispatch):
        (WebCore::AnimationControllerPrivate::animationTimerFired):
        (WebCore::AnimationControllerPrivate::pauseAnimationAtTime):
        (WebCore::AnimationControllerPrivate::pauseTransitionAtTime):
        (WebCore::AnimationControllerPrivate::addToStartTimeResponseWaitList):
        (WebCore::AnimationController::cancelAnimations):
        * page/animation/AnimationControllerPrivate.h:
        * page/animation/ImplicitAnimation.cpp:
        (WebCore::ImplicitAnimation::sendTransitionEvent):
        * page/animation/KeyframeAnimation.cpp:
        (WebCore::KeyframeAnimation::endAnimation):
        (WebCore::KeyframeAnimation::sendAnimationEvent):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::updateDragState):
        * rendering/RenderView.cpp:
        (WebCore::RenderView::selectionBounds):
        * svg/SVGAElement.cpp:
        (WebCore::SVGAElement::svgAttributeChanged):
        * svg/SVGAnimationElement.cpp:
        (WebCore::SVGAnimationElement::setTargetAttributeAnimatedValue):
        * svg/SVGCursorElement.cpp:
        (WebCore::SVGCursorElement::svgAttributeChanged):
        * svg/SVGElementInstance.cpp:
        (WebCore::SVGElementInstance::setNeedsUpdate):
        * svg/SVGForeignObjectElement.cpp:
        (WebCore::addCSSPropertyAndNotifyAttributeMap):
        * svg/SVGStopElement.cpp:
        (WebCore::SVGStopElement::parseMappedAttribute):
        * svg/SVGStyledElement.cpp:
        (WebCore::SVGStyledElement::parseMappedAttribute):
        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::svgAttributeChanged):
        (WebCore::SVGUseElement::childrenChanged):
        (WebCore::SVGUseElement::recalcStyle):
        * svg/animation/SMILTimeContainer.cpp:
        (WebCore::SMILTimeContainer::updateAnimations):
        * wml/WMLAElement.cpp:
        (WebCore::WMLAElement::parseMappedAttribute):
        * wml/WMLInputElement.cpp:
        (WebCore::WMLInputElement::setValue):
        (WebCore::WMLInputElement::parseMappedAttribute):
        * wml/WMLNoopElement.cpp:
        (WebCore::WMLNoopElement::insertedIntoDocument):

2009-04-09  Brett Wilson  <brettw@chromium.org>

        Reviewed by Darin Fisher.

        When there is a shadow set but it specifies "no shadow", clear the
        shadow shader. This will prevent Chromium from thinking there's a
        shadow and using the Skia codepath rather than Windows.

        * platform/graphics/skia/GraphicsContextSkia.cpp:
        (WebCore::GraphicsContext::setPlatformShadow):

2009-04-09  Eric Seidel  <eric@webkit.org>

        Reviewed by Simon Fraser.

        Crash when accessing svg.viewport on a detached SVGSVGElement
        https://bugs.webkit.org/show_bug.cgi?id=25105

        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::isOutermostSVG): return "true" that we are the "outermost" SVG element if we have no parent.  (The spec is unclear as to what behavior we should have in this case, and I doubt anyone cares for now).

2009-04-09  Jian Li  <jianli@chromium.org>

        Reviewed by Dimitri Glazkov.

        https://bugs.webkit.org/show_bug.cgi?id=25084
        Upstream changes to V8 bindings for XHR so that it can work under either DOMWindow or WorkerContext.

        * bindings/v8/WorkerContextExecutionProxy.cpp:
        (WebCore::WorkerContextExecutionProxy::dispose):
        (WebCore::WorkerContextExecutionProxy::retrieve):
        (WebCore::WorkerContextExecutionProxy::initContextIfNeeded):
        (WebCore::WorkerContextExecutionProxy::findOrCreateEventListenerHelper):
        (WebCore::WorkerContextExecutionProxy::FindOrCreateEventListener):
        (WebCore::WorkerContextExecutionProxy::findOrCreateObjectEventListener):
        * bindings/v8/WorkerContextExecutionProxy.h:
        * bindings/v8/custom/V8XMLHttpRequestConstructor.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8XMLHttpRequestCustom.cpp:
        (WebCore::getEventListener):
        (WebCore::ACCESSOR_SETTER):
        (WebCore::CALLBACK_FUNC_DECL):

2009-04-09  Darin Adler  <darin@apple.com>

        Reviewed by Anders Carlsson and Sam Weinig.

        Part of <rdar://problem/5438063> Saving history containing 100,000 entries causes pauses of 2s while browsing

        Longer term solution is to change the design so Safari doesn't read and write all of history.
        This patch is step one: Do the serializing, which is done on the main thread, much faster.

        * WebCore.base.exp: Added new entry points.
        * WebCore.xcodeproj/project.pbxproj: Added new source files.

        * history/cf: Added.

        * history/cf/HistoryPropertyList.cpp: Added.
        * history/cf/HistoryPropertyList.h: Added. Code to write history files. In the future we'll also
        have code for reading here too.

        * platform/cf/BinaryPropertyList.cpp: Added.
        * platform/cf/BinaryPropertyList.h: Added. Code to write binary property list files.

2009-04-09  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Antti Koivisto

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

        If deferred repainting is active, we need to ensure that there are no repaints
        pending at the end of layoutIfNeededRecursive, which is called just before
        painting via -viewWillDraw.

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

2009-04-09  John Grabowski  <jrg@chromium.org>

        Reviewed by Darin Fisher.

        https://bugs.webkit.org/show_bug.cgi?id=25117
        Fix Mac Chromium form controls.

        * rendering/RenderThemeChromiumMac.mm:
        When rendering native controls in Mac Chromium, use a clean NSGraphicsContext.
        Properly save and restore native graphics context.
        (WebCore::RenderThemeChromiumMac::paintCheckbox):
        (WebCore::RenderThemeChromiumMac::paintRadio):
        (WebCore::RenderThemeChromiumMac::paintMenuList):
        (WebCore::RenderThemeChromiumMac::paintSearchFieldCancelButton):
        (WebCore::RenderThemeChromiumMac::paintSearchFieldResultsDecoration):
        (WebCore::RenderThemeChromiumMac::paintSearchFieldResultsButton):

2009-04-09  Drew Wilson  <atwilson@google.com>

        Reviewed by Alexey Proskuryakov.

        https://bugs.webkit.org/show_bug.cgi?id=25030
        Refactor MessagePort code to enable Chrome to use a MessagePortProxy object
        instead of a real MessagePort for the entangledPort, since it could
        theoretically live in a separate process.

        The goal of this refactoring is to remove all assumptions that the object
        representing the entangled port is actually of type MessagePort. All
        operations that were previously directly modifying private MessagePort member
        variables in the entangled port (i.e. entangle(), postMessage()) have been changed
        to invoke functions in the  MessagePortProxy interface instead which will allow
        the Chrome bindings to proxy these calls to another process.

        No new layout tests, as this is just a refactoring with no bug fixes
        or new functionality.

        * GNUmakefile.am:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSMessagePortCustom.cpp:
        (WebCore::JSMessagePort::mark):
        * dom/MessagePort.cpp:
        (WebCore::MessagePort::clone):
        (WebCore::MessagePort::postMessage):
        (WebCore::MessagePort::deliverMessage):
        (WebCore::MessagePort::startConversation):
        (WebCore::MessagePort::close):
        (WebCore::MessagePort::entangle):
        (WebCore::MessagePort::unentangle):
        * dom/MessagePort.h:
        (WebCore::MessagePort::entangledPort):
        * dom/MessagePortProxy.h: Added.
        (WebCore::MessagePortProxy::~MessagePortProxy):

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

        Reviewed by Geoffrey "Big Boy" Garen.

        Fix for <rdar://problem/5745677> Possible to stop load during an unload event
        Also fixes https://bugs.webkit.org/show_bug.cgi?id=20605

        Tests: fast/events/stop-load-in-unload-handler-using-document-write.html
               fast/events/stop-load-in-unload-handler-using-window-stop.html

        Don't allow calling methods that would stop the new load inside the unload
        event.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::FrameLoader):
        (WebCore::FrameLoader::stopLoading):
        (WebCore::FrameLoader::stopAllLoaders):
        * loader/FrameLoader.h:

2009-04-09  David Kilzer  <ddkilzer@apple.com>

        Reinstating <rdar://problem/6718589> Option to turn off SVG DOM Objective-C bindings

        Rolled r42345 back in.  The build failure was caused by an
        internal script which had not been updated the same way that
        build-webkit was updated.

        * Configurations/WebCore.xcconfig:
        * DerivedSources.make:
        * bindings/objc/DOM.mm:
        (WebCore::createElementClassMap):
        (+[DOMNode _wrapNode:WebCore::]):
        * bindings/objc/DOMCSS.mm:
        (+[DOMCSSValue _wrapCSSValue:WebCore::]):
        * bindings/objc/DOMEvents.mm:
        (+[DOMEvent _wrapEvent:WebCore::]):
        * bindings/objc/DOMInternal.h:
        * bindings/objc/ExceptionHandlers.mm:
        (WebCore::raiseDOMException):
        * html/HTMLEmbedElement.idl:
        * html/HTMLFrameElement.idl:
        * html/HTMLIFrameElement.idl:
        * html/HTMLObjectElement.idl:

2009-04-09  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Darin Adler

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

        Eliminate CompositeAnimationPrivate, which was a needless level
        of abstraction. Remove the methods like addToStyleAvailableWaitList()
        that simply turn around and call the animation controller.
        
        Rename animationControllerPriv() to animationController().
        Rename willNeedService() to timeToNextService().

        * page/animation/AnimationBase.cpp:
        (WebCore::AnimationBase::~AnimationBase):
        (WebCore::AnimationBase::updateStateMachine):
        (WebCore::AnimationBase::timeToNextService):
        (WebCore::AnimationBase::beginAnimationUpdateTime):
        * page/animation/AnimationBase.h:
        * page/animation/AnimationController.cpp:
        (WebCore::AnimationControllerPrivate::updateAnimationTimer):
        * page/animation/CompositeAnimation.cpp:
        (WebCore::CompositeAnimation::~CompositeAnimation):
        (WebCore::CompositeAnimation::clearRenderer):
        (WebCore::CompositeAnimation::updateTransitions):
        (WebCore::CompositeAnimation::updateKeyframeAnimations):
        (WebCore::CompositeAnimation::animate):
        (WebCore::CompositeAnimation::getAnimatedStyle):
        (WebCore::CompositeAnimation::setAnimating):
        (WebCore::CompositeAnimation::timeToNextService):
        (WebCore::CompositeAnimation::getAnimationForProperty):
        (WebCore::CompositeAnimation::cleanupFinishedAnimations):
        (WebCore::CompositeAnimation::suspendAnimations):
        (WebCore::CompositeAnimation::resumeAnimations):
        (WebCore::CompositeAnimation::overrideImplicitAnimations):
        (WebCore::CompositeAnimation::resumeOverriddenImplicitAnimations):
        (WebCore::CompositeAnimation::isAnimatingProperty):
        (WebCore::CompositeAnimation::pauseAnimationAtTime):
        (WebCore::CompositeAnimation::pauseTransitionAtTime):
        (WebCore::CompositeAnimation::numberOfActiveAnimations):
        * page/animation/CompositeAnimation.h:
        (WebCore::CompositeAnimation::animationController):
        (WebCore::CompositeAnimation::isSuspended):
        (WebCore::CompositeAnimation::hasAnimations):
        (WebCore::CompositeAnimation::CompositeAnimation):
        * page/animation/ImplicitAnimation.cpp:
        (WebCore::ImplicitAnimation::sendTransitionEvent):
        (WebCore::ImplicitAnimation::timeToNextService):
        * page/animation/ImplicitAnimation.h:
        * page/animation/KeyframeAnimation.cpp:
        (WebCore::KeyframeAnimation::sendAnimationEvent):
        (WebCore::KeyframeAnimation::timeToNextService):
        * page/animation/KeyframeAnimation.h:

2009-04-09  Alexey Proskuryakov  <ap@webkit.org>

        Reverting <rdar://problem/6718589> Option to turn off SVG DOM Objective-C bindings.
        It broke Mac build, and I don't know how to fix it.

        * Configurations/WebCore.xcconfig:
        * DerivedSources.make:
        * bindings/objc/DOM.mm:
        (WebCore::createElementClassMap):
        (+[DOMNode _wrapNode:WebCore::]):
        * bindings/objc/DOMCSS.mm:
        (+[DOMCSSValue _wrapCSSValue:WebCore::]):
        * bindings/objc/DOMEvents.mm:
        (+[DOMEvent _wrapEvent:WebCore::]):
        * bindings/objc/DOMInternal.h:
        * bindings/objc/ExceptionHandlers.mm:
        (WebCore::raiseDOMException):
        * html/HTMLEmbedElement.idl:
        * html/HTMLFrameElement.idl:
        * html/HTMLIFrameElement.idl:
        * html/HTMLObjectElement.idl:

2009-04-09  Xan Lopez  <xlopez@igalia.com>

        Unreviewed build fix.

        RenderView::docWidth() was made private by r42334. That commit
        changes its usage for overflowWidth(), so do that here too.

        * page/PrintContext.cpp:
        (WebCore::PrintContext::computePageRects):

2009-04-09  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Holger Freyther.

        https://bugs.webkit.org/show_bug.cgi?id=21546
        [GTK] ATK accessibility enhancements

        Based on a patch by Alp Toker.

        Implement AtkObject::ref_state_set. Still quite a few states not
        implemented.

        * page/gtk/AccessibilityObjectWrapperAtk.cpp:

2009-04-09  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Holger Freyther.

        https://bugs.webkit.org/show_bug.cgi?id=21546
        [GTK] ATK accessibility enhancements

        Based on a patch by Alp Toker.

        Move fallback object creation to its own function, as it will be
        used in several places.

        * page/gtk/AccessibilityObjectWrapperAtk.cpp:
        (fallbackObject):

2009-04-09  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Holger Freyther.

        https://bugs.webkit.org/show_bug.cgi?id=21546
        [GTK] ATK accessibility enhancements

        Based on a patch by Alp Toker.

        Move AccessibilityObject methods to their file.

        * page/gtk/AccessibilityObjectAtk.cpp:
        (WebCore::AccessibilityObject::wrapper):
        (WebCore::AccessibilityObject::setWrapper):
        * page/gtk/AccessibilityObjectWrapperAtk.cpp:

2009-04-09  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Holger Freyther.

        https://bugs.webkit.org/show_bug.cgi?id=21546
        [GTK] ATK accessibility enhancements

        Rework accessibility type generation code, based on Mozilla a11y
        implementation.

        Have one base a11y type, and generate derived types that implement
        only the necessary interfaces at runtime, based on the specific
        object we are wrapping. This allows to save a lot of code while
        covering all possible cases.

        * page/gtk/AccessibilityObjectWrapperAtk.cpp:

2009-04-09  Eric Seidel  <eric@webkit.org>

        Reviewed by Oliver Hunt.

        Fix document.implementation.createDocument(null, "a:b") not to crash!
        https://bugs.webkit.org/show_bug.cgi?id=25096

        Test: fast/dom/DOMImplementation/createDocument-namespace-err.html

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::addChild): add ASSERT() to give a better crash next time
        * dom/DOMImplementation.cpp:
        (WebCore::DOMImplementation::createDocument): check the exception code before using the result

2009-04-08  Adam Roben  <aroben@apple.com>

        Make <select>s in application chrome documents match the Vista system
        dialog look

        Reviewed by Dave Hyatt.

        * rendering/RenderThemeWin.cpp:
        (WebCore::documentIsInApplicationChromeMode): Added this simple helper
        function.
        (WebCore::RenderThemeWin::getThemeData): In application chrome mode,
        the drop down button never uses any look but the "normal" look.
        (WebCore::RenderThemeWin::paintMenuList): In application chrome mode,
        use the "readonly" style to match system dialogs.

2009-04-08  Adam Roben  <aroben@apple.com>

        Fix <rdar://6592515> Crash closing tab with Top Sites or Cover Flow
        showing after clicking "Go Back" in phishing alert

        RenderButton's m_timer is not stopped when its Document enters the
        page cache. When the WebView was torn down, the timer would fire after
        the Frame's Page had been destroyed, leading to a crash. This patch
        just makes the timer do nothing when it fires. Making the timer not
        fire when in the page cache is covered by bug 25110.

        Reviewed by Dave Hyatt.

        No test possible.

        * rendering/RenderButton.cpp:
        (WebCore::RenderButton::timerFired): Do nothing when we're in the page
        cache.

2009-04-09  David Hyatt  <hyatt@apple.com>

        Reviewed by Adam Roben

        Fix bugs where we would mistakenly turn off blitting for iframes if an external paint
        caused the checks to be triggered too early in the loading process of the frame.

        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintFillLayerExtended):

2009-04-08  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Cameron Zwarich

        https://bugs.webkit.org/show_bug.cgi?id=25106
        
        Fix signature of virtual function on AnimationBase so that it matches
        those in the derived classes, by removing unused parameter.
        
        * page/animation/AnimationBase.h:
        (WebCore::AnimationBase::endAnimation):

2009-04-08  David Kilzer  <ddkilzer@apple.com>

        <rdar://problem/6718589> Option to turn off SVG DOM Objective-C bindings

        Reviewed by Darin Adler and Maciej Stachowiak.

        Introduce the ENABLE_SVG_DOM_OBJC_BINDINGS feature define so
        that SVG DOM Objective-C bindings may be optionally disabled.

        * Configurations/WebCore.xcconfig: Added
        ENABLE_SVG_DOM_OBJC_BINDINGS variable and use it in
        FEATURE_DEFINES and EXCLUDED_SOURCE_FILE_NAMES.  When SVG DOM
        Objective-C bindings are disabled, two generated header files no
        longer exist and none of the generated DOMSVG*.mm files should
        be compiled.
        * DerivedSources.make: All of the WebCore.SVG*.exp files contain
        SVG DOM Objective-C bindings classes, so exclude them unless
        ENABLE_SVG_DOM_OBJC_BINDINGS is set.
        * bindings/objc/DOM.mm: Switched from using ENABLE(SVG) to using
        ENABLE(SVG_DOM_OBJC_BINDINGS).
        (WebCore::createElementClassMap):
        (+[DOMNode _wrapNode:WebCore::]):
        * bindings/objc/DOMCSS.mm: Ditto.
        (+[DOMCSSValue _wrapCSSValue:WebCore::]):
        * bindings/objc/DOMEvents.mm: Ditto.
        (+[DOMEvent _wrapEvent:WebCore::]):
        * bindings/objc/DOMInternal.h: Ditto.
        * bindings/objc/ExceptionHandlers.mm: Added use of
        ENABLE(SVG_DOM_OBJC_BINDINGS).
        (WebCore::raiseDOMException):
        * html/HTMLEmbedElement.idl: Excluded -getSVGDocument method
        in generated Objective-C DOM classes if SVG DOM Objective-C
        bindings are disabled.
        * html/HTMLFrameElement.idl: Ditto.
        * html/HTMLIFrameElement.idl: Ditto.
        * html/HTMLObjectElement.idl: Ditto.

2009-04-08  Dan Bernstein  <mitz@apple.com>

        Reviewed by Sam Weinig.

        - limit the workaround for <rdar://problem/5781372> to Mac OS X versions
          that need it

        * platform/mac/WebFontCache.mm:
        (fixUpWeight): Changed this function to be a no-op post-Leopard.

2009-04-08  Dan Bernstein  <mitz@apple.com>

        Reviewed by Dave Hyatt.

        - fix <rdar://problem/6771547> Appending to a RenderText causes all its
          lines to be dirtied

        Test: fast/repaint/text-append-dirty-lines.html

        * rendering/RenderText.cpp:
        (WebCore::RenderText::setTextWithOffset): If no text boxes intersected
        with or came after the new text, dirty the last root box, since the new
        text may begin there. Having at least one dirty line prevents the
        incorrect dirtying of all lines later during layoutInlineChildren().

2009-04-08  Darin Fisher  <darin@chromium.org>

        Reviewed by Eric Seidel.

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

        Fixes a Chromium-specific crash in WebCore::ImageBuffer::context that
        occurs when rendering semi-transparent RTL text.

        Test: fast/text/complex-text-opacity.html

        * platform/graphics/chromium/FontChromiumWin.cpp: Handle RTL when computing text bounds.
        (WebCore::TransparencyAwareFontPainter::TransparencyAwareUniscribePainter::estimateTextBounds):

2009-04-08  David Hyatt  <hyatt@apple.com>

        Reviewed by Beth Dakin

        Fix a porting error in my previous patch.  A != was supposed to be an ==.

        * platform/ScrollView.cpp:
        (WebCore::ScrollView::updateScrollbars):

2009-04-08  David Hyatt  <hyatt@apple.com>

        Reviewed by Adam Roben and Darin Adler

        Fix for https://bugs.webkit.org/show_bug.cgi?id=12440, repaints inconsistent for
        fixed positioned elements.

        Rewrite the updateScrollers method to be more correct in its results.

        Test: fast/block/positioning/fixed-positioning-scrollbar-bug.html

        * dom/Document.cpp:
        (WebCore::Document::recalcStyle):
        (WebCore::Document::implicitClose):
        * page/FrameView.cpp:
        (WebCore::FrameView::createScrollbar):
        (WebCore::FrameView::layout):
        (WebCore::FrameView::adjustPageHeight):
        * page/FrameView.h:
        * page/win/FrameWin.cpp:
        (WebCore::computePageRectsForFrame):
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::ScrollView):
        (WebCore::ScrollView::updateScrollbars):
        * platform/ScrollView.h:
        * rendering/RenderView.cpp:
        (WebCore::RenderView::layout):
        (WebCore::RenderView::docHeight):
        (WebCore::RenderView::docWidth):
        * rendering/RenderView.h:

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

        Reviewed by Anders Carlsson.

        Fix for <rdar://problem/6226200> Implement Microsoft's X-FRAME-OPTIONS anti-framing defense

        Tests: http/tests/security/XFrameOptions/x-frame-options-deny-meta-tag-in-body.html
               http/tests/security/XFrameOptions/x-frame-options-deny-meta-tag-parent-same-origin-allow.html
               http/tests/security/XFrameOptions/x-frame-options-deny-meta-tag-parent-same-origin-deny.html
               http/tests/security/XFrameOptions/x-frame-options-deny-meta-tag.html
               http/tests/security/XFrameOptions/x-frame-options-deny.html
               http/tests/security/XFrameOptions/x-frame-options-parent-same-origin-allow.html
               http/tests/security/XFrameOptions/x-frame-options-parent-same-origin-deny.html

        * dom/Document.cpp:
        (WebCore::Document::processHttpEquiv): Stop the current load and redirect to about:blank
        if an X-FRAME-OPTIONS <meta> tag http-equiq dictates we should.
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::shouldInterruptLoadForXFrameOptions): Add logic to parse
        the X-FRAME-OPTIONS parameter.
        * loader/FrameLoader.h:
        * loader/MainResourceLoader.cpp:
        (WebCore::MainResourceLoader::didReceiveResponse): Stop the current load if framed and
        a X-FRAME-OPTIONS header and its parameter dictate that we should.

2009-04-08  Adam Roben  <aroben@apple.com>

        Fix http/tests/xmlhttprequest/xmlhttprequest-unsafe-redirect.html on Windows

        Reviewed by Sam Weinig.

        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::ResourceHandle::loadResourceSynchronously): Mimic the
        ResourceHandleMac code by propagating the CFError's error code for
        kCFErrorDomainCFNetwork errors to the ResourceResponse.

2009-04-08  Anders Carlsson  <andersca@apple.com>

        Try to fix the PPC build.
        
        * plugins/npfunctions.h:

2009-04-08  Darin Adler  <darin@apple.com>

        Reviewed by Sam Weinig.

        <rdar://problem/5908616> tokenizer resizer should handle edge cases consistently

        * html/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::enlargeBuffer): Handle edge cases the same way as a failed fastMalloc.
        (WebCore::HTMLTokenizer::enlargeScriptBuffer): Ditto.

2009-04-08  David Hyatt  <hyatt@apple.com>

        Reviewed by Darin Adler

        Make sure that cloneNode works with SVG attributes that require synchronization.  This fixes
        issues with <use> element shadow tree cloning where the clones can end up not obtaining the
        correct attribute values.

        A subsequent patch of mine will expose this problem and cause it to be covered by existing
        layout tests, so no test is required at this time for this problem.

        * dom/Element.cpp:
        (WebCore::Element::cloneElementWithoutChildren):

2009-04-08  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Timothy Hatcher.

        https://bugs.webkit.org/show_bug.cgi?id=25093
        REGRESSION: some scripts are showing in the Inspector with only "true"
        as the source.

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::didParseSource): Fixed conversion issue.
        (WebCore::InspectorController::failedToParseSource): Ditto.

2009-04-08  Adam Barth  <abarth@webkit.org>

        Reviewed by Alexey Proskuryakov.

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

        Verify the MIME type of stylesheets (in standards mode) by looking
        at the Content-Type header directly.  This bypasses any content
        sniffing that might be confusing the issue.

        Test: http/tests/mime/standard-mode-loads-stylesheet-without-content-type-header.html

        * loader/CachedCSSStyleSheet.cpp:
        (WebCore::CachedCSSStyleSheet::canUseSheet):

2009-04-08  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Simon Fraser.

        https://bugs.webkit.org/show_bug.cgi?id=25041
        <rdar://problem/6697754>
        Bug 25041: HTMLMediaElement: OSX autoplay broken by r41907
        
        OSX media player should set readyState to HAVE_ENOUGH_DATA when the movie's load state
        reaches QTMovieLoadStatePlaythroughOK, not when the entire file has been downloaded,
        so autoplay can begin when it should.

        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivate::updateStates): Set readState to 
        HAVE_ENOUGH_DATA when QTMovie load state reaches QTMovieLoadStatePlaythroughOK.
        (WebCore::MediaPlayerPrivate::paint): Add braces missed in r42203.

2009-04-08  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by David Kilzer. Based on a patch by Grace Kloba.

        https://bugs.webkit.org/show_bug.cgi?id=24656
        cacheControlContainsNoCache() in ResourceResponseBase.h is wrong

        * platform/network/ResourceResponseBase.cpp:
        (WebCore::ResourceResponseBase::parseCacheControlDirectives): Removed misused code for
        parsing directive values, fixing parsing of directives that we care about.

        * platform/network/ResourceResponseBase.h:
        (WebCore::ResourceResponseBase::cacheControlContainsNoCache): Fixed a copy/paste mistake,
        m_cacheControlContainsMustRevalidate was returned instead of m_cacheControlContainsNoCache.

2009-04-08  Adam Roben  <aroben@apple.com>

        Make text fields match the system look on Vista

        Reviewed by Dave Hyatt.

        * rendering/RenderThemeWin.cpp:
        (WebCore::RenderThemeWin::getThemeData): Use the new-to-Vista
        EP_EDITBORDER_NOSCROLL part for text fields.

2009-04-07  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Maciej Stachowiak.

        https://bugs.webkit.org/show_bug.cgi?id=24957
        REGRESSION: Google calendar widget no longer shows upcoming events

        Test: http/tests/xmlhttprequest/authorization-header.html

        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequestStaticData::XMLHttpRequestStaticData): Removed Authorization from
        the list of forbidden headers.

2009-04-07  miggilin  <mr.diggilin@gmail.com>

        Reviewed by Kevin Ollivier.

        Remove no longer needed debug warning and Windows-specific codepaths
        (as we now use the Safari/Win port's timer there)

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

        * platform/wx/SharedTimerWx.cpp:
        (WebCore::setSharedTimerFireTime):


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

        Fix many <video> regression tests on Windows

        Reviewed by Dave Hyatt.

        * platform/graphics/win/QTMovieWin.cpp:
        (QTMovieWin::getNaturalSize): Call GetMovieNaturalBoundsRect, which
        returns the movie's natural bounds (duh), rather than GetMovieBox,
        which returns the movie's current displayed size/position.

2009-04-07  Brady Eidson  <beidson@apple.com>

        Reviewed by Darin Adler and Sam Weinig

        <rdar://problem/5968249> "Private Browsing" doesn't affect HTML 5 LocalStorage

        The expected behavior for persistent storage when private browsing mode is undefined by the spec.
        For now we're going with a "read-only when in private browsing" policy until we can get feedback
        and/or get the behavior specified in the spec.

        Note that I purposefully made the change to restrict SessionStorage to read-only, also, with the
        understanding that the spec allows for SessionStorage to persist across relaunches, even though
        our implementation currently doesn't do this.

        * dom/DOMCoreException.idl: Add some new ExceptionCodes defined in HTML5, one of which is needed
          for LocalStorage changes (QUOTA_EXCEEDED_ERR)
        * dom/ExceptionCode.cpp: 
        * dom/ExceptionCode.h:

        * storage/StorageArea.cpp:
        (WebCore::StorageArea::internalSetItem): If private browsing is enabled, throw the QUOTA_EXCEEDED_ERR
          exception as the spec allows.
        (WebCore::StorageArea::internalRemoveItem): If private browsing is enabled, silently fail to remove
          the item.
        (WebCore::StorageArea::internalClear): If private browsing is enabled, silently fail to clear the area.

2009-04-07  Dean Jackson  <dino@apple.com>

        Reviewed by Simon Fraser.

        <rdar://problem/6148255>

        Standalone media documents can not always handle everything
        using a <video> element. In these cases switch to an <embed>
        element that uses the QuickTime plugin, in the hope that it
        will have more luck. Typical media types that trigger this
        are streamed media and QTVR.

        Equivalent Windows fix to come once reviewed. Note also that
        this area of code needs a cleanup:
        https://bugs.webkit.org/show_bug.cgi?id=25085

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::mediaPlayerSawUnsupportedTracks):
        * html/HTMLMediaElement.h:
        * loader/MediaDocument.cpp:
        (WebCore::MediaDocument::mediaElementSawUnsupportedTracks):
        (WebCore::MediaDocument::replaceVideoWithEmbed):
        * loader/MediaDocument.h:
            - removes the <video> element and puts in an <embed>
        * platform/graphics/MediaPlayer.h:
        (WebCore::MediaPlayerClient::mediaPlayerSawUnsupportedTracks):
            - new internal method for flagging a problem
        * platform/graphics/mac/MediaPlayerPrivateQTKit.h:
        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivate::MediaPlayerPrivate):
        (WebCore::MediaPlayerPrivate::updateStates):
            - looks for the types of content we don't handle
        (WebCore::MediaPlayerPrivate::rateChanged):
        (WebCore::MediaPlayerPrivate::sizeChanged):
        (WebCore::MediaPlayerPrivate::timeChanged):
        (WebCore::MediaPlayerPrivate::didEnd):
        (WebCore::MediaPlayerPrivate::disableUnsupportedTracks):
        (WebCore::MediaPlayerPrivate::sawUnsupportedTracks):
            - inform the MediaClient that we have a potential problem

2009-04-07  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        - fix <rdar://problem/6767428> Resurrect
          +[WebFontCache fontWithFamily:traits:size:] for clients that call it
          directly

        WebFontCache is a class in the WebCore framework and is not WebKit API,
        but apparently (perhaps mistakenly) some clients call this private
        interface.

        This change resurrects the interface and gives it reasonable behavior
        (however, note that WebCore will not call the old interface, so hacks that
        override it will have no effect on WebKit clients).

        * platform/mac/WebFontCache.h:
        * platform/mac/WebFontCache.mm:
        (+[WebFontCache fontWithFamily:traits:size:]): Added. Call through to
        +fontWithFamily:traits:weight:size:.

2009-04-07  David Hyatt  <hyatt@apple.com>

        Reviewed by Adam Roben

        Fix ScrollView's algorithm that determines whether or not to show scrollbars.  There was a bug
        with the method mainly because RenderView will size itself to the viewport's size, making it
        impossible to really know the document's "true" size.

        In order to solve this problem ScrollView now has a minimumContentsSize method.  This method
        returns the document size excluding the RenderView from the calculation.  This width/height
        is now cached on RenderView in m_docWidth/m_docHeight member variables.

        * WebCore.base.exp:
        * page/FrameView.cpp:
        (WebCore::FrameView::adjustPageHeight):
        (WebCore::FrameView::minimumContentsSize):
        * page/FrameView.h:
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::updateScrollbars):
        * platform/ScrollView.h:
        (WebCore::ScrollView::minimumContentsSize):
        * rendering/RenderView.cpp:
        (WebCore::RenderView::layout):
        (WebCore::RenderView::calcDocHeight):
        (WebCore::RenderView::calcDocWidth):
        * rendering/RenderView.h:
        (WebCore::RenderView::docWidth):
        (WebCore::RenderView::docHeight):

2009-04-07  Dimitri Glazkov  <dglazkov@chromium.org>

        Build fix, not reviewed.

        * WebCore.xcodeproj/project.pbxproj: Made ScriptObject.h private.

2009-04-07  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Timothy Hatcher.

        https://bugs.webkit.org/show_bug.cgi?id=25063
        Refactor InspectorController to use ScriptObject/State.

        * GNUmakefile.am: Added ScriptState.cpp.
        * WebCore.pro: Ditto.
        * WebCore.vcproj/WebCore.vcproj: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * WebCoreSources.bkl: Ditto.
        * bindings/js/JSInspectorControllerCustom.cpp:
        (WebCore::JSInspectorController::addSourceToFrame): Fixed argument index typo.
        * bindings/js/ScriptFunctionCall.cpp:
        (WebCore::ScriptFunctionCall::call): Added reportExceptions parameter.
        (WebCore::ScriptFunctionCall::construct): Ditto.
        * bindings/js/ScriptFunctionCall.h: Ditto.
        * bindings/js/ScriptObject.cpp:
        (WebCore::handleException): Added exception-reporting heloper.
        (WebCore::ScriptObject::set): Changed to use handleException.
        (WebCore::ScriptGlobalObject::set): Ditto,
        * bindings/js/ScriptObject.cpp: Added ScriptGlobalObject.
        (WebCore::ScriptGlobalObject::set): Added.
        (WebCore::ScriptGlobalObject::getObject): Added.
        * bindings/js/ScriptObject.h: Added ScriptGlobalObject decls.
        (WebCore::ScriptGlobalObject::ScriptGlobalObject): Added.
        * bindings/js/ScriptState.cpp: Added.
        * bindings/js/ScriptState.h: Added scriptStateFromPage decl.
        * inspector/ConsoleMessage.cpp:
        (WebCore::ConsoleMessage::addToConsole): Changed to not report exceptions
            to avoid re-entrancy.
        * inspector/InspectorController.cpp: Refactored to use ScriptState/Object.
        * inspector/InspectorController.h: Ditto.

2009-04-07  Adam Langley  <agl@google.com>

        Reviewed by Darin Fisher.

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

        Skia was previously calculating the leading value incorrectly, leading
        us to add fHeight to get the height of a line of text. Now that Skia
        is calculating fLeading correctly, we can remove fHeight.

        This doesn't affect any layout tests.

        * platform/graphics/chromium/SimpleFontDataLinux.cpp:
        (WebCore::SimpleFontData::platformInit):

2009-04-07  Brian Weinstein  <bweinstein@gmail.com>

        Reviewed by Darin Adler.

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

        This fix removes the status code from the status message in a ResourceResponse, which allows a few more tests in http to pass.

        * platform/network/cf/ResourceResponseCFNet.cpp:
        (WebCore::ResourceResponse::platformLazyInit):

2009-04-07  Adam Langley  <agl@google.com>

        Reviewed by Darin Fisher.

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

        Skia is changing from reporting the XRange to reporting the XMin and
        XMax.  Obviously these are equivalent, but other users of the metrics
        need the two numbers to be separate.

        This doesn't affect any layout tests.

        * platform/graphics/chromium/SimpleFontDataLinux.cpp:
        (WebCore::SimpleFontData::platformInit):

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

        Make the look of <select>s match the system look on Vista

        Reviewed by Dave Hyatt.

        * rendering/RenderThemeWin.cpp: Added new constants.
        (WebCore::RenderThemeWin::getThemeData): On Vista, use the
        CP_DROPDOWNBUTTONRIGHT part for drop down buttons.
        (WebCore::RenderThemeWin::paintMenuList): On Vista, use the CP_BORDER
        part to draw the border of <select>s.
        (WebCore::RenderThemeWin::paintMenuListButton): On Vista, outset the
        drop down button to make its border coincide with the <select>'s
        border.

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

        Move isRunningOnVistaOrLater to a shared location

        Rubber-stamped in advance by Dave Hyatt.

        * WebCore.vcproj/WebCore.vcproj: Added SystemInfo.{cpp,h}, and let VS
        have its way with the rest of the file.
        * platform/win/ScrollbarThemeWin.cpp: Moved isRunningOnVistaOrLater
        from here...
        * platform/win/SystemInfo.cpp: Added.
        (WebCore::isRunningOnVistaOrLater): ...to here.
        * platform/win/SystemInfo.h: Added.

2009-04-07  Paul Godavari  <paul@chromium.org>

        Reviewed by Darin Fisher.

        https://bugs.webkit.org/show_bug.cgi?id=24692
        Enable PopupMenuChromium to handle HTML select popups using native
        cocoa controls on the Mac, all other platforms are unchanged.

        We also split out the storage container for the popup menu items
        so that ChromeClientChromium can access them for forwarding to
        the embedding host (Chromium.app or test_shell).

        * page/chromium/ChromeClientChromium.h:
        * platform/chromium/PopupMenuChromium.cpp:
        (WebCore::PopupListBox::items):
        (WebCore::PopupContainer::PopupContainer):
        (WebCore::PopupContainer::~PopupContainer):
        (WebCore::PopupContainer::showPopup):
        (WebCore::PopupContainer::showExternal):
        (WebCore::PopupContainer::menuItemHeight):
        (WebCore::popupData):
        (WebCore::PopupListBox::pointToRowIndex):
        (WebCore::PopupListBox::getRowBounds):
        (WebCore::PopupListBox::isSelectableItem):
        (WebCore::PopupListBox::updateFromElement):
        (WebCore::PopupListBox::layout):
        (WebCore::PopupListBox::clear):
        (WebCore::PopupMenu::show):
        * platform/chromium/PopupMenuChromium.h:
        (WebCore::PopupItem::):
        (WebCore::PopupItem::PopupItem):

2009-04-07  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.
        
        Added some double-checking to event handler marking. Now, when the
        wrapper that's responsible for marking an event handler's JavaScript
        function gets collected, it clears the event handler's JavaScript function
        so we won't dereference it after it's collected.
        
        In theory, we would never dereference a JavaScript event handler after
        its node's wrapper was collected anyway, but it's nice to be safe.

        * bindings/js/JSDOMApplicationCacheCustom.cpp:
        (WebCore::JSDOMApplicationCache::mark):
        * bindings/js/JSEventListener.cpp:
        (WebCore::JSEventListener::JSEventListener):
        (WebCore::JSEventListener::jsFunction):
        (WebCore::JSEventListener::invalidateJSFunction):
        (WebCore::JSEventListener::markJSFunction):
        * bindings/js/JSEventListener.h:
        * bindings/js/JSMessagePortCustom.cpp:
        (WebCore::JSMessagePort::mark):
        * bindings/js/JSNodeCustom.cpp:
        (WebCore::markEventListeners):
        * bindings/js/JSWorkerContextCustom.cpp:
        (WebCore::JSWorkerContext::mark):
        * bindings/js/JSWorkerCustom.cpp:
        (WebCore::JSWorker::mark):
        * bindings/js/JSXMLHttpRequestCustom.cpp:
        (WebCore::JSXMLHttpRequest::mark):
        * bindings/js/JSXMLHttpRequestUploadCustom.cpp:
        (WebCore::JSXMLHttpRequestUpload::mark):
        * bindings/scripts/CodeGeneratorJS.pm:
        * dom/EventListener.h:
        (WebCore::EventListener::invalidateJSFunction):
        (WebCore::EventListener::markJSFunction):
        (WebCore::markIfNotNull):

2009-04-07  David Levin  <levin@chromium.org>

        Build fix.

        r44280 undid the change in r42268 that made CookieJar.h private.
        This redoes the change.

        * WebCore.xcodeproj/project.pbxproj:

2009-04-07  Jian Li  <jianli@chromium.org>

        Reviewed by Darin Fisher.

        Upstream changes to WorkerContextExecutionProxy for enabling V8 preemption.
        https://bugs.webkit.org/show_bug.cgi?id=25034

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

2009-04-07  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        - fix <rdar://problem/6764359> Thai word selection misbehaves for the
          last sentence in the document

        Test: editing/selection/thai-word-at-document-end.html

        * editing/visible_units.cpp:
            - Added a BoundarySearchContextAvailability enum used to indicate
            whether the caller to a boundary search function may be able to provide
            additional text in the search direction and call again.
            - Added a named type for the boundary search function signature. Changed
            the signature to take a context availability parameter and a boolean
            out parameter indicating whether more context is needed to perform
            the search.
        (WebCore::previousBoundary): If the beginning of the range was reached
            but the last search wanted more context, perform the search again, this
            time indicating that there is no earlier text.
        (WebCore::nextBoundary): Similarly, in the other direction.
        (WebCore::startWordBoundary): Check whether more context may be available
            and ask for more context if needed.
        (WebCore::endWordBoundary): Ditto.
        (WebCore::previousWordPositionBoundary): Ditto.
        (WebCore::nextWordPositionBoundary): Ditto.
        (WebCore::startSentenceBoundary):  Updated signature.
        (WebCore::endSentenceBoundary): Ditto.
        (WebCore::previousSentencePositionBoundary): Ditto.
        (WebCore::nextSentencePositionBoundary): Ditto.

2009-04-07  Geoffrey Garen  <ggaren@apple.com>

        Rubber stamped by Sam Weinig.
        
        A little renaming:
        
        function => jsFunction
        listener => jsFunction

        * bindings/js/JSEventListener.cpp:
        (WebCore::JSAbstractEventListener::handleEvent):
        (WebCore::JSEventListener::JSEventListener):
        (WebCore::JSEventListener::~JSEventListener):
        (WebCore::JSEventListener::jsFunction):
        (WebCore::JSEventListener::mark):
        (WebCore::JSProtectedEventListener::JSProtectedEventListener):
        (WebCore::JSProtectedEventListener::~JSProtectedEventListener):
        (WebCore::JSProtectedEventListener::jsFunction):
        * bindings/js/JSEventListener.h:
        (WebCore::JSProtectedEventListener::create):
        * bindings/js/JSLazyEventListener.cpp:
        (WebCore::JSLazyEventListener::jsFunction):
        (WebCore::JSLazyEventListener::parseCode):
        * dom/EventListener.h:
        (WebCore::EventListener::jsFunction):

2009-04-07  Brady Eidson  <beidson@apple.com>

        Reviewed by Darin Adler

        While working on <rdar://problem/5968249>, noticed some glaring problems with LocalStorage.

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::localStorage): Return the cached m_localStorage object if it exists to 
          avoid creating multiple representations for the same underlying StorageArea.
        * page/DOMWindow.h:
        (WebCore::DOMWindow::optionalLocalStorage): Return m_localStorage, not m_sessionStorage.

2009-04-07  Darin Adler  <darin@apple.com>

        Roll out incorrect build fix.

        * WebCore.NPAPI.exp: Reverted.

2009-04-07  Darin Adler  <darin@apple.com>

        Another build fix.

        * WebCore.NPAPI.exp: Added new functions.

2009-04-07  Anders Carlsson  <andersca@apple.com>

        Another build fix.
        
        * plugins/npfunctions.h:

2009-04-07  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Unreviewed build fix. Fix non-Mac builds.

        * bridge/npapi.h:

2009-04-07  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein

        https://bugs.webkit.org/show_bug.cgi?id=25082
        
        Clean up repaint logic when RenderLayers become and stop being composited.

        * rendering/RenderLayer.h:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::rendererContentChanged):
        (WebCore::RenderLayer::repaintIncludingNonCompositingDescendants):
        New compositing-only method that repaints a layer and all its non-composited descendants.
        Takes a repaintContainer for performance; all the repaints necessarily share the same
        repaintContainer.

        * rendering/RenderLayerCompositor.h:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::updateLayerCompositingState):
        Rather than use calculateCompositedBounds() to compute the repaint rect (which gave
        the wrong answer when the composited layer tree was in flux), use the new
        repaintOnCompositingChange() method.
        
        (WebCore::RenderLayerCompositor::repaintOnCompositingChange):
        Call repaintIncludingNonCompositingDescendants(), and if necessary make sure
        that the view/layer drawing synchronization happens.
        
        (WebCore::RenderLayerCompositor::computeCompositingRequirements):
        Do a repaintOnCompositingChange() when a layer is going to be composited. This is
        a good place because we haven't started to change the compositing tree.
        
        (WebCore::RenderLayerCompositor::rebuildCompositingLayerTree):
        After we've finished updating all the descendant layers, we can do a repaint for
        layers that ceased compositing.

2009-04-07  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dave Hyatt
        
        https://bugs.webkit.org/show_bug.cgi?id=25069
        
        Clean up the accelerated compositing code that determines the format of
        the GraphicsLayer hierarchy, being more explicit about which parts have
        to happen before and after descendant layers have been updated. Also remove
        some unhelpful caching of state.

        * dom/Document.cpp:
        (WebCore::Document::recalcStyle):
        Only call updateCompositingLayers() if we know we're not going to be
        doing a layout soon.
        
        * platform/graphics/mac/GraphicsLayerCA.mm:
        (WebCore::GraphicsLayerCA::setDrawsContent):
        Toggling drawsContent from false to true should do a setNeedsDisplay().
        
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::styleChanged):
        updateLayerCompositingState() no longer updates the layer geometry, so
        do that here if we're not going to rebuild layers anyway.
        Also, updateLayerCompositingState() no longer does a setContentsNeedDisplay,
        so do that if the style change indicates that a repaint is required.
        
        * rendering/RenderLayerBacking.h:
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::RenderLayerBacking):
        (WebCore::RenderLayerBacking::updateAfterLayout):
        The 'drawing optimizations' logic has been rolled into updateGraphicsLayerConfiguration()
        and updateGraphicsLayerGeometry().
        
        (WebCore::RenderLayerBacking::updateGraphicsLayerConfiguration):
        Group that code that decides what GraphicsLayers are needed into this method,
        which deals with clipping layers and 'direct compositing': images that can be
        rendered via the compositor.
        
        (WebCore::RenderLayerBacking::updateGraphicsLayerGeometry):
        Call setDrawsContent() if updateGraphicsLayerConfiguration() didn't already
        figure it out for image layers.
        
        (WebCore::RenderLayerBacking::isSimpleContainerCompositingLayer):
        Remove the m_simpleCompositingLayerStatusDirty cache indicator, since we just
        computed it every time anyway.
        
        * rendering/RenderLayerCompositor.h:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::updateLayerCompositingState):
        updateGraphicsLayers() was renamed to updateGraphicsLayerConfiguration(),
        which calls clippedByAncestor() etc. itself rather than having everything passed in.
        Repaints are taken care of by styleChanged() and setDrawsContent().
        
        (WebCore::RenderLayerCompositor::calculateCompositedBounds):
        !layer->isComposited() && layer->transform() is a synonym for paintsWithTransform().
        
        (WebCore::RenderLayerCompositor::setCompositingParent):
        No need to call updateGraphicsLayerGeometry() here, because we're going to
        rebuild layers anyway.
        
        (WebCore::RenderLayerCompositor::rebuildCompositingLayerTree):
        Add comments, and test layerBacking instead of layer->isComposited().

2009-04-07  Anders Carlsson  <andersca@apple.com>

        Fix build.
        
        * WebCore.base.exp:

2009-04-07  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        <rdar://problem/6667001> NPAPI: need NPN_Get/SetValueForURL() and NPN_GetAuthenticationInfo()
        
        * WebCore.base.exp:
        Add symbols needed by WebKit.
        
        * WebCore.xcodeproj/project.pbxproj:
        Make CookieJar a private header.
        
        * bridge/npapi.h:
        Add function definitions.
        
        * plugins/npfunctions.h:
        Fix the NPN_SetValueForURLProcPtr signature.

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

        Fix <rdar://6520933> REGRESSION (3.2.1-ToT): Scroll bar disappears in
        WebView and Bookmarks view after switching theme or turning on High
        Contrast mode

        Reviewed by Dave Hyatt.

        * platform/win/ScrollbarThemeWin.cpp:
        (WebCore::ScrollbarThemeWin::themeChanged): Null out scrollbarTheme
        after closing it so that we'll re-open the theme next time we paint.

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

        Small cleanup/correctness fix in ScrollbarThemeWin

        Reviewed by Dave Hyatt.

        * platform/win/ScrollbarThemeWin.cpp: Removed the now-unused
        haveTheme boolean.
        (WebCore::checkAndInitScrollbarTheme): Check IsThemeActive() before
        calling OpenThemeData. This seems to be what MSDN recommends.
        (WebCore::ScrollbarThemeWin::themeChanged): Null-check scrollbarTheme
        before closing it, rather than indirectly null-checking it via
        checking haveTheme.

2009-04-07  Dan Bernstein  <mitz@apple.com>

        Reviewed by John Sullivan.

        - when -webkit-line-break: after-white-space is specified but the text
          does not auto-wrap, do not shrink the trailing space to fit in the
          available width

        Test: fast/text/whitespace/nowrap-line-break-after-white-space.html

        - when shrinking such trailing space, do not shrink below zero

        Covered by existing tests

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

2009-04-07  Eric Seidel  <eric@webkit.org>

        Reviewed by Darin Adler.

        Move RangeBoundaryPoint off of Position, per Darin's suggestion
        https://bugs.webkit.org/show_bug.cgi?id=24966

        Rename setToChild to setToBeforeChild (since that's what the method does)

        * dom/Position.h:
        (WebCore::Position::offsetInContainerNode):
        * dom/Range.cpp:
        (WebCore::Range::insertNode):
        (WebCore::Range::selectNodeContents):
        (WebCore::boundaryNodeWillBeRemoved):
        * dom/Range.h:
        (WebCore::Range::startPosition):
        (WebCore::Range::endPosition):
        * dom/RangeBoundaryPoint.h:
        (WebCore::RangeBoundaryPoint::RangeBoundaryPoint):
        (WebCore::RangeBoundaryPoint::container):
        (WebCore::RangeBoundaryPoint::childBefore):
        (WebCore::RangeBoundaryPoint::position):
        (WebCore::RangeBoundaryPoint::offset):
        (WebCore::RangeBoundaryPoint::clear):
        (WebCore::RangeBoundaryPoint::set):
        (WebCore::RangeBoundaryPoint::setOffset):
        (WebCore::RangeBoundaryPoint::setToBeforeChild):
        (WebCore::RangeBoundaryPoint::setToStartOfNode):
        (WebCore::RangeBoundaryPoint::setToEndOfNode):
        (WebCore::RangeBoundaryPoint::childBeforeWillBeRemoved):
        (WebCore::RangeBoundaryPoint::invalidateOffset):

2009-04-07  Eric Seidel  <eric@webkit.org>

        Reviewed by Darin Adler.

        Add containerNode(), computeOffsetInContainerNode(),
        computeNodeBeforePosition() and computeNodeAfterPosition().
        https://bugs.webkit.org/show_bug.cgi?id=24763

        These functions will replace uses of rangeCompliantPosition()
        in future patches.

        No changes in behavior, thus no tests.

        * dom/Position.cpp:
        (WebCore::Position::containerNode):
        (WebCore::Position::computeOffsetInContainerNode):
        (WebCore::Position::computeNodeBeforePosition):
        (WebCore::Position::computeNodeAfterPosition):
        (WebCore::Position::anchorType):
        * dom/Position.h:
        (WebCore::Position::):

2009-04-06  Sam Weinig  <sam@webkit.org>

        Reviewed by Mark Rowe.

        Bottleneck dispatching mutation events in a new dispatchMutationEvent
        function.

        * dom/CharacterData.cpp:
        (WebCore::CharacterData::dispatchModifiedEvent):
        * dom/ContainerNode.cpp:
        (WebCore::dispatchChildInsertionEvents):
        (WebCore::dispatchChildRemovalEvents):
        * dom/Node.cpp:
        (WebCore::Node::dispatchSubtreeModifiedEvent):
        (WebCore::Node::dispatchMutationEvent):
        * dom/Node.h:

2009-04-06  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Darin Fisher.

        https://bugs.webkit.org/show_bug.cgi?id=25059
        Remove references to dominantScript, getGenericFontForScript.

        * platform/graphics/chromium/FontCacheChromiumWin.cpp: Removed references
            to getGenericFontForScript.
        (WebCore::FontCache::getLastResortFallbackFont): Removed calls to dominantScript.
        * platform/graphics/chromium/FontCacheLinux.cpp: Ditto.
        * rendering/RenderThemeChromiumLinux.cpp:
        (WebCore::defaultGUIFont): Removed Document* arg.
        (WebCore::RenderThemeChromiumLinux::systemFont): Ditto.
        * rendering/RenderThemeChromiumLinux.h: Ditto.
        * rendering/RenderThemeChromiumMac.h: Ditto.
        * rendering/RenderThemeChromiumMac.mm: Ditto.
        (WebCore::RenderThemeChromiumMac::systemFont): Ditto.
        * rendering/RenderThemeChromiumWin.cpp:
        (WebCore::defaultGUIFont): Ditto.
        (WebCore::RenderThemeChromiumWin::systemFont): Ditto.
        * rendering/RenderThemeChromiumWin.h: Ditto.

2009-04-06  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Darin Adler.
        
        Fixed https://bugs.webkit.org/show_bug.cgi?id=21260
        Unbounded memory growth when churning elements with anonymous event handler functions

        The problem was that a protected event listener's scope chain would end
        up with a reference to the Node protecting it, causing a cycle. The
        solution is to stop protecting event listeners and rely on marking instead.

        This patch converts most Node event listeners to use marking instead of
        GC protection.

        * bindings/js/JSDOMBinding.cpp:
        (WebCore::isObservableThroughDOM):
        (WebCore::markDOMNodesForDocument): Refactored the test for whether a Node
        needs marking, and added a case for marking the node in order to mark its
        event listeners.

        * bindings/js/JSNodeCustom.cpp:
        (WebCore::markEventListeners):
        (WebCore::JSNode::addEventListener):
        (WebCore::JSNode::removeEventListener):
        (WebCore::JSNode::mark): Added code to mark a Node's event listeners when
        marking the Node. Changed code using protected event listeners to use event
        listeners.

        * dom/Node.idl: Changed code using protected event listeners to use event
        listeners.

2009-04-06  Sam Weinig  <sam@webkit.org>

        Reviewed by Darin Adler.

        Remove unchecked bool return values for some dispatch event functions.

        * dom/Node.cpp:
        (WebCore::Node::dispatchSubtreeModifiedEvent):
        (WebCore::Node::dispatchUIEvent):
        (WebCore::Node::dispatchWebKitAnimationEvent):
        (WebCore::Node::dispatchWebKitTransitionEvent):
        (WebCore::Node::dispatchProgressEvent):
        * dom/Node.h:

2009-04-06  Darin Fisher  <darin@chromium.org>

        Reviewed by Dimitri Glazkov.

        https://bugs.webkit.org/show_bug.cgi?id=25058
        Fix chromium build bustage caused by r42216

        * bindings/scripts/CodeGeneratorJS.pm:
        * page/DOMWindow.idl:

2009-04-06  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Rubber-stamped by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=20575
        No localization in WebKitGtk

        * platform/gtk/FileChooserGtk.cpp: Remove usage of glib/gi18n.h,
        since there are not translatable strings.
        * platform/gtk/LocalizedStringsGtk.cpp: Use the glib i18n header
        that is specific for libraries.

2009-04-06  Mike Belshe  <mike@belshe.com>

        Reviewed by Dimitri Glazkov.

        https://bugs.webkit.org/show_bug.cgi?id=24978
        Use custom implementations of a few Node methods so that
        we don't over-aggressively create JS wrappers here.

        * bindings/v8/custom/V8NodeCustom.cpp: Added custom implementations.
        * dom/Node.idl: Removed JSC-specifier, making impl custom for V8 as well.

2009-04-06  Dave Moore  <davemoore@google.com>

        Reviewed by Dimitri Glazkov.

        https://bugs.webkit.org/show_bug.cgi?id=25031
        Make the V8 element collections check for named properties *before*
        checking if there are any elements with the same name. Otherwise
        it is both incorrect and slow.

        Test: fast/dom/HTMLSelectElement/length-not-overridden.html

        Both of these interceptors were attempting to find an element in the
        collection that had a name or id of the property name before checking
        for a JS property with that name.
        * bindings/v8/V8Collection.h:
        (WebCore::collectionNamedPropertyGetter):
        (WebCore::nodeCollectionNamedPropertyGetter):

2009-04-06  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Darin Adler

        https://bugs.webkit.org/show_bug.cgi?id=25052
        
        Pull the call to updateGraphicsLayerGeometry() out of updateGraphicsLayers(),
        because we need to call it at the end of rebuildCompositingLayerTree() once
        we've determined which descendant layers are composited, otherwise
        calculateCompositedBounds() can give the wrong answer.
        
        Now that updateLayerCompositingState() doesn't end up calling updateGraphicsLayerGeometry(),
        call that explicitly from styleChanged(), if we know a layer update is not pending,
        and similarly from updateAfterLayout().

        Test: compositing/overflow/overflow-positioning.html

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::styleChanged):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateAfterLayout):
        (WebCore::RenderLayerBacking::updateGraphicsLayers):
        (WebCore::RenderLayerBacking::updateGraphicsLayerGeometry):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::rebuildCompositingLayerTree):

2009-04-06  Mike Belshe  <mike@belshe.com>

        Reviewed by Alexey Proskuryakov.

        Add accessors to AtomicString which take String/const char* arguments
        so that we don't accidentally thrash the AtomicString table.

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

        * platform/text/AtomicString.h:

2009-04-03  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Simon Hausmann.

        Make col and row work in WebCore/manual-tests/cursor.html. The issue
        was spotted in the WebKit inspector.

        * platform/gtk/CursorGtk.cpp:
        (WebCore::columnResizeCursor):
        (WebCore::rowResizeCursor):

2009-04-06  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Don't show and hide the platformPluginWidget, as it's our QWebView

        * plugins/mac/PluginViewMac.cpp:
        (WebCore::PluginView::show):
        (WebCore::PluginView::hide):
        (WebCore::PluginView::setParentVisible):

2009-04-06  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Tor Arne Vestbø.

        Add new files to the Qt build.
        Export helper function from the Qt JSC binding, needed in WebKit/qt.

        * WebCore.pro: Add new files.
        * bridge/qt/qt_runtime.h: Declare convertQVariantToValue.

2009-04-06  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Tor Arne Vestbø.

        Changed ScriptFunctionCall's last argument from a const char* as the function name to a String.

        Internally the function name is stored as a WebCore::String and the Qt port wants to use this
        constructor programmatically where the function name is also a WebCore::String.

        * bindings/js/ScriptFunctionCall.cpp:
        (WebCore::ScriptFunctionCall::ScriptFunctionCall):
        * bindings/js/ScriptFunctionCall.h:

2009-04-06  Mike Belshe <mike@belshe.com>

        Reviewed by Eric Seidel.

        HTMLCanvasElement crash when ImageBuffer creation fails.
        https://bugs.webkit.org/show_bug.cgi?id=23212

        Check for NULL before using the ImageBuffer as we might
        be low on memory and creation may have failed.

        Test case creation blocked by:
        https://bugs.webkit.org/show_bug.cgi?id=25055

        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::createImageBuffer):

2009-04-05  Geoffrey Garen  <ggaren@apple.com>

        [Originally] Reviewed by Sam Weinig.

        Rolled back in r42214 with crashes fixed.

        [Removed irrelevant ExecState* parameter from event handler registration code.]
        
        [No change in behavior.]

        * bindings/js/JSDOMApplicationCacheCustom.cpp:
        (WebCore::JSDOMApplicationCache::addEventListener):
        (WebCore::JSDOMApplicationCache::removeEventListener):
        * bindings/js/JSDOMGlobalObject.cpp:
        (WebCore::JSDOMGlobalObject::findOrCreateJSProtectedEventListener):
        (WebCore::JSDOMGlobalObject::findJSEventListener):
        (WebCore::JSDOMGlobalObject::findOrCreateJSEventListener):
        * bindings/js/JSDOMGlobalObject.h:
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::addEventListener):
        * bindings/js/JSMessagePortCustom.cpp:
        (WebCore::JSMessagePort::addEventListener):
        (WebCore::JSMessagePort::removeEventListener):
        * bindings/js/JSNodeCustom.cpp:
        (WebCore::JSNode::addEventListener):
        * bindings/js/JSSVGElementInstanceCustom.cpp:
        (WebCore::JSSVGElementInstance::addEventListener):
        * bindings/js/JSWorkerContextCustom.cpp:
        (WebCore::JSWorkerContext::addEventListener):
        (WebCore::JSWorkerContext::removeEventListener):
        * bindings/js/JSWorkerCustom.cpp:
        (WebCore::JSWorker::addEventListener):
        (WebCore::JSWorker::removeEventListener):
        * bindings/js/JSXMLHttpRequestCustom.cpp:
        (WebCore::JSXMLHttpRequest::addEventListener):
        (WebCore::JSXMLHttpRequest::removeEventListener):
        * bindings/js/JSXMLHttpRequestUploadCustom.cpp:
        (WebCore::JSXMLHttpRequestUpload::addEventListener):
        (WebCore::JSXMLHttpRequestUpload::removeEventListener):
        * bindings/scripts/CodeGeneratorJS.pm:

2009-04-05  Erik L. Bunce  <elbunce@xendom.com>

        Reviewed by Simon Hausmann.

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

        Fix an assert failure when dropping an 'empty' text/uri-list on a QWebView. 

        * platform/qt/DragDataQt.cpp:
        (WebCore::DragData::asURL):

2009-04-05  Simon Hausmann  <hausmann@webkit.org>

        Fix the Qt build.

        * bridge/qt/qt_runtime.h:
        (JSC::Bindings::QtRuntimeMethod::createPrototype): Take the JSGlobalObject
        as second argument.

2009-04-04  Kevin Ollivier  <kevino@theolliviers.com>

        Build fixes for wxMac/Tiger.

        * platform/wx/wxcode/mac/carbon/fontprops.cpp:
        (wxFontProperties::wxFontProperties):
        * rendering/break_lines.cpp:
        (WebCore::nextBreakablePosition):
        * webcore-wx.bkl:

2009-04-04  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Cameron Zwarich

        https://bugs.webkit.org/show_bug.cgi?id=24648
        
        Ensure that mapPoint(const IntPoint&) calls the FloatPoint
        version to avoid infinite recursion.
        
        No test because mapPoint(const IntPoint&) isn't ever called
        on Mac, so I can't reproduce.
        
        * platform/graphics/transforms/TransformationMatrix.h:
        (WebCore::TransformationMatrix::mapPoint):

2009-04-04  Dan Bernstein  <mitz@apple.com>

        Reviewed by Mark Rowe.

        - fix <rdar://problem/6757862> REGRESSION: Cannot use the mouse to place
          the insertion point inside a Thai character

        Test: fast/text/international/thai-offsetForPosition-inside-character.html

        * platform/graphics/mac/CoreTextController.cpp:
        (WebCore::CoreTextController::offsetForPosition): Changed to use
        cursorMovementIterator instead of characterBreakIterator, allowing this
        function to return a valid cursor position even if it is not at
        a character boundary.

2009-04-04  Dan Bernstein  <mitz@apple.com>

        Reviewed by Mark Rowe.

        - fix an assertion failure when clicking at the beginning of a
          glyph cluster at the beginning of a text run

        Test: fast/text/offsetForPosition-cluster-at-zero.html

        * platform/graphics/mac/CoreTextController.cpp:
        (WebCore::CoreTextController::offsetForPosition): Corrected the bound
        check on firstGlyphBeforeCluster, letting it be 0 or -1, but not less
        than -1.

2009-04-03  Brian Weinstein  <bweinstein@gmail.com>

        Allows 16 HTML/CSS standard colors to be shown as swatch backgrounds
        when the names are given.

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

        Reviewed by Timothy Hatcher.

        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylePropertyTreeElement.prototype.updateTitle):

2009-04-03  Sam Weinig  <sam@webkit.org>

        Reviewed by Darin Adler.

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

        Don't update the document pointer for all inactive windows on navigations.
        This change causes us to differ slightly from Firefox when accessing the
        document from within a closure tied to a navigated context, but as all
        browsers differ on this edge case, I don't foresee compatibility issues.

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

        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::~JSDOMWindowBase):
        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::clearWindowShell):
        (WebCore::ScriptController::initScript):
        (WebCore::ScriptController::updateDocument):
        * bindings/js/ScriptController.h:

2009-04-03  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Simon Fraser.

        Test: transitions/bad-transition-shorthand-crash.html

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

        We were starting transitions with 0 duration and delay, which is 
        useless. With accelerated compositing on, this went through a code
        path that tried to use m_toStyle, which never got set because the 
        transitions was short circuited before it had a chance to. So I
        both protect against using that null pointer and avoid starting
        the transition in the first place.

        * page/animation/CompositeAnimation.cpp:
        (WebCore::CompositeAnimationPrivate::updateTransitions):
        * page/animation/ImplicitAnimation.cpp:
        (WebCore::ImplicitAnimation::blendPropertyValueInStyle):

2009-04-03  Timothy Hatcher  <timothy@apple.com>

        Fixes a bug where you could not type any more in the Web Inspector's
        search field after the first match is selected in the Resources panel.

        https://bugs.webkit.org/show_bug.cgi?id=23982
        rdar://problem/6592367

        Reviewed by Darin Adler.

        * inspector/front-end/SourceView.js:
        (WebInspector.SourceView.prototype._jumpToSearchResult): Use the
        window object of the frame to set the selection, not the main window.

2009-04-03  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=22081
        <rdar://problem/6346030>
        Don't allow overriding the return value of window.location.

        Tests: fast/dom/Window/Location/location-override-toString-on-proto-using-defineGetter.html
               fast/dom/Window/Location/location-override-toString-on-proto-using-with.html
               fast/dom/Window/Location/location-override-toString-on-proto.html
               fast/dom/Window/Location/location-override-toString-using-defineGetter.html
               fast/dom/Window/Location/location-override-toString-using-with.html
               fast/dom/Window/Location/location-override-toString.html
               fast/dom/Window/Location/location-override-valueOf-on-proto-using-defineGetter.html
               fast/dom/Window/Location/location-override-valueOf-on-proto-using-with.html
               fast/dom/Window/Location/location-override-valueOf-on-proto.html
               fast/dom/Window/Location/location-override-valueOf-using-defineGetter.html
               fast/dom/Window/Location/location-override-valueOf-using-with.html
               fast/dom/Window/Location/location-override-valueOf.html
               fast/dom/Window/Location/window-override-location-using-defineGetter.html
               fast/dom/Window/Location/window-override-window-using-defineGetter.html
               fast/dom/Window/Location/window-shadow-location-using-js-object-with-toString.html
               fast/dom/Window/Location/window-shadow-location-using-string.html
               fast/dom/Window/Location/window-shadow-window-using-js-object-with-location-field.html

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::defineGetter):
        * bindings/js/JSLocationCustom.cpp:
        (WebCore::JSLocation::customPut):
        (WebCore::JSLocation::defineGetter):
        (WebCore::JSLocationPrototype::customPut):
        (WebCore::JSLocationPrototype::defineGetter):
        * bindings/scripts/CodeGeneratorJS.pm:
        * page/Location.idl:

2009-04-03  Geoffrey Garen  <ggaren@apple.com>

        Rolled out r42214 since it seems to have caused crashes on the buildbot.

        * bindings/js/JSDOMApplicationCacheCustom.cpp:
        (WebCore::JSDOMApplicationCache::addEventListener):
        (WebCore::JSDOMApplicationCache::removeEventListener):
        * bindings/js/JSDOMGlobalObject.cpp:
        (WebCore::JSDOMGlobalObject::findOrCreateJSProtectedEventListener):
        (WebCore::JSDOMGlobalObject::findJSEventListener):
        (WebCore::JSDOMGlobalObject::findOrCreateJSEventListener):
        * bindings/js/JSDOMGlobalObject.h:
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::addEventListener):
        * bindings/js/JSMessagePortCustom.cpp:
        (WebCore::JSMessagePort::addEventListener):
        (WebCore::JSMessagePort::removeEventListener):
        * bindings/js/JSNodeCustom.cpp:
        (WebCore::JSNode::addEventListener):
        (WebCore::JSNode::removeEventListener):
        * bindings/js/JSSVGElementInstanceCustom.cpp:
        (WebCore::JSSVGElementInstance::addEventListener):
        * bindings/js/JSWorkerContextCustom.cpp:
        (WebCore::JSWorkerContext::addEventListener):
        (WebCore::JSWorkerContext::removeEventListener):
        * bindings/js/JSWorkerCustom.cpp:
        (WebCore::JSWorker::addEventListener):
        (WebCore::JSWorker::removeEventListener):
        * bindings/js/JSXMLHttpRequestCustom.cpp:
        (WebCore::JSXMLHttpRequest::addEventListener):
        (WebCore::JSXMLHttpRequest::removeEventListener):
        * bindings/js/JSXMLHttpRequestUploadCustom.cpp:
        (WebCore::JSXMLHttpRequestUpload::addEventListener):
        (WebCore::JSXMLHttpRequestUpload::removeEventListener):
        * bindings/scripts/CodeGeneratorJS.pm:

2009-04-03  Sam Weinig  <sam@webkit.org>

        Reviewed by Oliver Hunt.

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

        - Use the window object the Location and History objects are directly associated with
          instead of the lexical global object to pick the object prototype to serve as the
          base of the their respective prototype chains.
        - Re-factor as necessary to allow passing the correct global object to the createPrototype
          functions.

        Tests: http/tests/security/cross-frame-access-history-prototype.html
               http/tests/security/cross-frame-access-location-prototype.html

        * bindings/js/JSAudioConstructor.cpp:
        (WebCore::JSAudioConstructor::JSAudioConstructor):
        * bindings/js/JSDOMBinding.cpp:
        (WebCore::getCachedDOMStructure):
        (WebCore::cacheDOMStructure):
        * bindings/js/JSDOMBinding.h:
        (WebCore::getDOMStructure):
        (WebCore::getDOMPrototype):
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::history):
        (WebCore::JSDOMWindow::location):
        * bindings/js/JSDocumentCustom.cpp:
        (WebCore::JSDocument::location):
        * bindings/js/JSImageConstructor.cpp:
        (WebCore::JSImageConstructor::JSImageConstructor):
        * bindings/js/JSMessageChannelConstructor.cpp:
        (WebCore::JSMessageChannelConstructor::JSMessageChannelConstructor):
        * bindings/js/JSNamedNodesCollection.h:
        (WebCore::JSNamedNodesCollection::createPrototype):
        * bindings/js/JSOptionConstructor.cpp:
        (WebCore::JSOptionConstructor::JSOptionConstructor):
        * bindings/js/JSRGBColor.h:
        (WebCore::JSRGBColor::createPrototype):
        * bindings/js/JSWebKitCSSMatrixConstructor.cpp:
        (WebCore::JSWebKitCSSMatrixConstructor::JSWebKitCSSMatrixConstructor):
        * bindings/js/JSWebKitPointConstructor.cpp:
        (WebCore::JSWebKitPointConstructor::JSWebKitPointConstructor):
        * bindings/js/JSWorkerConstructor.cpp:
        (WebCore::JSWorkerConstructor::JSWorkerConstructor):
        * bindings/js/JSXMLHttpRequestConstructor.cpp:
        (WebCore::JSXMLHttpRequestConstructor::JSXMLHttpRequestConstructor):
        * bindings/js/JSXSLTProcessorConstructor.cpp:
        (WebCore::JSXSLTProcessorConstructor::JSXSLTProcessorConstructor):
        * bindings/scripts/CodeGeneratorJS.pm:
        * bridge/objc/objc_runtime.h:
        (JSC::Bindings::ObjcFallbackObjectImp::createPrototype):
        * bridge/runtime_array.h:
        (JSC::RuntimeArray::createPrototype):
        * bridge/runtime_method.h:
        (JSC::RuntimeMethod::createPrototype):
        * bridge/runtime_object.h:
        (JSC::RuntimeObjectImp::createPrototype):
        * page/DOMWindow.idl:

2009-04-03  Jian Li  <jianli@chromium.org>

        Reviewed by Darin Fisher.

        https://bugs.webkit.org/show_bug.cgi?id=25009
        Upstream changes to WorkerContextExecutionProxy for V8 bindings in order to use V8EventListenerList as container.

        * bindings/v8/WorkerContextExecutionProxy.cpp:
        (WebCore::WorkerContextExecutionProxy::WorkerContextExecutionProxy):
        (WebCore::WorkerContextExecutionProxy::dispose):
        (WebCore::WorkerContextExecutionProxy::FindOrCreateEventListener):
        (WebCore::WorkerContextExecutionProxy::RemoveEventListener):
        * bindings/v8/WorkerContextExecutionProxy.h:

2009-04-03  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig.

        Removed irrelevant ExecState* parameter from event handler registration code.
        
        No change in behavior.

        * bindings/js/JSDOMApplicationCacheCustom.cpp:
        (WebCore::JSDOMApplicationCache::addEventListener):
        (WebCore::JSDOMApplicationCache::removeEventListener):
        * bindings/js/JSDOMGlobalObject.cpp:
        (WebCore::JSDOMGlobalObject::findOrCreateJSProtectedEventListener):
        (WebCore::JSDOMGlobalObject::findJSEventListener):
        (WebCore::JSDOMGlobalObject::findOrCreateJSEventListener):
        * bindings/js/JSDOMGlobalObject.h:
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::addEventListener):
        * bindings/js/JSMessagePortCustom.cpp:
        (WebCore::JSMessagePort::addEventListener):
        (WebCore::JSMessagePort::removeEventListener):
        * bindings/js/JSNodeCustom.cpp:
        (WebCore::JSNode::addEventListener):
        (WebCore::JSNode::removeEventListener):
        * bindings/js/JSSVGElementInstanceCustom.cpp:
        (WebCore::JSSVGElementInstance::addEventListener):
        * bindings/js/JSWorkerContextCustom.cpp:
        (WebCore::JSWorkerContext::addEventListener):
        (WebCore::JSWorkerContext::removeEventListener):
        * bindings/js/JSWorkerCustom.cpp:
        (WebCore::JSWorker::addEventListener):
        (WebCore::JSWorker::removeEventListener):
        * bindings/js/JSXMLHttpRequestCustom.cpp:
        (WebCore::JSXMLHttpRequest::addEventListener):
        (WebCore::JSXMLHttpRequest::removeEventListener):
        * bindings/js/JSXMLHttpRequestUploadCustom.cpp:
        (WebCore::JSXMLHttpRequestUpload::addEventListener):
        (WebCore::JSXMLHttpRequestUpload::removeEventListener):
        * bindings/scripts/CodeGeneratorJS.pm:

2009-04-03  Dan Bernstein  <mitz@apple.com>

        Reviewed by Simon Fraser.

        - fix <rdar://problem/6634771> Under full-page zoom, cannot scroll
          MobileMe contact list

        Test: fast/css/zoom-in-length-round-trip.html

        * dom/Element.cpp:
        (WebCore::adjustForLocalZoom): For zoom factors greater than 1, ensure
        that the returned value is equal to the original unscaled value.
        (WebCore::adjustForAbsoluteZoom): Ditto.

2009-04-03  Chris Marrin  <cmarrin@apple.com>

        Reviewed by David Hyatt.

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

        This fix essentially does a -viewWillDraw call for layout. It adds 
        a CFRunLoopObserver which performs layout just before drawing on the 
        Mac platform. This makes sure layout is complete before rendering and 
        avoids a flash.

        * page/ChromeClient.h:
        (WebCore::ChromeClient::scheduleViewUpdate):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::setCompositingLayersNeedUpdate):
        (WebCore::RenderLayerCompositor::scheduleViewUpdate):
        * rendering/RenderLayerCompositor.h:

2009-04-02  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein

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

        Optimize mapPoint(), mapRect() and mapQuad() for identity matrix and translations.
        
        * platform/graphics/transforms/TransformationMatrix.cpp:
        (WebCore::TransformationMatrix::mapPoint):
        (WebCore::TransformationMatrix::mapRect):
        (WebCore::TransformationMatrix::mapQuad):
        * platform/graphics/transforms/TransformationMatrix.h:
        (WebCore::TransformationMatrix::mapPoint):

2009-04-02  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein

        https://bugs.webkit.org/show_bug.cgi?id=25018
        
        Add containsPoint() and containsQuad() methods to FloatQuad.

        * platform/graphics/FloatQuad.cpp:
        (WebCore::dot):
        (WebCore::isPointInTriangle):
        (WebCore::FloatQuad::containsPoint):
        (WebCore::FloatQuad::containsQuad):
        * platform/graphics/FloatQuad.h:

2009-04-03  Kevin Decker  <kdecker@apple.com>

        Reviewed by Darin.

        *  loader/ProgressTracker.cpp: Included DocumentLoader.h
        (WebCore::ProgressTracker::incrementProgress): Limit the 50%-clamp rule to 
        documents that use WebCore's layout system.

2009-04-03  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Simon Fraser.

        https://bugs.webkit.org/show_bug.cgi?id=25029
        <rdar://problem/6336092> REGRESSION: movie does not resize correctly

        Test: media/video-size-intrinsic-scale.html

        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivate::naturalSize): Use QTMovieCurrentSizeAttribute instead 
        of QTMovieNaturalSizeAttribute so we return the correct size for movies saved
        with a non-default matrix.
        (WebCore::MediaPlayerPrivate::setSize): Don't resize the QTMovieView
        because [QTMovieView setFrame] also resizes the movie itself, and as
        the renderer calls setSize immediately when a movie reports a size change
        (QTMovieSizeDidChangeNotification) we can get into a feedback loop
        observing the size change and resetting the size, and this can cause
        QuickTime to miss correctly setting a movie's size when the media size
        changes after opening (as happens with an rtsp movie once the server sends
        the track sizes). Instead, remember the size passed to paint() and 
        resize the view when it changes.
        (WebCore::MediaPlayerPrivate::paint): Resize the view when passed a new size.

        * platform/graphics/win/QTMovieWin.cpp:
        (QTMovieWin::getNaturalSize): Use GetMovieBox instead of GetMovieNaturalBoundsRect
        so we return the correct size for movies saved with non-default matrix.

2009-04-03  Darin Fisher  <darin@chromium.org>

        Reviewed by Darin Adler.

        Restore FrameLoader::policyDocumentLoader to fix the Chromium build.
        https://bugs.webkit.org/show_bug.cgi?id=25028

        * loader/FrameLoader.h:
        (WebCore::FrameLoader::policyDocumentLoader):

2009-04-02  Michael Nordman  <michaeln@google.com>

        Reviewed by Alexey Proskuryakov.

        Use long long, not int64, when working in webcore (sorry).
        https://bugs.webkit.org/show_bug.cgi?id=25011

        No change in functionality, so no tests.

        * platform/network/chromium/ResourceResponse.h:
        (WebCore::ResourceResponse::getAppCacheID):
        (WebCore::ResourceResponse::setAppCacheID):

2009-04-03  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Holger Freyther.

        Remove pre-processor checks for GTK+ >= 2.10, since we now require
        at least that version.

        * platform/graphics/gtk/FontPlatformDataGtk.cpp:
        (WebCore::FontPlatformData::FontPlatformData):
        * platform/gtk/ContextMenuItemGtk.cpp:
        (WebCore::gtkStockIDFromContextMenuAction):
        * platform/gtk/KeyEventGtk.cpp:
        (WebCore::PlatformKeyboardEvent::PlatformKeyboardEvent):
        * platform/gtk/LocalizedStringsGtk.cpp:
        (WebCore::contextMenuItemTagSelectAll):
        * platform/gtk/MouseEventGtk.cpp:
        (WebCore::PlatformMouseEvent::PlatformMouseEvent):
        * platform/gtk/PasteboardGtk.cpp:
        (WebCore::Pasteboard::writeSelection):
        (WebCore::Pasteboard::documentFragment):
        * platform/gtk/WheelEventGtk.cpp:
        (WebCore::PlatformWheelEvent::PlatformWheelEvent):

2009-04-02  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein
        
        https://bugs.webkit.org/show_bug.cgi?id=25021
        
        Fix repainting an element with a reflection and transform after layout.
        Telling the reflection to repaint directly is wrong, because, with
        LayoutState enabled, it only takes the reflection's transform into account,
        not that of the element. We can fix this, and keep the benefits of LayoutState,
        by computing the reflected repaint rect, and repainting that using the original
        renderer.

        Test: fast/repaint/reflection-repaint-test.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::layoutBlock):

2009-04-02  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein
        
        https://bugs.webkit.org/show_bug.cgi?id=23307
        
        When repainting during layout (when LayoutState is enabled), we need
        to apply the transform to the dirty rect, before applying x(), y() and
        the offset storted in the LayoutState.
        
        Also bypass LayoutState in mapLocalToContainer() if we have a repaintContainer,
        since LayoutState is always root-relative.

        Test: fast/repaint/transform-layout-repaint.html

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::mapLocalToContainer):
        (WebCore::RenderBox::computeRectForRepaint):

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

        Fix the Mac build after r42191.

        * WebCore.base.exp:

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

        Fix Windows build after r42190.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::keyEvent):  Update to use the new name of the constant.

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

        Reviewed by Brady Eidson.

        <rdar://problem/6625840> Previous Page isn't loaded after hitting back button at http://www.breakingnews.ie/

        Test: http/tests/navigation/onload-navigation-iframe-2.html

        * html/HTMLFrameElement.cpp:
        (WebCore::HTMLFrameElement::HTMLFrameElement): Removed unneeded createdByParser flag.
        * html/HTMLFrameElement.h: Ditto.
        * html/HTMLFrameElementBase.cpp:
        (WebCore::HTMLFrameElementBase::HTMLFrameElementBase): Ditto.
        * html/HTMLFrameElementBase.h: Ditto.
        * html/HTMLFrameOwnerElement.cpp:
        (WebCore::HTMLFrameOwnerElement::HTMLFrameOwnerElement): Ditto.
        * html/HTMLFrameOwnerElement.h: Ditto.
        * html/HTMLIFrameElement.cpp:
        (WebCore::HTMLIFrameElement::HTMLIFrameElement): Ditto.
        * html/HTMLIFrameElement.h: Ditto.
        * html/HTMLPlugInElement.cpp:
        (WebCore::HTMLPlugInElement::HTMLPlugInElement): Ditto.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::submitForm): Removed unneeded check of the createdByParser flag.
        The original change that introduced this, http://trac.webkit.org/changeset/25410, does
        not make it clear why this check was needed. And it seems it is not needed.

2009-04-02  Adele Peterson  <adele@apple.com>

        Reviewed by Darin Adler.

        Add a way to get a list of focusable nodes.

        * dom/Document.cpp:
        (WebCore::Document::setFocusedNode):
        (WebCore::Document::getFocusableNodes):
        * dom/Document.h:

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

        Reviewed by Sam Weinig.

        <rdar://problem/6654255> crash due to null FrameView in EventHandler

        Lots of code was added to EventHandler that used view() and page() without
        null checking, but both of those can become null due to the frame lifetime.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleMousePressEventSingleClick):
        (WebCore::EventHandler::eventMayStartDrag):
        (WebCore::EventHandler::handleAutoscroll):
        (WebCore::EventHandler::autoscrollTimerFired):
        (WebCore::EventHandler::setPanScrollCursor):
        (WebCore::EventHandler::allowDHTMLDrag):
        (WebCore::EventHandler::hitTestResultAtPoint):
        (WebCore::EventHandler::stopAutoscrollTimer):
        (WebCore::EventHandler::selectCursor):
        (WebCore::EventHandler::handleMousePressEvent):
        (WebCore::EventHandler::handleMouseMoveEvent):
        (WebCore::EventHandler::dispatchDragEvent):
        (WebCore::EventHandler::prepareMouseEvent):
        (WebCore::EventHandler::dispatchMouseEvent):
        (WebCore::EventHandler::handleWheelEvent):
        (WebCore::EventHandler::hoverTimerFired):
        (WebCore::EventHandler::keyEvent):
        (WebCore::EventHandler::dragHysteresisExceeded):
        (WebCore::EventHandler::shouldDragAutoNode):
        (WebCore::EventHandler::handleDrag):
        (WebCore::EventHandler::handleTextInputEvent):
        (WebCore::EventHandler::addPendingFrameUnloadEventCount):
        (WebCore::EventHandler::removePendingFrameUnloadEventCount):
        (WebCore::EventHandler::clearPendingFrameUnloadEventCount):
        (WebCore::EventHandler::addPendingFrameBeforeUnloadEventCount):
        (WebCore::EventHandler::removePendingFrameBeforeUnloadEventCount):
        (WebCore::EventHandler::clearPendingFrameBeforeUnloadEventCount):
        Added null checks for view() and page(). Made minor code cleanups.

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

        Reviewed by Oliver Hunt.

        Fix regression in <object> layout test.  Make sure that even though a 404 image loads, that <object>
        still considers it an error for the purposes of firing onerror.

        * html/HTMLImageLoader.cpp:
        (WebCore::HTMLImageLoader::dispatchLoadEvent):

2009-04-02  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Timothy Hatcher.

        https://bugs.webkit.org/show_bug.cgi?id=25010
        Refactor InspectorController to replace all JS function invocations with
        ScriptFunctionCall.

        * bindings/js/ScriptFunctionCall.cpp:
        (WebCore::ScriptFunctionCall::appendArgument): Added int, UString,
            and JSValuePtr methods.
        (WebCore::ScriptFunctionCall::call): Added simplified, exception-eating
            method.
        * bindings/js/ScriptFunctionCall.h: Decls for above.
        * bindings/js/ScriptObjectQuarantine.cpp: Added helper for Node and DOMWindow.
        (WebCore::getQuarantinedScriptObject):
        * bindings/js/ScriptObjectQuarantine.h: Decls for above.
        * inspector/InspectorController.cpp:
        (WebCore::callSimpleFunction): Made into a static.
        (WebCore::InspectorController::focusNode): Refactored to use ScriptFunctionCall.
        (WebCore::InspectorController::toggleRecordButton): Ditto.
        (WebCore::InspectorController::startGroup): Ditto.
        (WebCore::InspectorController::setAttachedWindow): Ditto.
        (WebCore::InspectorController::inspectedWindowScriptObjectCleared): Ditto.
        (WebCore::InspectorController::addScriptProfile): Ditto.
        (WebCore::InspectorController::didParseSource): Ditto.
        (WebCore::InspectorController::failedToParseSource): Ditto.
        (WebCore::InspectorController::didPause): Ditto.
        * inspector/InspectorController.h: Removed callFunction and callSimpleFunction
            decls.

2009-04-02  Jian Li  <jianli@chromium.org>

        Reviewed by Darin Fisher.

        Upstream changes to V8WorkerContextEventListener for V8 bindings.
        https://bugs.webkit.org/show_bug.cgi?id=25007

        * bindings/v8/V8ObjectEventListener.h:
        * bindings/v8/V8WorkerContextEventListener.cpp:

2009-04-02  Jian Li  <jianli@chromium.org>

        Reviewed by Darin Fisher.

        Upstream V8WorkerContextObjectEventListener for V8 bindings.
        https://bugs.webkit.org/show_bug.cgi?id=25005

        * bindings/v8/V8WorkerContextObjectEventListener.cpp: Added.
        * bindings/v8/V8WorkerContextObjectEventListener.h: Added.

2009-04-02  Jian Li  <jianli@chromium.org>

        Reviewed by Darin Fisher.

        Upstream V8EventListenerList for V8 bindings.
        https://bugs.webkit.org/show_bug.cgi?id=25004

        * bindings/v8/V8EventListenerList.cpp: Added.
        * bindings/v8/V8EventListenerList.h: Added.

2009-04-02  Michael Nordman  <michaeln@google.com>

        Reviewed by Darin Fisher.

        Chromium's ResourceRequest and ResourceResponse structs need some new data members.
        https://bugs.webkit.org/show_bug.cgi?id=24897

        These fields are needed to facilitate Chromium's implementation of the HTML5
        ApplicationCache feature. We need to know what frame (or context) is doing the
        requesting, and from what cache the resulting resource was retrieved.

        No change in functionality, so no tests.

        * platform/network/chromium/ResourceRequest.h:
        (WebCore::ResourceRequest::ResourceRequest):
        (WebCore::ResourceRequest::appCacheContextID):
        (WebCore::ResourceRequest::setAppCacheContextID):
        * platform/network/chromium/ResourceResponse.h:
        (WebCore::ResourceResponse::ResourceResponse):
        (WebCore::ResourceResponse::getAppCacheID):
        (WebCore::ResourceResponse::setAppCacheID):

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

        Reviewed by Darin Adler

        Fix for https://bugs.webkit.org/show_bug.cgi?id=24643.
        
        Make sure images just ignore HTTP error codes and keep loading anyway.  Only <object> checks http error codes and falls back.  Everyone
        else just ignores it and displays the image anyway.

        Added http/tests/misc/image-error.html

        * html/HTMLImageLoader.cpp:
        (WebCore::HTMLImageLoader::notifyFinished):
        * loader/CachedImage.cpp:
        (WebCore::CachedImage::CachedImage):
        * loader/CachedImage.h:
        (WebCore::CachedImage::httpStatusCodeError):
        (WebCore::CachedImage::httpStatusCodeErrorOccurred):
        * loader/CachedResource.h:
        (WebCore::CachedResource::httpStatusCodeError):
        * loader/loader.cpp:
        (WebCore::Loader::Host::didReceiveData):

2009-04-02  Jian Li  <jianli@chromium.org>

        Reviewed by Dimitri Glazkov.

        Add XHR constructor in WorkerContext.idl for V8 bindings.
        https://bugs.webkit.org/show_bug.cgi?id=24962

        * workers/WorkerContext.idl:

2009-04-02  Ben Murdoch  <benm@google.com>

        Fix Bug 19743: Release build fails on 32-bit Windows

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

        Combines all the HTML element cpp files into one to help reduce the
        size of WebCore.lib so we can build in release mode on 32bit Windows.

        Reviewed by Adam Roben.

        * WebCore.vcproj/WebCore.vcproj: Excluded all the separate
        HTML*Element.cpp files from the build. Added HTMLElementsAllInOne.cpp
        to the build.
        * html/HTMLElementsAllInOne.cpp: Added.

2009-04-02  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Darin Adler

        https://bugs.webkit.org/show_bug.cgi?id=24999
        
        Optimize hit testing with transforms.

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::mapLocalToContainer):
        (WebCore::RenderBox::mapAbsoluteToLocalPoint):
        getTransformFromContainer() change to return the matrix by reference.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::update3DTransformedDescendantStatus):
        The method failed to set m_3DTransformedDescendantStatusDirty to false,
        so did the work every time.

        (WebCore::RenderLayer::createLocalTransformState):
        Only call the expensive getTransformFromContainer() if there is a transform,
        otherwise we just have a translation.

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::getTransformFromContainer):
        * rendering/RenderObject.h:
        Change transformFromContainer() to getTransformFromContainer(), and return
        the matrix by reference to reduce copying.
        New enum values for arguments for readability.

        * rendering/TransformState.cpp:
        (WebCore::TransformState::move):
        (WebCore::TransformState::applyTransform):
        (WebCore::HitTestingTransformState::translate):
        New method that adds a translation to the accumulated matrix, optionally
        without flattening. Cheaper than applyTransform().

        (WebCore::HitTestingTransformState::applyTransform):
        (WebCore::HitTestingTransformState::flatten):
        (WebCore::HitTestingTransformState::flattenWithTransform):
        Add flattenWithTransform(), which is a helper that allows us to
        avoid doing the inverse() twice.

        * rendering/TransformState.h:
        (WebCore::TransformState::):
        (WebCore::TransformState::move):
        (WebCore::HitTestingTransformState::):
        New method on HitTestingTransformState that adds a translation to the
        accumulated matrix, optionally without flattening. Cheaper than applyTransform().
        New enum values for arguments for readability.

2009-04-02  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein
        
        https://bugs.webkit.org/show_bug.cgi?id=24648
        
        Optimize common code paths in TransformationMatrix.

        * platform/graphics/transforms/TransformationMatrix.cpp:
        (WebCore::TransformationMatrix::translate):
        (WebCore::TransformationMatrix::translate3d):
        Optimize to avoid matrix copy.
        
        (WebCore::TransformationMatrix::isInvertible):
        Test for identity and translation matrices before computing
        the determinant.
        
        (WebCore::TransformationMatrix::inverse):
        Optimize for identity matrix and translations.
        
        * platform/graphics/transforms/TransformationMatrix.h:
        (WebCore::TransformationMatrix::isIdentityOrTranslation):
        Utility method.

2009-04-02  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Alexey Proskuryakov.

        https://bugs.webkit.org/show_bug.cgi?id=24930
        [Gtk] ISO files content is displayed inside the webview instead of being downloaded

        Also sniff content of types declared as text/plain. This is
        justified by the fact that it is common to have Apache HTTP
        servers configured to send text/plain as Content-Type by default.

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

2009-04-02  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Alexey Proskuryakov.

        Protect the handle when notifying the client that the response was
        received also in gotChunkCallback, or we crash in didReceiveData
        when the load is cancelled in didReceiveResponse.

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

2009-04-02  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Alexey Proskuryakov.

        https://bugs.webkit.org/show_bug.cgi?id=25001
        Crash when content type parameters have no value

        Handle the case where a Content-Type header parameter has no
        value (i.e. no = character), to work-around a bug in libsoup.

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

2009-04-02  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Simon Hausmann.

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

        Enable web workers in Qt.

        * WebCore.pro:

2009-04-01  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin Adler. Based on work of Julien Chaffraix.

        https://bugs.webkit.org/show_bug.cgi?id=22475
        REGRESSION: Async XMLHttpRequest never finishes on nonexistent files anymore

        https://bugs.webkit.org/show_bug.cgi?id=24886
        XHR requests opened when offline never return

        Tests: fast/xmlhttprequest/xmlhttprequest-nonexistent-file.html
               http/tests/xmlhttprequest/state-after-network-error.html

        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::callReadyStateChangeListener): Only dispatch load event if this
        wasn't an error.
        (WebCore::XMLHttpRequest::abort): Fixed formatting.
        (WebCore::XMLHttpRequest::genericError): Change state to DONE and dispatch readystatechange.
        The comment saying that this doesn't match Firefox was added in r33559 without explanation
        or tests, and I don't think that it's accurate. Also, Firefox and Safari 3 both change state
        to HEADERS_RECEIVED before DONE on error - this doesn't match the spec, and I doubt
        that any code depends on this, so I went with the spec here.

2009-04-01  Steve Falkenburg  <sfalken@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=24997
        Race conditions in icon database threading code
        
        m_syncThreadRunning set was mistakenly eliminated in r27717.
        This reintroduces it.

        Reviewed by Oliver Hunt.

        * loader/icon/IconDatabase.cpp:
        (WebCore::IconDatabase::open): Set m_syncThreadRunning.

2009-04-01  Antti Koivisto  <antti@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/6748609> Use ActiveDOMObject to suspend marquees
        
        Make marquees ActiveDOMObjects, get rid of the special suspension code.

        * html/HTMLMarqueeElement.cpp:
        (WebCore::HTMLMarqueeElement::HTMLMarqueeElement):
        (WebCore::HTMLMarqueeElement::canSuspend):
        (WebCore::HTMLMarqueeElement::suspend):
        (WebCore::HTMLMarqueeElement::resume):
        * html/HTMLMarqueeElement.h:
        * page/Frame.cpp:
        (WebCore::Frame::clearTimers):
        * rendering/RenderLayer.cpp:
        * rendering/RenderLayer.h:
        (WebCore::RenderLayer::marquee):

2009-04-01  Dean Jackson  <dino@apple.com>

        Reviewed by Darin Adler

        Make constant values static in previous commit, as suggested
        by Darin.

        * rendering/RenderVideo.cpp:

2009-04-01  Dean Jackson  <dino@apple.com>

        Reviewed by Simon Fraser

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

        Standalone media should have a smaller instrinsic
        height.

        * rendering/RenderVideo.cpp:
        (WebCore::RenderVideo::RenderVideo):

2009-04-01  Darin Adler  <darin@apple.com>

        Reviewed by Geoff Garen.

        Bug 22378: Crash submitting a form when parsing an XHTML document
        https://bugs.webkit.org/show_bug.cgi?id=22378
        rdar://problem/6388377

        Tests: fast/loader/submit-form-while-parsing-1.xhtml
               fast/loader/submit-form-while-parsing-2.html

        * WebCore.base.exp: Updated.

        * history/HistoryItem.cpp:
        (WebCore::HistoryItem::HistoryItem): Renamed m_subItems to m_children.
        Used uncheckedAppend because we reserveInitialCapacity.
        (WebCore::HistoryItem::addChildItem): Renamed m_subItems to m_children.
        Added an assertion that this is only used to add items that don't have
        duplicate frame names.
        (WebCore::HistoryItem::setChildItem): Added. Replaces an existing item
        if any, preserving the isTargetItem flag.
        (WebCore::HistoryItem::childItemWithTarget): Renamed from childItemWithName
        for consistency with the other functions here that all call the frame name the
        "target". Also updated for rename of m_subItems to m_children.
        (WebCore::HistoryItem::findTargetItem): Renamed from recurseToFindTargetItem.
        Removed unneeded size check.
        (WebCore::HistoryItem::targetItem): Changed to always return the top item
        if no item has the isTargetItem flag set. The old version would instead return
        0 in some cases, but return the top item if it had no children.
        (WebCore::HistoryItem::children): Renamed m_subItems to m_children.
        (WebCore::HistoryItem::hasChildren): Ditto.
        (WebCore::HistoryItem::showTreeWithIndent): Ditto.

        * history/HistoryItem.h: Name changes.

        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::submit): Create and pass a FormState instead of
        attaching "recorded form values" and "form about to be submitted" to the frame
        loader. Parameter work fine for this; there's no need to store state on the
        FrameLoader.

        * loader/FormState.cpp:
        (WebCore::FormState::FormState): Adopt a vector instead of copying a hash map.
        (WebCore::FormState::create): Ditto.
        * loader/FormState.h: Update to use a vector that we adopt instead of hash map
        that we copy for auto-fill text field values.

        * loader/FrameLoader.cpp:
        (WebCore::ScheduledRedirection::ScheduledRedirection): Added a new case for
        form submissions and turned the "wasDuringLoad" state into a separate boolean
        instead of using a special redirection type to track it.
        (WebCore::FrameLoader::createWindow): Updated for name and argument change of
        loadFrameRequest.
        (WebCore::FrameLoader::urlSelected): Ditto.
        (WebCore::FrameLoader::submitForm): Removed the "deferred form submission"
        machinery, replacing it with the "scheduled redirection" mechanism, shared
        with other kinds of redirection and navigation. Moved frame targeting here
        so we can schedule the redirection on the right frame. Moved the multiple
        form submission protection here. Moved the code to implement the rule that
        m_navigationDuringLoad was used for here too.
        (WebCore::FrameLoader::didOpenURL): Use the new wasDuringLoad flag instead
        of the locationChangeDuringLoad type to detect location change during a load.
        (WebCore::FrameLoader::executeScript): Removed call to now-obsolete function,
        submitFormAgain.
        (WebCore::FrameLoader::scheduleLocationChange): Moved the code to stop loading
        out of this function into scheduleRedirection, so it can be shared with the
        new scheduleFormSubmission function.
        (WebCore::FrameLoader::scheduleFormSubmission): Added. Almost the same as
        scheduleLocationChange, but with the arguments for a form submission.
        (WebCore::FrameLoader::scheduleRefresh): Updated for the change to the
        duringLoad flag.
        (WebCore::FrameLoader::isLocationChange): Added case for formSubmission
        and removed case for locationChangeDuringLoad.
        (WebCore::FrameLoader::redirectionTimerFired): Ditto. Also removed unneeded
        completeURL call and just use KURL constructor to match the other cases.
        (WebCore::FrameLoader::provisionalLoadStarted): Removed the code to set up
        the m_navigationDuringLoad, which is no longer needed. The new version of
        this is in the submitForm function and sets the lockHistory boolean.
        (WebCore::FrameLoader::scheduleRedirection): Moved the code to stop a load
        in here that used to be in scheduleLocationChange.
        (WebCore::FrameLoader::startRedirectionTimer): Added case for formSubmission
        and removed case for locationChangeDuringLoad.
        (WebCore::FrameLoader::stopRedirectionTimer): Ditto.
        (WebCore::FrameLoader::completed): Removed call to now-obsolete function,
        submitFormAgain.
        (WebCore::FrameLoader::loadFrameRequest): Renamed from
        loadFrameRequestWithFormAndValues. Replaced form element and form values
        argument with a single FormState argument. Changed frame targeting code
        to use the source frame in the case of a form submission to better match
        the actual target frame.
        (WebCore::FrameLoader::loadURL): Don't search for existing frames in the
        form submission case since we already did that in the submitForm function.
        (WebCore::FrameLoader::clientRedirected): Changed to work with the
        m_isExecutingJavaScriptFormAction data member directly instead of taking
        it as a function parameter.
        (WebCore::FrameLoader::loadPostRequest): Don't search for existing frames
        in the form submission case since we already did that in the submitForm
        function.
        (WebCore::FrameLoader::addBackForwardItemClippedAtTarget): Moved comment
        in here that was misplaced elsewhere in the file.
        (WebCore::FrameLoader::findFrameForNavigation): Changed to use the early
        return idiom.
        (WebCore::FrameLoader::recursiveGoToItem): Updated for HistoryItem changes.
        (WebCore::FrameLoader::childFramesMatchItem): Ditto.
        (WebCore::FrameLoader::updateHistoryForStandardLoad): Removed the
        m_navigationDuringLoad logic; that's now handled by setting lockHistory
        to true in the submitForm function.
        (WebCore::FrameLoader::updateHistoryForRedirectWithLockedBackForwardList):
        Use the new setChildItem function so we don't get multiple items for the
        same frame name in the history item tree in the back/forward list.

        * loader/FrameLoader.h: Renamed loadFrameRequestWithFormAndValues to
        loadFrameRequest and made it take a form state object instead of the
        form element and form values. Removed the unused functions
        loadEmptyDocumentSynchronously, provisionalDocumentLoader,
        notifyIconChnaged, and updateBaseURLForEmptyDocument. Changed the
        submitForm function to take a form state argument. Eliminated the
        clearRecordedFormValues, setFormAboutToBeSubmitted, and recordFormValue
        functions, which are replaced by the form state arguments to submitForm
        and loadFrameRequest. Removed the isJavaScriptFormAction argument from
        the clientRedirected function; instead it looks at a data member directly.
        Eliminated the submitFormAgain and overload of the submitForm function;
        these are now subsumed into the remaining submitForm function and the
        scheduleFormSubmission function. Removed unused and obsolete data
        members m_navigationDuringLoad, m_deferredFormSubmission,
        m_formAboutToBeSubmitted and m_formValuesAboutToBeSubmitted.

        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::contextMenuItemSelected):
        Updated for name and argument change of loadFrameRequest.

        * page/Frame.cpp:
        (WebCore::Frame::~Frame): Removed call to the now-unneeded
        clearRecordedFormValues function.

2009-04-01  Dimitri Glazkov  <dglazkov@chromium.org>

        Unreviewed, fixing previous commit.

        https://bugs.webkit.org/show_bug.cgi?id=24994
        Revert V8DOMMap.cpp change which accidentally snuck into the previous
        commit.

        * bindings/v8/V8DOMMap.cpp: Revert change in previous commit.

2009-04-01  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Darin Fisher.

        https://bugs.webkit.org/show_bug.cgi?id=24994
        Fix miscellaneous merge/upstreaming divergencies in Chromium port.

        * bindings/v8/V8Collection.h: Added an include.
        * platform/KURLGoogle.cpp:
        (WebCore::KURL::baseAsString): Added to match KURL.cpp.
        * platform/chromium/ClipboardChromium.cpp: Added an include.

2009-04-01  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Timothy Hatcher.

        https://bugs.webkit.org/show_bug.cgi?id=24989
        Refactor InspectorResource to use ScriptObject/FunctionCall.

        * bindings/js/JSInspectorControllerCustom.cpp:
        (WebCore::JSInspectorController::addResourceSourceToFrame): Tweaked to use
            a more appropriate type conversion.
        (WebCore::JSInspectorController::getResourceDocumentNode): Tweaked to
            accommodate for InspectorResource refactoring.
        * bindings/js/ScriptFunctionCall.cpp:
        (WebCore::ScriptFunctionCall::appendArgument): Added long long type to match
            existing jsNumber call signature.
        * bindings/js/ScriptFunctionCall.h: Declaration for above.
        * bindings/js/ScriptObject.cpp:
        (WebCore::createEmptyObject): Added.
        (WebCore::ScriptObject::ScriptObject):
        (WebCore::ScriptObject::set): Added a bunch of property setters.
        * bindings/js/ScriptObject.h: Declarations for above.
        * inspector/InspectorController.cpp: Moved all InspectorResource-managing code
            to InspectorResource.cpp
        (WebCore::InspectorController::populateScriptObjects): Changed to use
            refactored InspectorResource.
        (WebCore::InspectorController::resetScriptObjects): Ditto.
        (WebCore::InspectorController::pruneResources): Ditto.
        (WebCore::InspectorController::didCommitLoad): 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,
        (WebCore::InspectorController::resourceRetrievedByXMLHttpRequest): Ditto.
        (WebCore::InspectorController::scriptImported): Ditto.
        * inspector/InspectorController.h: Removed InspectorResource-managing code decls
            and tweaked some signatures to use ScriptString and long long for identifier.
        * inspector/InspectorController.idl: Changed to use long long for identifier.
        * inspector/InspectorResource.cpp: Refactored to use ScriptObject/FunctionCall.
        (WebCore::InspectorResource::InspectorResource): Ditto.
        (WebCore::InspectorResource::~InspectorResource): Ditto.
        (WebCore::InspectorResource::createCached): Added.
        (WebCore::InspectorResource::updateRequest): Added.
        (WebCore::InspectorResource::updateResponse): Added.
        (WebCore::createHeadersObject): Added.
        (WebCore::InspectorResource::createScriptObject): Added.
        (WebCore::InspectorResource::updateScriptObject): Added.
        (WebCore::InspectorResource::releaseScriptObject): Added.
        (WebCore::InspectorResource::type): Tweaked to use ScriptString.
        (WebCore::InspectorResource::setXMLHttpResponseText): Added.
        (WebCore::InspectorResource::sourceString): Tweaked to use ScriptString.
        (WebCore::InspectorResource::startTiming): Added.
        (WebCore::InspectorResource::markResponseReceivedTime): Added.
        (WebCore::InspectorResource::endTiming): Added.
        (WebCore::InspectorResource::markFailed): Added.
        (WebCore::InspectorResource::addLength): Added.
        * inspector/InspectorResource.h: Added decls for newly refactored-in methods.
        (WebCore::InspectorResource::create): Added.
        (WebCore::InspectorResource::isSameLoader): Added.
        (WebCore::InspectorResource::markMainResource): Added.
        (WebCore::InspectorResource::identifier): Added.
        (WebCore::InspectorResource::requestURL): Added.
        (WebCore::InspectorResource::frame): Added.
        (WebCore::InspectorResource::mimeType): Added.
        (WebCore::InspectorResource::Changes::Changes): Added new class to track
            resource changes.
        (WebCore::InspectorResource::Changes::hasChange): Added.
        (WebCore::InspectorResource::Changes::set): Added.
        (WebCore::InspectorResource::Changes::clear): Added.
        (WebCore::InspectorResource::Changes::setAll): Added.
        (WebCore::InspectorResource::Changes::clearAll): Added.

2009-04-01  Tony Chang  <tony@chromium.org>

        Reviewed by Darin Fisher.

        Ensure the right click doesn't deselect text under it.  This was
        happening in the Chromium and GTK+ ports because they don't select
        the text under the cursor on right click.
        
        This was regressed in r41715, https://bugs.webkit.org/show_bug.cgi?id=19737
        
        https://bugs.webkit.org/show_bug.cgi?id=24946

        Test: fast/events/context-no-deselect.html

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

2009-04-01  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dave Hyatt

        https://bugs.webkit.org/show_bug.cgi?id=24991
        
        Need to use toRenderBoxModelObject(), not toRenderBox(), to test for layer()
        when getting the transform.
        
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::transformFromContainer):

2009-03-31  Darin Adler  <darin@apple.com>

        Rolled out that last change until I can investigate the regression test failures it seems
        to have caused.

        * dom/PositionIterator.cpp:
        (WebCore::PositionIterator::decrement):
        * dom/PositionIterator.h:
        (WebCore::PositionIterator::PositionIterator):

2009-03-31  Darin Adler  <darin@apple.com>

        Reviewed by Eric Seidel.

        Bug 24621: PositionIterator doesn't iterate "after last child" positions when going backwards
        https://bugs.webkit.org/show_bug.cgi?id=24621

        * dom/PositionIterator.cpp:
        (WebCore::PositionIterator::decrement): Make sure that when the parent has no children, we
        don't ever use Position::uncheckedPreviousOffset. This is consistent with the forward
        iterator, but also should never arise because of the fix below.
        * dom/PositionIterator.h:
        (WebCore::PositionIterator::PositionIterator): Fixed so m_offset will always be 0 when
        the passed-in node has no children. Like the change above, this is consistent with the rest
        of the class, although in the long run I think it's a bit strange to treat a <p> element
        with no children differently than a <p> element with children.

2009-03-31  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Simon Fraser.

        https://bugs.webkit.org/show_bug.cgi?id=24965
        Bug 24965: HTMLMediaElement: network state changes can be missed
        
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::setNetworkState): Always update m_networkState when the
        state changes, even when no event needs to be fired.

2009-03-31  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Darin Adler.
        
        https://bugs.webkit.org/show_bug.cgi?id=24964
        Bug 24964: HTMLMediaElement: 'waiting' event may fire twice

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::setReadyState): Only fire 'waiting' event once when ready state
        drops below HAVE_FUTURE_DATA.

2009-03-31  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=24846
        Bug 24846: HTMLMediaElement should implement 'autobuffer' attribute

        Add 'autobuffer' attrubute to media element. 'autobuffer' is a hint that
        the author recommends downloading the entire resource optimistically, so the
        attribute is made available to the media engine to use if it is able.

        Test: media/video-dom-autobuffer.html

        * html/HTMLAttributeNames.in: Add autobuffer.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::parseMappedAttribute): New.
        (WebCore::HTMLMediaElement::autobuffer): Ditto.
        (WebCore::HTMLMediaElement::setAutobuffer): Ditto.

        * html/HTMLMediaElement.h: Declare autobuffer and setAutobuffer.

        * html/HTMLMediaElement.idl: Add autobuffer.

        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::MediaPlayer): Initialize m_autobuffer.
        (WebCore::MediaPlayer::autobuffer): New.
        (WebCore::MediaPlayer::setAutobuffer): Ditto.
        * platform/graphics/MediaPlayer.h: Declare m_autobuffer, autobuffer and setAutobuffer

        * platform/graphics/MediaPlayerPrivate.h:
        (WebCore::MediaPlayerPrivateInterface::setAutobuffer): Declare setAutobuffer.

2009-03-31  Craig Schlenter  <craig.schlenter@gmail.com>

        Reviewed by Dimitri Glazkov.

        https://bugs.webkit.org/show_bug.cgi?id=24550
        Check return value of vasprintf. This should keep gcc 4.3.3
        happy rather than have it complain about attribute warn_unused_result.

        * dom/XMLTokenizerLibxml2.cpp:
        (WebCore::XMLTokenizer::error):

2009-03-31  Dean Jackson  <dino@apple.com>

        Style guide violation!

        * loader/MediaDocument.cpp:
        (WebCore::MediaDocument::defaultEventHandler):

2009-03-31  Dean Jackson  <dino@apple.com>

        Fix Tiger build.

        * loader/MediaDocument.cpp:
        (WebCore::MediaDocument::defaultEventHandler):

2009-03-31  Jian Li  <jianli@chromium.org>

        Reviewed by Darin Fisher.

        Upstream V8DOMMap for v8 bindings.
        https://bugs.webkit.org/show_bug.cgi?id=24951

        * bindings/v8/V8DOMMap.cpp: Added.
        * bindings/v8/V8DOMMap.h: Added.

2009-03-31  Dean Jackson  <dino@apple.com>

        Reviewed by Simon Fraser.

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

        Spacebar didn't play/pause in standalone MediaDocument

        * loader/MediaDocument.cpp:
        (WebCore::MediaDocument::defaultEventHandler):

2009-03-31  Alpha Lam  <hclam@chromium.org>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=24901
        Added the following methods to MediaPlayerPrivate for Chromium port.
        void sizeChanged();
        void rateChanged();
        void durationChanged();

        The above changes are to reflect changes in MediaPlayer.cpp.
        More details can be found in the original changeset.
        http://trac.webkit.org/changeset/41907

        * platform/graphics/chromium/MediaPlayerPrivateChromium.h:

2009-03-31  Rafael Weinstein  <rafaelw@chromium.org>

        Reviewed by Eric Seidel.

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

        Special-case drawing text-shadow on win32, to let GDI draw in cases
        when both fill & shadow color are opaque and the shadow has no blur.

        * platform/graphics/chromium/FontChromiumWin.cpp:
        (WebCore::TransparencyAwareFontPainter::TransparencyAwareGlyphPainter::drawGlyphs):
        (WebCore::Font::drawComplexText):
        * platform/graphics/skia/SkiaFontWin.cpp:
        (WebCore::windowsCanHandleDrawTextShadow):
        (WebCore::windowsCanHandleTextDrawing):
        * platform/graphics/skia/SkiaFontWin.h:

2009-03-31  Jeremy Moskovich  <jeremy@chromium.org>

        Reviewed by Darin Fisher.

        r42055 removed some functions in FrameLoader used by Chrome,
        this CL backs out some of those changes to unbreak the Chrome build.

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

        * WebCore.base.exp:
        * loader/FrameLoader.cpp:
        * loader/FrameLoader.h:

2009-03-31  Jeremy Moskovich  <jeremy@chromium.org>

        Reviewed by Darin Adler.

        Build fixes for Chromium.

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

        * dom/Document.h:
        * platform/chromium/ClipboardChromium.cpp:
        (WebCore::imageToMarkup):

2009-03-31  Simon Hausmann  <simon.hausmann@nokia.com>

        Fix the Qt build.

        * dom/XMLTokenizerQt.cpp:
        (WebCore::XMLTokenizer::XMLTokenizer): Use NamedNodeMap instead of NamedAttrMap.

2009-03-30  Steve Falkenburg  <sfalken@apple.com>

        Don't create CFDataRef with a fixed size.
        Fixes synchronous XMLHTTPRequests on Windows.
        
        Reviewed by Ada Chan.

        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::WebCoreSynchronousLoader::didReceiveData):

2009-03-30  Darin Adler  <darin@apple.com>

        Reviewed by Sam Weinig.

        Bug 24594: PolicyDelegate NavigationAction is WebNavigationTypeOther instead of WebNavigationTypeReload
        https://bugs.webkit.org/show_bug.cgi?id=24594
        rdar://problem/6682110

        Test: fast/loader/reload-policy-delegate.html

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadWithDocumentLoader): Set the triggering action here where we know it's
        the policy loader and can use m_policyLoadType rather than letting it get set inside
        checkNavigationPolicy.

2009-03-30  Timothy Hatcher  <timothy@apple.com>

        <rdar://problem/5838871> CrashTracer: 1483 crashes Quicklooking
        in Finder (painting without up to date layout)

        Reviewed by Dan Bernstein.

        * page/FrameView.cpp:
        (WebCore::FrameView::paintContents): Add an early return when
        painting is attempted when layout is needed.

2009-03-30  Greg Bolsinga  <bolsinga@apple.com>

        Reviewed by Simon Fraser.

        https://bugs.webkit.org/show_bug.cgi?id=24938
        
        Sort alphabetically.

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

2009-03-30  Greg Bolsinga  <bolsinga@apple.com>

        Reviewed by Simon Fraser.

        https://bugs.webkit.org/show_bug.cgi?id=24938
        
        Build fixes for building --3d-rendering and --no-svg

        * rendering/RenderLayerBacking.cpp:

2009-03-30  Greg Bolsinga  <bolsinga@apple.com>

        Reviewed by Simon Fraser.
        
        https://bugs.webkit.org/show_bug.cgi?id=24938

        Build fixes when building --no-svg
        
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue): Add missing CSS properties
        * css/CSSCursorImageValue.cpp:
        (WebCore::CSSCursorImageValue::updateIfSVGCursorIsUsed): Handle unused param
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue): Add missing CSS properties
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty): Add missing CSS properties
        * dom/Node.cpp:
        (WebCore::updateSVGElementInstancesAfterEventListenerChange): Handle unused param
        * platform/graphics/Font.cpp:
        (WebCore::Font::floatWidth): Handle unused param
        * platform/graphics/SimpleFontData.cpp:
        (WebCore::SimpleFontData::SimpleFontData): Handle unused param

2009-03-30  Darin Adler  <darin@apple.com>

        Reviewed by Adam Roben.

        Bug 24916: REGRESSION: NavigationAction policy dispatch broken
        https://bugs.webkit.org/show_bug.cgi?id=24916

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadURL): Rearrange the code so that the "event" PassRefPtr
        is not used twice. This also optimizes the case where a frame name is specified,
        but it's the name of the frame being loaded. Also called release in all the final
        uses of FormState.

2009-03-30  Darin Adler  <darin@apple.com>

        Reviewed by Adam Roben.

        Bug 24937: NamedNodeMap and NamedAttrMap should not be separate classes
        https://bugs.webkit.org/show_bug.cgi?id=24937

        Also should fix the Windows COM bindings build.

        * bindings/scripts/CodeGeneratorJS.pm: Removed special case for NamedNodeMap.
        * bindings/scripts/CodeGeneratorObjC.pm: Ditto.

        * dom/NamedAttrMap.h: Renamed class from NamedAttrMap to
        NamedNodeMap and removed NamedNodeMap base class. Made the NamedNodeMap
        functions all public and non-virtual. Removed virtualLength.

        * dom/NamedNodeMap.h: Replaced file with just an include
        of NamedAttrMap.h. As a follow up we will rename the NamedAttrMap
        files and remove this file.

        * bindings/js/JSNamedNodesCollection.cpp: Renamed from NamedAttrMap to NamedNodeMap.
        * dom/Attr.h: Ditto.
        * dom/Attribute.h: Ditto.
        * dom/Document.cpp:
        (WebCore::Document::importNode): Ditto.
        * dom/Element.cpp:
        (WebCore::Element::attributes): Ditto.
        (WebCore::Element::setAttributeMap): Ditto.
        (WebCore::Element::createAttributeMap): Ditto.
        (WebCore::Element::insertedIntoDocument): Ditto.
        (WebCore::Element::removedFromDocument): Ditto.
        (WebCore::Element::openTagStartToString): Ditto.
        (WebCore::Element::removeAttributeNode): Ditto.
        (WebCore::Element::getAttributeNode): Ditto.
        (WebCore::Element::getAttributeNodeNS): Ditto.
        (WebCore::Element::hasAttribute): Ditto.
        (WebCore::Element::hasAttributeNS): Ditto.
        (WebCore::Element::normalizeAttributes): Ditto.
        * dom/Element.h: Ditto.
        * dom/NamedAttrMap.cpp:
        (WebCore::NamedNodeMap::detachAttributesFromElement): Ditto.
        (WebCore::NamedNodeMap::~NamedNodeMap): Ditto.
        (WebCore::NamedNodeMap::isMappedAttributeMap): Ditto.
        (WebCore::NamedNodeMap::getNamedItem): Ditto.
        (WebCore::NamedNodeMap::getNamedItemNS): Ditto.
        (WebCore::NamedNodeMap::removeNamedItem): Ditto.
        (WebCore::NamedNodeMap::removeNamedItemNS): Ditto.
        (WebCore::NamedNodeMap::setNamedItem): Ditto.
        (WebCore::NamedNodeMap::item): Ditto.
        (WebCore::NamedNodeMap::getAttributeItem): Ditto.
        (WebCore::NamedNodeMap::clearAttributes): Ditto.
        (WebCore::NamedNodeMap::detachFromElement): Ditto.
        (WebCore::NamedNodeMap::setAttributes): Ditto.
        (WebCore::NamedNodeMap::addAttribute): Ditto.
        (WebCore::NamedNodeMap::removeAttribute): Ditto.
        (WebCore::NamedNodeMap::mapsEquivalent): Ditto.
        * dom/NamedMappedAttrMap.cpp:
        (WebCore::NamedMappedAttrMap::clearAttributes): Ditto.
        * dom/NamedMappedAttrMap.h:
        (WebCore::NamedMappedAttrMap::NamedMappedAttrMap): Ditto.
        * dom/Node.cpp:
        (WebCore::Node::dumpStatistics): Ditto.
        (WebCore::Node::isEqualNode): Ditto.
        (WebCore::Node::isDefaultNamespace): Ditto.
        (WebCore::Node::lookupNamespaceURI): Ditto.
        (WebCore::Node::lookupNamespacePrefix): Ditto.
        (WebCore::Node::compareDocumentPosition): Ditto.
        * dom/Node.h: Ditto.
        * dom/XMLTokenizerLibxml2.cpp:
        (WebCore::XMLTokenizer::XMLTokenizer): Ditto.
        * editing/ApplyStyleCommand.cpp:
        (WebCore::isSpanWithoutAttributesOrUnstyleStyleSpan): Ditto.
        (WebCore::isEmptyFontTag): Ditto.
        (WebCore::areIdenticalElements): Ditto.
        * editing/markup.cpp:
        (WebCore::appendStartMarkup): Ditto.
        (WebCore::completeURLs): Ditto.
        * html/HTMLParser.cpp:
        (WebCore::HTMLParser::handleError): Ditto.
        * rendering/RenderPartObject.cpp:
        (WebCore::RenderPartObject::updateWidget): Ditto.
        * svg/SVGAnimatedProperty.h:
        (WebCore::synchronizeProperty): Ditto.
        * xml/XPathFunctions.cpp:
        (WebCore::XPath::FunLang::evaluate): Ditto.
        * xml/XPathStep.cpp:
        (WebCore::XPath::Step::nodesInAxis): Ditto.

2009-03-30  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Holger Freyther.

        https://bugs.webkit.org/show_bug.cgi?id=24750
        [GTK] requests download instead of displaying page

        Use soup facilities to append parameters to the content type, to
        make that more robust;

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

2009-03-30  David Kilzer  <ddkilzer@apple.com>

        <rdar://problem/6735683> Move SECTORDER_FLAGS from Xcode project to WebCore.xcconfig

        Reviewed by Timothy Hatcher, Mark Rowe and Darin Adler.

        * Configurations/Base.xcconfig: Moved Production definition of
        SECTORDER_FLAGS to here from Xcode project file.
        * Configurations/DebugRelease.xcconfig: Override SECTORDER_FLAGS
        in Base.xcconfig to the empty string since it is not used for
        Debug and Release configurations.
        * WebCore.xcodeproj/project.pbxproj: Removed SECTORDER_FLAGS.

2009-03-30  Adam Roben  <aroben@apple.com>

        Windows build fix after recent Node.idl changes

        * bindings/scripts/CodeGeneratorCOM.pm: Touched this to force sources
        of classes that derive from Node to rebuild.

2009-03-30  Adam Roben  <aroben@apple.com>

        Windows build fix

        * svg/graphics/SVGImage.cpp: Added a missing #include.

2009-03-30  Mads Ager  <ager@chromium.org>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=24879
        Add frame accessor to Screen, Console, and BarInfo objects. Add type 
        accessor to BarInfo objects.

        In the V8 JavaScript bindings, we need access to the frame and
        type for already created Screen, Console, and BarInfo objects in
        order to keep their wrappers alive across GCs.

        * page/BarInfo.cpp:
        (WebCore::BarInfo::frame): Added.
        (WebCore::BarInfo::type): Added.
        * page/BarInfo.h:
        * page/Console.cpp:
        (WebCore::Console::frame): Added.
        * page/Console.h:
        * page/Screen.cpp:
        (WebCore::Screen::frame): Added.
        * page/Screen.h:

2009-03-29  Darin Adler  <darin@apple.com>

        Requested by Antti Koivisto.

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::subresource): Tweaked code to be a little clearer and added
        a better comment.

2009-03-29  Darin Adler  <darin@apple.com>

        Reviewed by Dan Bernstein.

        Bug 23445: Copying certain hidden text causes a crash
        https://bugs.webkit.org/show_bug.cgi?id=23445
        rdar://problem/6512520

        Test: editing/pasteboard/copy-display-none.html

        * editing/markup.cpp:
        (WebCore::createMarkup): Added a check for the case where adjusting the start node moves
        the start of the selection past the end of the range entirely. If we try to iterate we'll
        never hit the end of the range and will probably crash iterating the rest of the document.

2009-03-29  Darin Adler  <darin@apple.com>

        Reviewed by Dan Bernstein.

        Bug 24672: ASSERTION FAILURE: !m_purgeableData in WebCore::CachedResource::data() saving a WebArchive
        https://bugs.webkit.org/show_bug.cgi?id=24672
        rdar://problem/6574263

        I couldn't create a test case for this. In fact, the case in the bug doesn't exist any more,
        but there is an Apple-internal website I was able to use to reproduce and fix.

        * loader/CachedResource.h: Made makePurgeable public.
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::subresource): Call makePurgeable to make the resource non-purgeable
        so we can get its data if it hasn't yet been purged.

2009-03-29  Darin Adler  <darin@apple.com>

        Fix build again.

        * loader/EmptyClients.h: Fix typo in name of FormState.h.

2009-03-29  Darin Adler  <darin@apple.com>

        Try to fix the release build.

        * history/CachedPage.cpp: Make include unconditional, not debug-only.

2009-03-29  Greg Bolsinga  <bolsinga@apple.com>

        Undo that last build fix, since it turned out the file wasn't deleted.

        * WebCore.xcodeproj/project.pbxproj:

2009-03-29  Greg Bolsinga  <bolsinga@apple.com>

        Fix build break by removing references to deleted header files.

        * WebCore.xcodeproj/project.pbxproj:

2009-03-29  Darin Adler  <darin@apple.com>

        Try to fix the Windows build.

        * loader/EmptyClients.h: Added include of FormState.h.
        * loader/MainResourceLoader.cpp: Ditto.

2009-03-29  Dmitry Titov  <dimich@chromium.org>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=24926
        Fix Chromium build break.

        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL(DOMWindowShowModalDialog)): renamed 'features' into 'windowFeatures'.

2009-03-29  Darin Adler  <darin@apple.com>

        Another attempt to fix the Qt build.

        * WebCore.pro: Added CheckedRadioButtons.cpp.

2009-03-29  Darin Adler  <darin@apple.com>

        Reviewed by Cameron Zwarich.

        Bug 24921: remove include of HTMLFormElement.h from Document.h
        https://bugs.webkit.org/show_bug.cgi?id=24921

        * GNUmakefile.am: Added CheckedRadioButtons source files.
        * WebCore.scons: Ditto.
        * WebCore.vcproj/WebCore.vcproj: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * WebCoreSources.bkl: Ditto.

        * bindings/objc/PublicDOMInterfaces.h: Changed type of parentElement to Element.

        * dom/CheckedRadioButtons.cpp: Copied from WebCore/html/HTMLFormElement.cpp.
        Removed all the code except for CheckedRadioButtons, and moved that out to be
        a namespace-level class instead of a member of HTMLFormElement.

        * dom/CheckedRadioButtons.h: Copied from WebCore/html/HTMLFormElement.h.
        Removed all the code except for CheckedRadioButtons, and moved that out to be
        a namespace-level class instead of a member of HTMLFormElement.

        * dom/Document.h: Removed unneeded includes, including HTMLFormElement.h.
        Added include of CheckedRadioButtons.h. Changed uses of CheckedRadioButtons
        class to use a namespace-level class instead of a member of HTMLFormElement.

        * dom/Node.idl: Changed the type of parentElement from Node to Element for
        two reasons. 1) Node was incorrect, since parentElement returns an Element.
        2) The bindings won't compile any more unless they know parentElement's
        return value is an Element due to include changes.

        * html/HTMLFormElement.cpp: Moved definitions of the functions in the
        CheckedRadioButtons class to the new CheckedRadioButtons.cpp.

        * html/HTMLFormElement.h: Moved definition of the CheckedRadioButtons
        class to the new CheckedRadioButtons.h.

        * html/HTMLInputElement.cpp:
        (WebCore::checkedRadioButtons): Changed use of CheckedRadioButtons
        class to use a namespace-level class instead of a member of HTMLFormElement.

        * page/Chrome.cpp:
        (WebCore::Chrome::createWindow): Tweaked formatting.

        * css/CSSGrammar.y: Added newly-needed include.
        * dom/Range.cpp: Ditto.
        * editing/BreakBlockquoteCommand.cpp: Ditto.
        * editing/CompositeEditCommand.cpp: Ditto.
        * editing/InsertLineBreakCommand.cpp: Ditto.
        * editing/ModifySelectionListLevel.cpp: Ditto.
        * editing/RemoveFormatCommand.cpp: Ditto.
        * editing/TextIterator.cpp: Ditto.
        * editing/VisiblePosition.cpp: Ditto.
        * loader/DocLoader.cpp: Ditto.
        * page/AccessibilityRenderObject.cpp: Ditto.
        * page/Page.cpp: Ditto.
        * rendering/RenderBlock.cpp: Ditto.
        * rendering/RenderLayer.cpp: Ditto.
        * rendering/RenderObject.h: Ditto.
        * storage/LocalStorageArea.cpp: Ditto.
        * storage/SessionStorageArea.cpp: Ditto.

2009-03-29  Darin Adler  <darin@apple.com>

        Reviewed by Dan Bernstein.

        <rdar://problem/6015407> attr parsing should allow only identifiers

        Test: fast/css/attr-parsing.html

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseContent): Allow only CSS_IDENT, and filter out
        identifiers that start with "-".
        * css/CSSPrimitiveValue.cpp:
        (WebCore::CSSPrimitiveValue::cssText): Added a case for CSS_ATTR so the test
        case works. This has the pleasant side effect of fixing a bug too.

2009-03-29  Alexey Proskuryakov  <ap@webkit.org>

        <rdar://problem/6492712> Cross-origin redirects are not handled correctly.

        Forgot to save the file after applying changes for review comments.

        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::willSendRequest):
        (WebCore::didReceiveResponse):
        (WebCore::didReceiveData):
        (WebCore::didSendBodyData):
        (WebCore::didFinishLoading):
        (WebCore::didFail):
        (WebCore::willCacheResponse):
        (WebCore::didReceiveChallenge):
        (WebCore::WebCoreSynchronousLoader::willSendRequest):
        (WebCore::WebCoreSynchronousLoader::didReceiveResponse):
        (WebCore::WebCoreSynchronousLoader::didReceiveData):
        (WebCore::WebCoreSynchronousLoader::didFinishLoading):
        (WebCore::WebCoreSynchronousLoader::didFail):
        (WebCore::WebCoreSynchronousLoader::didReceiveChallenge):

2009-03-28  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin Adler.

        <rdar://problem/6492712> Cross-origin redirects are not handled correctly.

        Test: http/tests/xmlhttprequest/redirect-cross-origin-tripmine.html

        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::WebCoreSynchronousLoader::WebCoreSynchronousLoader):
        (WebCore::ResourceHandle::loadResourceSynchronously):
        (WebCore::WebCoreSynchronousLoader::willSendRequest):
        (WebCore::WebCoreSynchronousLoader::didReceiveResponse):
        (WebCore::WebCoreSynchronousLoader::didReceiveData):
        (WebCore::WebCoreSynchronousLoader::didFinishLoading):
        (WebCore::WebCoreSynchronousLoader::didFail):
        (WebCore::WebCoreSynchronousLoader::didReceiveChallenge):
        (WebCore::WebCoreSynchronousLoader::load):
        Match Mac behavior more closely - we shouldn't rely on underlying library handling of
        synchronous requests.

        * loader/DocumentThreadableLoader.cpp: (WebCore::DocumentThreadableLoader::willSendRequest):
        -[NSURLConnection cancel] doesn't fully cancel the connection if called from willSendRequest
        delegate method for a redirect.

        * platform/network/mac/ResourceHandleMac.mm:
        (-[WebCoreSynchronousLoader connection:willSendRequest:redirectResponse:]):
        Match async behavior more closely.

2009-03-28  Darin Adler  <darin@apple.com>

        Reviewed by Mark Rowe.

        Bug 24914: empty-string assertion crash when running storage tests
        https://bugs.webkit.org/show_bug.cgi?id=24914

        * storage/Database.cpp:
        (WebCore::Database::performOpenAndVerify): Don't store empty version strings
        in the map, since empty strings are per-thread.

2009-03-28  Dmitry Titov  <dimich@chromium.org>

        Reviewed by Dimitri Glazkov.

        https://bugs.webkit.org/show_bug.cgi?id=24910
        Fixes for Chromium build.

        * bindings/v8/V8LazyEventListener.h: renamed IsInline() into virtualIsInline()
        * bindings/v8/custom/V8CustomEventListener.h: ditto.
        * dom/EventListener.h: used #if USE(JSC) to fix the build on non-JSC platform.

2009-03-28  Dimitri Glazkov  <dglazkov@chromium.org>

        Not reviewed, correcting landing error.

        https://bugs.webkit.org/show_bug.cgi?id=24812
        Custom bindings should be in v8/custom, not v8.

        * bindings/v8/V8HTMLDocumentCustom.cpp: Removed.
        * bindings/v8/custom/V8HTMLDocumentCustom.cpp: Moved from parent dir.

2009-03-28  Mike Belshe  <mike@belshe.com>

        Reviewed by Dimitri Glazkov.

        https://bugs.webkit.org/show_bug.cgi?id=24616
        Add V8 custom bindings for DOMWindow.

        * bindings/v8/custom/V8DOMWindowCustom.cpp: Added.

2009-03-28  Mike Belshe  <mike@belshe.com>

        Reviewed by Dimitri Glazkov.

        https://bugs.webkit.org/show_bug.cgi?id=24812
        Add V8 custom bindings for HTMLDocument.

        * bindings/v8/V8HTMLDocumentCustom.cpp: Added.

2009-03-27  Mark Rowe  <mrowe@apple.com>

        Reviewed by Sam Weinig.

        Fix two SVG test failures in 64-bit.

        getSubStringLength's arguments were declared as unsigned in the IDL and as signed long in the implementation.
        This led to a value of -1 in JavaScript being converted to MAX_UINT in the bindings.  In 32-bit this was
        identical to -1 when interpeted as signed long, but in 64-bit it was still equal to MAX_UINT.

        The solution for this is to use the IsIndex attribute on arguments that the SVG spec declares as "unsigned long"
        but requires an exception be thrown when a negative value is passed.  This results in the JS bindings handling the
        check for a negative value and lets the implementation treat the arguments purely as unsigned values.

        * svg/SVGTextContentElement.cpp:
        (WebCore::SVGTextContentElement::getNumberOfChars):
        (WebCore::SVGTextContentElement::getSubStringLength):
        (WebCore::SVGTextContentElement::getStartPositionOfChar):
        (WebCore::SVGTextContentElement::getEndPositionOfChar):
        (WebCore::SVGTextContentElement::getExtentOfChar):
        (WebCore::SVGTextContentElement::getRotationOfChar):
        (WebCore::SVGTextContentElement::getCharNumAtPosition):
        (WebCore::SVGTextContentElement::selectSubString):
        * svg/SVGTextContentElement.h:
        * svg/SVGTextContentElement.idl:

2009-03-27  Darin Adler  <darin@apple.com>

        Reviewed by Sam Weinig.

        Get mailto code out of FrameLoader.

        * html/HTMLFormElement.cpp:
        (WebCore::transferMailtoPostFormDataToURL): Added. Factored out the mailto
        logic so HTMLFormElement::submit isn't full of ugly bits. This includes the
        part of the logic that involves transformeing the URL that was previously
        inside FrameLoader.
        (WebCore::HTMLFormElement::submit): Call transferMailtoPostFormDataToURL and
        also release the data for slightly less refcount churn.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::submitForm): Removed all the special casing for mailto,
        since HTMLFormElement now properly prepares both the URL and the form data.

2009-03-27  Dan Bernstein  <mitz@apple.com>

        Reviewed by Mark Rowe.

        - fix <rdar://problem/6724514> A bit of OpenTypeUtilities cleanup

        * platform/graphics/chromium/FontCustomPlatformData.cpp:
        (WebCore::EOTStream::EOTStream): Changed to use EOTHeader.
        (WebCore::createFontCustomPlatformData): Ditto.
        * platform/graphics/opentype/OpenTypeUtilities.cpp:
        (WebCore::EOTHeader::EOTHeader): Added. Initializes the buffer size to
        the size of an EOTPrefix.
        (WebCore::EOTHeader::updateEOTSize): Added. Updates the size field in
        the prefix.
        (WebCore::EOTHeader::appendBigEndianString): Changed the static
        appendBigEndianStringToEOTHeader() into this member function.
        (WebCore::EOTHeader::appendPaddingShort): Added.
        (WebCore::getEOTHeader): Changed to use EOTHeader.
        * platform/graphics/opentype/OpenTypeUtilities.h:
        (WebCore::EOTHeader::size):
        (WebCore::EOTHeader::data):
        (WebCore::EOTHeader::prefix):
        * platform/graphics/win/FontCustomPlatformData.cpp:
        (WebCore::EOTStream::EOTStream): Changed to use EOTHeader.
        (WebCore::createFontCustomPlatformData): Ditto.

2009-03-27  Darin Adler  <darin@apple.com>

        Reviewed by Sam Weinig.

        To prepare for work on a form loading fix, remove some unused functions,
        consolidate some functions, and make many more functions private in
        FrameLoader.

        * WebCore.base.exp: Remove some unused entry points, update another.

        * dom/Document.cpp:
        (WebCore::Document::detach): Clear m_frame directly instead of using
        clearFramePointer.
        * dom/Document.h: Ditto.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::urlSelected): Consolidate the two functions
        of this name into a single function. Also changed the event argument
        to be PassRefPtr<Event>.
        (WebCore::FrameLoader::submitForm): Changed the event argument to
        be PassRefPtr<Event>.
        (WebCore::FrameLoader::scheduleLocationChange): Call completeURL
        explicitly so we can remove the version of changeLocation that does
        completeURL for us.
        (WebCore::FrameLoader::redirectionTimerFired): Ditto.
        (WebCore::FrameLoader::loadURLIntoChildFrame): Set m_provisionalHistoryItem
        directly so we don't need a setProvisionalHistoryItem function.
        (WebCore::FrameLoader::canCachePageContainingThisFrame): Get at
        m_quickRedirectComing directly so we don't need a isQuickRedirectComing
        function.
        (WebCore::FrameLoader::logCanCacheFrameDecision): Ditto.
        (WebCore::FrameLoader::loadFrameRequestWithFormAndValues): Changed the
        event argument to be PassRefPtr<Event>.
        (WebCore::FrameLoader::loadURL): Move the logic of the continueLoadWithData
        function here because this is the only caller. If we want to make the
        resulting function smaller we should refactor some other way. Also
        streamlined the user-chosen encoding logic, but did not change what it does.
        (WebCore::FrameLoader::finishedLoadingDocument): Changed the event argument
        to be PassRefPtr<Event>.
        (WebCore::FrameLoader::loadPostRequest): Ditto.
        (WebCore::FrameLoader::receivedMainResourceError): Moved the logic from
        the didNotOpenURL function here, since this was the only caller.

        * loader/FrameLoader.h: Removed include of FormState.h and used a forward
        declaration instead. Removed unneeded forward declation of Element.
        Moved many functions into the private section, and removed some other
        unused or uneeded functions.

2009-03-27  Xiaomei Ji  <xji@chromium.org>

        Reviewed by Dan Bernstein.

        Fix https://bugs.webkit.org/show_bug.cgi?id=24303
        Using keyboard select RTL text, Highlights goes to opposite direction from Firefox and IE.

        Test: editing/selection/extend-selection.html

        * editing/SelectionController.cpp:
        (WebCore::SelectionController::directionOfEnclosingBlock): Added
        (WebCore::SelectionController::modifyExtendingRight): Added. Currenctly 
        implemented for character and word granularity, all other granularities
        are treated as "forward".
        (WebCore::SelectionController::modifyExtendingForward): Renamed 
        modifyExtendingRightForward() to this.
        (WebCore::SelectionController::modifyExtendingLeft): Added. Currenctly
        implemented for character and word granularity, all other granularities
        are treated as "backward".
        (WebCore::SelectionController::modifyExtendingBackward): Renamed
        modifyExtendingLeftBackward() to this.
        (WebCore::SelectionController::modify): Change to call either the 
        left/right or backward/forward methods depending on the 'dir' argument
        for extends.
        * editing/SelectionController.h:

2009-03-27  John Abd-El-Malek  <jam@google.com>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=24836
        Fix navigator.plugins.refresh(false) in Chromium.

        * plugins/chromium/PluginDataChromium.cpp:
        (WebCore::PluginData::refresh):

2009-03-27  Timothy Hatcher  <timothy@apple.com>

        Make scrollLeft, scrollTop, scrollWidth, and scrollHeight
        virtual to fix the broken layout tests from my last commit.

        Reviewed by Mark Rowe.

        * dom/Element.cpp:
        (WebCore::Element::scrollLeft):
        (WebCore::Element::scrollTop):
        (WebCore::Element::scrollWidth):
        (WebCore::Element::scrollHeight):
        * dom/Element.h:
        * html/HTMLBodyElement.h:

2009-03-27  Mark Rowe  <mrowe@apple.com>

        Reviewed by Sam Weinig.

        Fix <https://bugs.webkit.org/show_bug.cgi?id=24876>.
        Bug 24876: fast/forms/select-max-length.html times out in debug builds due to HTMLSelectElement::setLength being O(N^2)

        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::setLength): Repeatedly calling remove to remove elements causes us to recalculate the list
        items after each node is removed, leading to O(N^2) behaviour.  By inlining the batch removal in to setLength we can avoid
        this gratuitous recalcuation.

2009-03-27  Dirk Schulze  <krit@webkit.org>

        Reviewed by Eric Seidel.

        We don't support images for GtkCursors yet. We need a  placeholder to avoid crashes.
        I took crosshair to have a common behavior with firefox.

        [GTK] SVG - Crash on setting the cursor icon
        https://bugs.webkit.org/show_bug.cgi?id=24565

        * platform/gtk/CursorGtk.cpp:
        (WebCore::Cursor::Cursor):

2009-03-27  Timothy Hatcher  <timothy@apple.com>

        Remove redundant attributes and functions from IDL files that have the
        same attributes and functions defined in the super class.

        Reviewed by Simon Fraser.

        * WebCore.xcodeproj/project.pbxproj: Remove DOMHTMLBodyElementPrivate.h.
        * bindings/objc/PublicDOMInterfaces.h: Remove focus and blur from DOMHTMLElement.
        * html/HTMLBodyElement.idl: Remove scrollLeft, scrollTop, scrollWidth
        and scrollHeight.
        * html/HTMLElement.idl: Remove blur and focus.

2009-03-27  Adam Roben  <aroben@apple.com>

        Don't include substitute data URLs in global history redirect chains

        <rdar://6690169>

        Reviewed by Darin Adler.

        This might be testable if:
          - support were added to DRT for providing substitute data on failed
            loads
          - support were added to DRT for dumping redirect chains

        I tried doing the above and was still unable to make a test.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::updateHistoryForStandardLoad):
        (WebCore::FrameLoader::updateHistoryForRedirectWithLockedBackForwardList):
        Call updateGlobalHistoryRedirectLinks only if the load succeeded
        (i.e., there is no unreachableURL). Previous the FrameLoaderClient
        implementations were unconditionally calling
        updateGlobalHistoryRedirectLinks from within updateGlobalHistory.

2009-03-27  Peter Kasting  <pkasting@google.com>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=24861
        Chromium port did not render decorations for <input type="search">.
        This copies RenderThemeWin.*.

        * css/themeChromiumWin.css: Removed.
        * rendering/RenderThemeChromiumLinux.cpp:
        (WebCore::RenderThemeChromiumLinux::extraDefaultStyleSheet):
        (WebCore::RenderThemeChromiumLinux::adjustSearchFieldCancelButtonStyle):
        (WebCore::RenderThemeChromiumLinux::paintSearchFieldCancelButton):
        (WebCore::RenderThemeChromiumLinux::adjustSearchFieldDecorationStyle):
        (WebCore::RenderThemeChromiumLinux::adjustSearchFieldResultsDecorationStyle):
        (WebCore::RenderThemeChromiumLinux::paintSearchFieldResultsDecoration):
        (WebCore::RenderThemeChromiumLinux::adjustSearchFieldResultsButtonStyle):
        (WebCore::RenderThemeChromiumLinux::paintSearchFieldResultsButton):
        * rendering/RenderThemeChromiumLinux.h:
        (WebCore::RenderThemeChromiumLinux::paintSearchField):
        * rendering/RenderThemeChromiumWin.cpp:
        (WebCore::):
        (WebCore::RenderThemeChromiumWin::extraDefaultStyleSheet):
        (WebCore::RenderThemeChromiumWin::adjustSearchFieldCancelButtonStyle):
        (WebCore::RenderThemeChromiumWin::paintSearchFieldCancelButton):
        (WebCore::RenderThemeChromiumWin::adjustSearchFieldDecorationStyle):
        (WebCore::RenderThemeChromiumWin::adjustSearchFieldResultsDecorationStyle):
        (WebCore::RenderThemeChromiumWin::paintSearchFieldResultsDecoration):
        (WebCore::RenderThemeChromiumWin::adjustSearchFieldResultsButtonStyle):
        (WebCore::RenderThemeChromiumWin::paintSearchFieldResultsButton):
        * rendering/RenderThemeChromiumWin.h:
        (WebCore::RenderThemeChromiumWin::paintSearchField):

2009-03-27  David Hyatt  <hyatt@apple.com>

        Reviewed by Simon Fraser

        If an object has a self-painting layer, don't count it as part of a block's visual overflow.
        This fix has only been made for block-level children.   The inline-level case is still broken
        (and covered by an existing bug).

        Added fast/block/positioning/negative-rel-position.html

        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::placeBoxesVertically):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::layoutBlockChildren):
        (WebCore::RenderBlock::lowestPosition):
        (WebCore::RenderBlock::rightmostPosition):
        (WebCore::RenderBlock::leftmostPosition):

2009-03-27  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/6642221>
        REGRESSION: With the Movie widget, movie trailer fails to load if movie had been previously viewed
        
        Add a dashboard specific workaround so that we always create renderers for object elements, even if display:none is set.
        
        I've filed <rdar://problem/6731022> against the Movies widget.
        
        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::rendererIsNeeded):

2009-03-25  Timothy Hatcher  <timothy@apple.com>

        Expose new DOM methods as public Objective-C API.

        <rdar://problem/5837350> Expose new DOM classes and methods
        as public API (match the additions to the JavaScript DOM)

        Reviewed by Mark Rowe and Darin Adler.

        * WebCore.xcodeproj/project.pbxproj:
        * bindings/objc/DOMHTML.h:
        * bindings/objc/DOMPrivate.h:
        * bindings/objc/PublicDOMInterfaces.h:

2009-03-27  Zack Rusin <zack@kde.org>

        Reviewed by Simon Hausmann.

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

        Fix propagation of fill rules when rendering paths in the Qt build.

        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::toQtFillRule):
        (WebCore::GraphicsContext::fillPath):
        (WebCore::GraphicsContext::strokePath):

2009-03-27  Zack Rusin <zack@kde.org>

        Reviewed by Tor Arne Vestbø.

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

        Fix text field theming in the Qt build with the KDE 4 Oxygen
        style by adjusting the size vertically and horizontally to
        set padding on the element equal to the width of the style painted border.

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

2009-03-27  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Simon Hausmann.

        https://bugs.webkit.org/show_bug.cgi?id=24852
        Build fix for GNU mode RVCT compilation

        * html/PreloadScanner.cpp:

2009-03-27  Erik L. Bunce  <elbunce@xendom.com>

        Reviewed by Simon Hausmann.

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

        Make text of the writing direction items more user friendly.

        * platform/qt/Localizations.cpp:
        (WebCore::contextMenuItemTagLeftToRight):
        (WebCore::contextMenuItemTagRightToLeft):

2009-03-27  Erik L. Bunce  <elbunce@xendom.com>

        Reviewed by Simon Hausmann.

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

        Fixed the Qt 4.4 Mac build with netscape plugins enabled.

        * plugins/mac/PluginViewMac.cpp:

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

        Try and fix the Qt build.

        * platform/text/TextEncodingDetectorNone.cpp:
        (WebCore::detectTextEncoding):

2009-03-26  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Simon Fraser.

        https://bugs.webkit.org/show_bug.cgi?id=24874
        24874: HTMLMediaElement: 'duration' defaults to NaN, deal with it
        
        The 'duration' attribute is NaN when no media is available, so the
        media element should take care when comparing with duration().

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::mediaPlayerTimeChanged): Don't compare with duration when
        it is NaN.
        (WebCore::HTMLMediaElement::endedPlayback): Ditto.

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

        Fix the build.

        * platform/text/TextEncodingDetectorICU.cpp:
        * platform/text/TextEncodingDetectorNone.cpp:

2009-03-26  Jungshik Shin  <jshin@chromium.org>

        Reviewed by Cameron Zwarich.

        1. Fix the crash in setHintEncoding
        2. Fix build failures on Tiger and Qt.
        UnusedParam.h was not included by TextEncodingDetector{None,ICU}.cpp
        in the patch landed in r42023
        for http://bugs.webkit.org/show_bug.cgi?id=16482

        * loader/TextResourceDecoder.h:
        (WebCore::TextResourceDecoder::setHintEncoding):
        * platform/text/TextEncodingDetectorICU.cpp:
        * platform/text/TextEncodingDetectorNone.cpp:

2009-03-26  Simon Fraser  <simon.fraser@apple.com>

        Build fix when ACCELERATED_COMPOSITING is turned on.

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::canUseDirectCompositing):

2009-03-26  Eric Seidel  <eric@webkit.org>

        No additional review, committing previously reviewed files for build fix only.

        Add files I missed when commiting Jungshik's patch in r42022.
        https://bugs.webkit.org/show_bug.cgi?id=16482

        * icu/unicode/ucsdet.h: Added.
        * platform/text/TextEncodingDetector.h: Added.
        * platform/text/TextEncodingDetectorICU.cpp: Added.
        (WebCore::detectTextEncoding):
        * platform/text/TextEncodingDetectorNone.cpp: Added.
        (WebCore::detectTextEncoding):

2009-03-26  Jungshik Shin  <jshin@chromium.org>

        Reviewed by Alexey Proskuryakov.

        Add an encoding detector 'hook' to TextResourceDecoder.
         - add |usesEncodingDetector| to Settings. It's off by default.
         - add a new encoding source type |EncodingFromParent| 
           to distinguish cases when the encoding is inherited from
           the parent frame from cases when it's actually auto-detected.
         - add TextEncodingDetector* to platform/text. Currently,
           the only implementation uses ICU. Stub is added for 
           ports that do not use ICU and a build on Tiger. Mac OS 
           Tiger comes with ICU 3.2 that does not support encoding detector.
         - add ucsdet.h to icu/unicode for ports using ICU.

        Layout tests will be added once bug 20534 is fixed and a WebPreference
        can be controlled in test_shell. With UsesEncodingDetector off, there
        is no change to test. 

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

        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCore/GNUmakefile.am
        * WebCore/WebCore.pro
        * WebCore/WebCore.scons
        * WebCore/WebCoreSources.bkl
        * WebCore.base.exp
        * icu/unicode/ucsdet.h
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::write): turn on/off encoding detector depending on Settings and set hintEncoding of TextResourceDecoder to the parent frame encoding if necessary and the security policy allows refering to the parent frame encoding.
        * loader/TextResourceDecoder.cpp:
        (WebCore::TextResourceDecoder::TextResourceDecoder):
        (WebCore::TextResourceDecoder::checkForCSSCharset): add check for EncodingFromParentFrame
        (WebCore::TextResourceDecoder::checkForHeadCharset): ditto
        (WebCore::TextResourceDecoder::shouldAutoDetect):
        (WebCore::TextResourceDecoder::decode): call encoding detector if shouldAutoDetect returns true.
        (WebCore::TextResourceDecoder::flush): if encoding is not determined by now, call encoding detector if shouldAutoDetect returns true.
        * loader/TextResourceDecoder.h:
        (WebCore::TextResourceDecoder::):
        (WebCore::TextResourceDecoder::create):
        (WebCore::TextResourceDecoder::setHintEncoding):
        (WebCore::TextResourceDecoder::source):
        * page/Settings.cpp: add m_usesEncodingDetector
        (WebCore::Settings::Settings):
        (WebCore::Settings::setUsesEncodingDetector):
        * page/Settings.h:
        (WebCore::Settings::usesEncodingDetector):
        * platform/text/TextEncodingDetector.h: Added.
        * platform/text/TextEncodingDetectorICU.cpp: Added.
        (WebCore::detectTextEncoding):
        * platform/text/TextEncodingDetectorNone.cpp: Added.
        (WebCore::detectTextEncoding):

2009-03-26  Darin Adler  <darin@apple.com>

        Reviewed by Geoff Garen.

        Removed code that casts EventListener down to derived classes
        without type checking. A crash could happen if you added event
        listeners with Objective-C and then manipulated the class with
        JavaScript.

        * bindings/js/JSDOMApplicationCacheCustom.cpp:
        (WebCore::JSDOMApplicationCache::mark): Removed all the casts
        and used the markIfNotNull function and mark functions on
        EventListener instead.
        * bindings/js/JSMessagePortCustom.cpp:
        (WebCore::JSMessagePort::mark): Ditto.
        * bindings/js/JSWorkerContextCustom.cpp:
        (WebCore::JSWorkerContext::mark): Ditto.
        * bindings/js/JSWorkerCustom.cpp:
        (WebCore::JSWorker::mark): Ditto.
        * bindings/js/JSXMLHttpRequestCustom.cpp:
        (WebCore::JSXMLHttpRequest::mark): Ditto.
        * bindings/js/JSXMLHttpRequestUploadCustom.cpp:
        (WebCore::JSXMLHttpRequestUpload::mark): Ditto.

        * bindings/js/JSEventListener.cpp:
        (WebCore::JSAbstractEventListener::handleEvent): Used function,
        the new name for what used to be called listenerObj.
        (WebCore::JSAbstractEventListener::virtualIsInline): Renamed since
        this doesn't need to be virtual for callers who have a pointer to
        this class, not the base class.
        (WebCore::JSEventListener::function): Renamed from listenerObj.
        (WebCore::JSProtectedEventListener::function): Ditto.

        * bindings/js/JSEventListener.h: Removed unneeded forward class
        declarations. Made all virtual functions private since there's no
        need to call any of them on a particular derived class, only on
        EventListener. Explicitly declare JSEventListener::mark as virtual
        since it's now overriding a function in the EventListener base class.
        Made JSProtectedEventListener::m_globalObject protected so the
        JSLazyEventListener derived class can use it directly instead of using
        a virtual function to get the pointer.

        * bindings/js/JSLazyEventListener.cpp:
        (WebCore::JSLazyEventListener::parseCode): Use m_globalObject instead
        of globalObject since the latter is a virtual function and there's no
        need to pay virtual function overhead.
        (WebCore::JSLazyEventListener::function): Renamed from listenerObj.

        * bindings/js/JSLazyEventListener.h: Moved forward declaration of the
        Node class here from JSEventListener.h.

        * bindings/scripts/CodeGeneratorJS.pm: Removed now-unneeded cast to
        JSEventListener when getting the script object from a listener.

        * dom/EventListener.h: Added virtual function and mark functions
        so we can extract the JavaScript function object or mark a JavaScript
        event listener in a type safe manner.

2009-03-26  Peter Kasting  <pkasting@google.com>

        Reviewed by Adele Peterson.

        https://bugs.webkit.org/show_bug.cgi?id=24859
        Use CSS file instead of code to adjust search field styling.

        * css/themeWin.css:
        * rendering/RenderThemeWin.cpp:
        * rendering/RenderThemeWin.h:

2009-03-26  Darin Adler  <darin@apple.com>

        Reviewed by Geoff Garen.

        Split JSLazyEventListener out into its own separate source file.
        We'll be removing JSAbstractEventListener and JSProtectedEventListener soon,
        so leave those in the same file with JSEventListener.

        * GNUmakefile.am: Added JSLazyEventListener.
        * WebCore.pro: Ditto.
        * WebCore.scons: Ditto.
        * WebCore.vcproj/WebCore.vcproj: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * WebCoreSources.bkl: Ditto.

        * bindings/js/JSEventListener.cpp: Removed the JSLazyEventListener part.
        Removed unneeded includes. Removed incorrect ASSERT_CLASS_FITS_IN_CELL, since
        JSAbstractEventListener is not derived from JSCell.

        * bindings/js/JSEventListener.h: Removed the JSLazyEventListener part
        and the now-unneeded include of PlatformString.h.

        * bindings/js/JSLazyEventListener.cpp: Copied from bindings/js/JSEventListener.cpp.
        Kept only the JSLazyEventListener part.
        (WebCore::eventParameterName): Made this have internal linkage by adding "static".
        Also moved the default case out of the switch statement so we will get a warning
        if we omit any cases in the future.

        * bindings/js/JSLazyEventListener.h: Copied from bindings/js/JSEventListener.h.
        Kept only the JSLazyEventListener part.

        * bindings/js/ScriptController.cpp: Removed unneeded includes and sorted the
        remanining ones. Include JSLazyEventListener.h instead of JSEventListener.h.

2009-03-26  Darin Adler  <darin@apple.com>

        Reviewed by Geoff Garen.

        Renamed JSUnprotectedEventListener to JSEventListener.
        And related renames.

        Soon Geoff will make all JavaScript event listeners use mark instead
        of protect, so there's no need to emphasize "unprotected".

        * bindings/js/JSDOMApplicationCacheCustom.cpp:
        (WebCore::JSDOMApplicationCache::mark):
        (WebCore::JSDOMApplicationCache::addEventListener):
        (WebCore::JSDOMApplicationCache::removeEventListener):
        * bindings/js/JSDOMGlobalObject.cpp:
        (WebCore::JSDOMGlobalObject::~JSDOMGlobalObject):
        (WebCore::JSDOMGlobalObject::findJSEventListener):
        (WebCore::JSDOMGlobalObject::findOrCreateJSEventListener):
        (WebCore::JSDOMGlobalObject::jsEventListeners):
        (WebCore::JSDOMGlobalObject::jsInlineEventListeners):
        * bindings/js/JSDOMGlobalObject.h:
        * bindings/js/JSDOMWindowBase.h:
        * bindings/js/JSEventListener.cpp:
        (WebCore::JSEventListener::JSEventListener):
        (WebCore::JSEventListener::~JSEventListener):
        (WebCore::JSEventListener::listenerObj):
        (WebCore::JSEventListener::globalObject):
        (WebCore::JSEventListener::clearGlobalObject):
        (WebCore::JSEventListener::mark):
        * bindings/js/JSEventListener.h:
        (WebCore::JSEventListener::create):
        * bindings/js/JSMessagePortCustom.cpp:
        (WebCore::JSMessagePort::mark):
        (WebCore::JSMessagePort::addEventListener):
        (WebCore::JSMessagePort::removeEventListener):
        * bindings/js/JSWorkerContextCustom.cpp:
        (WebCore::JSWorkerContext::mark):
        (WebCore::JSWorkerContext::addEventListener):
        (WebCore::JSWorkerContext::removeEventListener):
        * bindings/js/JSWorkerCustom.cpp:
        (WebCore::JSWorker::mark):
        (WebCore::JSWorker::addEventListener):
        (WebCore::JSWorker::removeEventListener):
        * bindings/js/JSXMLHttpRequestCustom.cpp:
        (WebCore::JSXMLHttpRequest::mark):
        (WebCore::JSXMLHttpRequest::addEventListener):
        (WebCore::JSXMLHttpRequest::removeEventListener):
        * bindings/js/JSXMLHttpRequestUploadCustom.cpp:
        (WebCore::JSXMLHttpRequestUpload::mark):
        (WebCore::JSXMLHttpRequestUpload::addEventListener):
        (WebCore::JSXMLHttpRequestUpload::removeEventListener):
        * bindings/scripts/CodeGeneratorJS.pm:
        All just renaming.

2009-03-26  Darin Adler  <darin@apple.com>

        Reviewed by Geoff Garen.

        Renamed JSEventListener to JSProtectedEventListener.
        And related renames.

        Soon Geoff will make all JavaScript event listeners use mark instead
        of protect, and so this class will be be obsolete. We will rename
        JSUnrpotectedEventListener to JSEventListener in the next check-in,
        since that one will remain.

        * bindings/js/JSDOMGlobalObject.cpp:
        (WebCore::JSDOMGlobalObject::~JSDOMGlobalObject):
        (WebCore::JSDOMGlobalObject::findJSProtectedEventListener):
        (WebCore::JSDOMGlobalObject::findOrCreateJSProtectedEventListener):
        (WebCore::JSDOMGlobalObject::jsProtectedEventListeners):
        (WebCore::JSDOMGlobalObject::jsProtectedInlineEventListeners):
        * bindings/js/JSDOMGlobalObject.h:
        * bindings/js/JSDOMWindowBase.h:
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::addEventListener):
        (WebCore::JSDOMWindow::removeEventListener):
        * bindings/js/JSEventListener.cpp:
        (WebCore::JSProtectedEventListener::JSProtectedEventListener):
        (WebCore::JSProtectedEventListener::~JSProtectedEventListener):
        (WebCore::JSProtectedEventListener::listenerObj):
        (WebCore::JSProtectedEventListener::globalObject):
        (WebCore::JSProtectedEventListener::clearGlobalObject):
        (WebCore::JSLazyEventListener::JSLazyEventListener):
        (WebCore::JSLazyEventListener::parseCode):
        * bindings/js/JSEventListener.h:
        (WebCore::JSProtectedEventListener::create):
        * bindings/js/JSNodeCustom.cpp:
        (WebCore::JSNode::addEventListener):
        (WebCore::JSNode::removeEventListener):
        * bindings/js/JSSVGElementInstanceCustom.cpp:
        (WebCore::JSSVGElementInstance::addEventListener):
        (WebCore::JSSVGElementInstance::removeEventListener):
        * bindings/scripts/CodeGeneratorJS.pm:
        All just renaming.

2009-03-26  Dan Bernstein  <mitz@apple.com>

        Reviewed by Anders Carlsson.

        - fix <rdar://problem/6725042> BidiResolver::createBidiRunsForLine can
          create runs extending beyond the end

        No test because Safari does not use this version of
        createBidiRunsForLine() with the end iterator not pointing to the end
        of the text run.

        * platform/text/BidiResolver.h:
        (WebCore::BidiResolver::appendRun): Cap the end of the run at the end
        of the line and set the reachedEndOfLine flag. This mirrors the logic
        in the specialized version of appendRun() in bidi.cpp, which is why the
        problem did not show up in HTML. Also avoid creating empty runs.

2009-03-26  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dave Hyatt
        
        https://bugs.webkit.org/show_bug.cgi?id=24864

        Change the terminology from "inner content layer" to "direct compositing"
        for cases where we can push an image directly over to the compositing system,
        without having to draw it.
        
        Clean up much of the code which looks at style to determine if this is possible,
        and fix some bugs when backgrounds change dynamically.
        
        * rendering/RenderLayerBacking.cpp:
        (WebCore::hasBorderOutlineOrShadow):
        (WebCore::hasBoxDecorations):
        (WebCore::hasBoxDecorationsWithBackgroundImage):
        (WebCore::RenderLayerBacking::canBeSimpleContainerCompositingLayer):
        (WebCore::RenderLayerBacking::canUseDirectCompositing):
        (WebCore::RenderLayerBacking::detectDrawingOptimizations):
        (WebCore::RenderLayerBacking::rendererContentChanged):
        (WebCore::RenderLayerBacking::updateImageContents):
        * rendering/RenderLayerBacking.h:

2009-03-26  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dave Hyatt
        
        https://bugs.webkit.org/show_bug.cgi?id=23914

        Tests: compositing/overflow/ancestor-overflow.html
               compositing/overflow/parent-overflow.html

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::calculateClipRects):
        * rendering/RenderLayer.h:
        (WebCore::ClipRects::infiniteRect):
        New static method that returns a large rect that is used by the clipping
        logic.
        
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateGraphicsLayerGeometry):
        Use parentClipRects(), rather than calculateRects(), to compute the overflow
        rect that we'll use to create a masking layer for composited clipping.
        
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::clippedByAncestor):
        Use parentClipRects() to see whether there's a layer between us and our
        compositing ancestor which applies clipping.
        
        (WebCore::RenderLayerCompositor::clipsCompositingDescendants):
        A layer which imposes clipping to its children doesn't have to be a stacking
        context; it might be a normal flow layer; in either case, we can rely on the
        hasCompositingDescendant() bit.

2009-03-26  Steve Falkenburg  <sfalken@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=24837
        Escape key should dismiss select menu

        Reviewed by Adam Roben.

        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupWndProc):

2009-03-26  Kevin Ollivier  <kevino@theolliviers.com>

        Reviewed by Alexey Proskuryakov.

        Make sure the script uses LF line endings even on Windows.
        
        https://bugs.webkit.org/show_bug.cgi?id=24805

        * WebCore/make-generated-sources.sh: Change svn:eol-style to LF

2009-03-26  Eli Fidler  <eli.fidler@torchmobile.com>

        Reviewed by George Staikos.

        Remove warnings all over the place by making operator precedence
        explicit in cases like x && y || z.  No functional change.

        * css/CSSFontSelector.cpp:
        (WebCore::CSSFontSelector::addFontFaceRule):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::parseShadow):
        * dom/Document.cpp:
        (WebCore::Document::shouldScheduleLayout):
        * dom/Node.cpp:
        (WebCore::Node::isBlockFlowOrBlockTable):
        * dom/Node.h:
        (WebCore::Node::document):
        * dom/Position.cpp:
        (WebCore::Position::next):
        (WebCore::Position::upstream):
        (WebCore::Position::downstream):
        (WebCore::Position::getInlineBoxAndOffset):
        * dom/PositionIterator.cpp:
        (WebCore::PositionIterator::atStart):
        * dom/Range.cpp:
        (WebCore::Range::intersectsNode):
        * editing/Editor.cpp:
        (WebCore::Editor::setBaseWritingDirection):
        * editing/InsertParagraphSeparatorCommand.cpp:
        (WebCore::InsertParagraphSeparatorCommand::doApply):
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::doApply):
        * editing/TextIterator.cpp:
        (WebCore::TextIterator::advance):
        (WebCore::SimplifiedBackwardsTextIterator::advance):
        * editing/VisiblePosition.cpp:
        (WebCore::VisiblePosition::leftVisuallyDistinctCandidate):
        (WebCore::VisiblePosition::rightVisuallyDistinctCandidate):
        (WebCore::VisiblePosition::canonicalPosition):
        * editing/htmlediting.cpp:
        (WebCore::isMailBlockquote):
        (WebCore::lineBreakExistsAtPosition):
        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::parseMappedAttribute):
        * loader/FTPDirectoryDocument.cpp:
        (WebCore::processFileDateString):
        * loader/ImageLoader.cpp:
        (WebCore::ImageLoader::updateFromElement):
        * loader/TextResourceDecoder.cpp:
        (WebCore::TextResourceDecoder::checkForHeadCharset):
        * page/AccessibilityObject.cpp:
        (WebCore::updateAXLineStartForVisiblePosition):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::sendContextMenuEvent):
        * page/animation/AnimationBase.cpp:
        (WebCore::PropertyWrapperGetter::equals):
        (WebCore::PropertyWrapperShadow::equals):
        * platform/ContextMenu.cpp:
        (WebCore::ContextMenu::populate):
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::adjustScrollbarsAvoidingResizerCount):
        * platform/text/Base64.cpp:
        (WebCore::base64Encode):
        * platform/text/BidiResolver.h:
        (WebCore::::raiseExplicitEmbeddingLevel):
        (WebCore::::createBidiRunsForLine):
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::placeEllipsisBox):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::addChild):
        (WebCore::RenderBlock::repaintOverhangingFloats):
        (WebCore::RenderBlock::fillInlineSelectionGaps):
        (WebCore::RenderBlock::positionForPoint):
        (WebCore::RenderBlock::calcInlinePrefWidths):
        (WebCore::RenderBlock::hasLineIfEmpty):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::imageChanged):
        (WebCore::RenderBox::localCaretRect):
        (WebCore::RenderBox::positionForPoint):
        (WebCore::RenderBox::shrinkToAvoidFloats):
        * rendering/RenderObject.h:
        (WebCore::objectIsRelayoutBoundary):
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::clippedOverflowRectForRepaint):
        * rendering/RenderText.cpp:
        (WebCore::RenderText::calcPrefWidths):
        * rendering/bidi.cpp:
        (WebCore::RenderBlock::determineStartPosition):
        (WebCore::textWidth):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::diff):
        * rendering/style/StyleInheritedData.cpp:
        (WebCore::cursorDataEquivalent):
        * rendering/style/StyleRareInheritedData.cpp:
        (WebCore::StyleRareInheritedData::shadowDataEquivalent):
        * rendering/style/StyleRareNonInheritedData.cpp:
        (WebCore::StyleRareNonInheritedData::shadowDataEquivalent):
        (WebCore::StyleRareNonInheritedData::animationDataEquivalent):
        (WebCore::StyleRareNonInheritedData::transitionDataEquivalent):

2009-03-26  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Holger Freyther.

        https://bugs.webkit.org/show_bug.cgi?id=24804
        [GTK] 401 responses cause rogue content to be loaded

        Our soup code handles 401 responses itself, so we should not feed
        the headers and data of those responses to the loader.

        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::gotHeadersCallback):
        (WebCore::gotChunkCallback):

2009-03-25  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt and Darin Adler.
        
        Fixed <rdar://problem/6603167> Crash in WebKit!JSC::JSGlobalObject::resetPrototype
        during Stress test (#3 & #7 WER crashes for Safari 4 Beta)
        
        The problem was that allocation of the global object would, for just a
        moment, leave the global object's prototype unprotected from GC. This
        bug doesn't apply to non-global DOM objects because their prototypes are
        cached and marked by the global object.

        No test case because the crashing condition is hard to deterministically
        produce in a normal build, and in a Windows Release build with
        COLLECT_ON_EVERY_ALLOCATION set to 1, existing tests crash/hang.

        * bindings/js/JSDOMWindowShell.cpp:
        (WebCore::JSDOMWindowShell::setWindow):
        * bindings/js/WorkerScriptController.cpp:
        (WebCore::WorkerScriptController::initScript): Protect the global object's
        prototype from GC during construction, since the global object does not
        yet point to it, and therefore won't mark it.

2009-03-25  Dean Jackson  <dino@apple.com>

        Reviewed by Simon Fraser

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

        When using hardware compositing, some images can be directly
        rendered by the hardware - no need to draw them into a separate
        context, therefore saving memory.
        Only images with certain style properties can be directly
        composited - basically anything that is not a simple image requires
        the usual rendering path (eg. if the image has borders).

        Test: compositing/direct-image-compositing.html

        * manual-tests/resources/simple_image.png: Added.
        * manual-tests/simple-image-compositing.html: Added.
        * platform/graphics/Image.h:
        (WebCore::Image::startAnimation):
            - move this to public
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::imageChanged):
            - poke compositing layer if image has changed
        (WebCore::RenderImage::notifyFinished):
            - let the compositing layer know that it can render the image
        * rendering/RenderImage.h:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::rendererContentChanged):
        * rendering/RenderLayer.h:
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::canUseInnerContentLayer):
        (WebCore::RenderLayerBacking::detectDrawingOptimizations):
        (WebCore::RenderLayerBacking::rendererContentChanged):
        * rendering/RenderLayerBacking.h:
            - code to hook up direct compositing of images where
              possible

2009-03-25  David Levin  <levin@chromium.org>

        Reviewed by Dimitri Glazkov.

        Chromium build fix. Fix #include in V8NodeFilterCondition.cpp due to the
        rename of V8NodeFilter to V8NodeFilterCondition.

        * bindings/v8/V8NodeFilterCondition.cpp:

2009-03-25  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Darin Adler
        
        https://bugs.webkit.org/show_bug.cgi?id=24817
        
        When the slider range is zero, avoid a divide by zero, which caused the
        thumb to be positioned off in the weeds, which broke painting.

        Test: media/video-empty-source.html

        * rendering/RenderSlider.cpp:
        (WebCore::SliderRange::proportionFromValue):
        (WebCore::SliderRange::valueFromProportion):
        (WebCore::sliderPosition):
        (WebCore::RenderSlider::setValueForPosition):

2009-03-24  Eric Seidel  <eric@webkit.org>

        Reviewed by Darin Adler.

        Remove dead code and style cleanup
        https://bugs.webkit.org/show_bug.cgi?id=24684

        * html/CanvasStyle.cpp:
        (WebCore::CanvasStyle::CanvasStyle):
          Coverty was annoyed that we didn't initialize all of our members.  I agree, but I didn't
          want to paste all 8 members each time, so I just cleaned up the existing constructors and left them.
        * page/FocusController.cpp:
        (WebCore::FocusController::setFocusedNode):
          "node" was checked just above and is already known to be non-null
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::insertOnlyThisLayer):
          We were already using parentLayer w/o a NULL check above, so just add an explicit ASSERT and use it w/o NULL check
        (WebCore::RenderLayer::resize):
          element is already ASSERTed above, no need to null check it here
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::addCell):
          currentCell.cell was just assigned to the value "cell" which is known to be non-null, no need to null check again.

2009-03-24  Eric Seidel  <eric@webkit.org>

        Reviewed by Darin Adler.

        Move ASSERT(foo) to before where foo-> is used
        https://bugs.webkit.org/show_bug.cgi?id=24684

        * platform/chromium/PasteboardChromium.cpp:
        (WebCore::Pasteboard::writeImage):
          Move ASSERTs to the top of the function, code was using "node" before ASSERT(node), once I moved
          ASSERT(node) to the top of the function it made sense to move the rest of them there too.
        * rendering/SVGRenderSupport.cpp:
        (WebCore::prepareToRenderSVGContent):
          move ASSERT(object) to *before* we use "object" :)

2009-03-24  Eric Seidel  <eric@webkit.org>

        Reviewed by Simon Fraser.

        Make TextTokenizer ASSERT that the buffer was freed
        https://bugs.webkit.org/show_bug.cgi?id=24684

        * loader/TextDocument.cpp:
        (WebCore::TextTokenizer::TextTokenizer):
        (WebCore::TextTokenizer::~TextTokenizer):
        (WebCore::TextTokenizer::finish):
          Make it clear by adding a ~TextTokenizer that finish() will always be called and the memory never leaked.

2009-03-24  Eric Seidel  <eric@webkit.org>

        Reviewed by Darin Adler.

        Fix case where lBreak.obj->isBR() when lBreak.obj was NULL
        https://bugs.webkit.org/show_bug.cgi?id=24684

        I don't have a test case where we were taking the wrong path here
        However, adding an ASSERT(lBreak.obj) before this usage caused
        multiple bidi tests to fail, so lBreak.obj can be null here.

        * rendering/bidi.cpp:
        (WebCore::RenderBlock::findNextLineBreak):
          lBreak.obj can be null, so we can't call ->isBR() on it unconditionally.

2009-03-24  Eric Seidel  <eric@webkit.org>

        Reviewed by Simon Fraser.

        Style cleanup and dead code removal in dom, editing
        https://bugs.webkit.org/show_bug.cgi?id=24684

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::getUpperLeftCorner):
        (WebCore::ContainerNode::getLowerRightCorner):
        (WebCore::ContainerNode::getRect):
          Coverty was (rightly) confused as to what the hell "o" was being used for
          and whether or not it would ever be NULL.  I added some ASSERTS so that people (and machines)
          would be less confused about the logic in getUpperLeftCorner/getLowerRightCorner
        * dom/Document.cpp:
        (WebCore::Document::recalcStyle):
          Remove dead code, this block already checked that change == Force
        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::removeInlineStyle):
          Coverty correctly identified that traversePreviousNodePostOrder can return NULL, thus
          prev will be null, and we don't really explicitly handle it (like we probably should)
          It's OK though, because we end up creating a null position object, which may not have
          been what we intended, but we certainly don't crash.
        * editing/InsertParagraphSeparatorCommand.cpp:
        (WebCore::InsertParagraphSeparatorCommand::doApply):
          Remove dead code, insertionPosition.node() is already checked to be non-null above.
        * editing/markup.cpp:
        (WebCore::appendStartMarkup):
          removed dead code, annotate is already known to be true at this point in the file
          !annotate was checked above, and break; was called.

2009-03-24  Eric Seidel  <eric@webkit.org>

        Reviewed by Simon Fraser.

        CSS dead code removal and cleanup from Coverty errors
        https://bugs.webkit.org/show_bug.cgi?id=24684

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
          Every other place in the code we check settings() for NULL, so I made these places
          check too, even though we should never be resolving style against a document which has
          no frame (which I believe is the only time settings() can be null)
        * css/CSSStyleSheet.cpp:
        (WebCore::CSSStyleSheet::styleSheetChanged):
          Removing dead code, "root" can never be null here.
        * css/SVGCSSStyleSelector.cpp:
        (WebCore::colorFromSVGColorCSSValue):
        (WebCore::CSSStyleSelector::applySVGProperty):
          Extra returns in the old macros caused dead code.  Removing the old macros and use modern
          ones instead. :)
          Extra null checks to value were not needed.  Added an ASSERT at the top of the function
          to make it clear that value will never be NULL.
          Added colorFromSVGColorCSSValue to clean up the code a little.

2009-03-24  Eric Seidel  <eric@webkit.org>

        Reviewed by Simon Fraser.

        Font fallback cleanup and added ASSERT for GlyphPageTreeNode
        https://bugs.webkit.org/show_bug.cgi?id=24684

        * css/CSSFontSelector.cpp:
        (WebCore::compareFontFaces):
          Coverty was concerned that it was possible to index off the end of weightFallbackRuleSets
          I can't read the code well enough to tell, so I tried to make the code clearer
          and added an ASSERT.        
        * platform/graphics/GlyphPageTreeNode.cpp:
        (WebCore::GlyphPageTreeNode::initializePage):
          Coverty believes we can crash here due to j being larger than GlyphPage::size.  I think to is already
          known to be < GlyphPage::size due to the min() statement above, but not being sure I added an ASSERT.

2009-03-24  Eric Seidel  <eric@webkit.org>

        Reviewed by Simon Fraser.

        Coverty inspired fixes in Animations/Transforms
        https://bugs.webkit.org/show_bug.cgi?id=24684

        * page/animation/AnimationBase.h:
          Fix animate() signatures to match so that the virtual methods actually override one another. :)
        * page/animation/AnimationController.cpp:
        (WebCore::AnimationControllerPrivate::removeFromStartTimeResponseWaitList):
          Attempt to fix this method, prevAnimation was never set to anything but NULL,
          as far as I can tell the author originally intended to update it at the end
          of the loop, which is what I changed this code to do.
        * page/animation/ImplicitAnimation.cpp:
        (WebCore::ImplicitAnimation::animate):
          Make method signature match AnimationBase::animate
        * page/animation/ImplicitAnimation.h:
        * page/animation/KeyframeAnimation.cpp:
        (WebCore::KeyframeAnimation::animate):
          Make method signature match AnimationBase::animate
        * page/animation/KeyframeAnimation.h:
        * platform/graphics/transforms/PerspectiveTransformOperation.cpp:
        (WebCore::PerspectiveTransformOperation::blend):
          if (blendToIdentity) already returned above.
        * platform/graphics/transforms/RotateTransformOperation.cpp:
        (WebCore::RotateTransformOperation::blend):
          if (blendToIdentity) already returned above.

2009-03-25  Eli Fidler  <eli.fidler@torchmobile.com>

        Reviewed by George Staikos.

        Fix compiler warnings regarding assignments in if statements.

        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::createFormData):
        * plugins/PluginPackage.cpp:
        (WebCore::PluginPackage::compare):

2009-03-25  Dan Bernstein  <mitz@apple.com>

        Reviewed by Dave Hyatt.

        - fix <rdar://problem/6472150> repro crash in
          RenderBlock::rightmostPosition(bool, bool) const at mercotte.fr using
          menus

        Test: fast/inline/continuation-positioned-reparenting.html

        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::splitFlow): When repurposing the existing
        container as the "pre" block, clear its positioned objects list, because
        positioned descendants may end up in a different block after the split.

2009-03-24  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dave Hyatt
        
        https://bugs.webkit.org/show_bug.cgi?id=24784
        
        Length values in transform operations need to take zoom into account.

        Test: fast/transforms/transforms-with-zoom.html

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

2009-03-25  David Hyatt  <hyatt@apple.com>

        Reviewed by Simon Fraser.

        https://bugs.webkit.org/show_bug.cgi?id=24809, background-clip/origin don't use the correct
        values.  Add support for the new values (while preserving the old values for backwards
        compatibility).

        Changed some existing test cases to use the new values.

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseFillProperty):
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        (WebCore::CSSPrimitiveValue::operator EFillBox):
        * css/CSSValueKeywords.in:

2009-03-25  Brett Wilson  <brettw@dhcp-172-22-71-191.mtv.corp.google.com>

        Reviewed by Dimitri Glazkov.

        Fix complex text opacity on the Chromium Windows port.
        https://bugs.webkit.org/show_bug.cgi?id=24757

        Test: fast/text/complex-text-opacity.html

        * platform/graphics/chromium/FontChromiumWin.cpp:
        (WebCore::):
        (WebCore::TransparencyAwareFontPainter::TransparencyAwareFontPainter::TransparencyAwareFontPainter):
        (WebCore::TransparencyAwareFontPainter::TransparencyAwareFontPainter::init):
        (WebCore::TransparencyAwareFontPainter::TransparencyAwareFontPainter::initializeForGDI):
        (WebCore::TransparencyAwareFontPainter::TransparencyAwareFontPainter::~TransparencyAwareFontPainter):
        (WebCore::TransparencyAwareFontPainter::TransparencyAwareGlyphPainter::TransparencyAwareGlyphPainter):
        (WebCore::TransparencyAwareFontPainter::TransparencyAwareGlyphPainter::~TransparencyAwareGlyphPainter):
        (WebCore::TransparencyAwareFontPainter::TransparencyAwareGlyphPainter::estimateTextBounds):
        (WebCore::TransparencyAwareFontPainter::TransparencyAwareGlyphPainter::drawGlyphs):
        (WebCore::TransparencyAwareFontPainter::TransparencyAwareUniscribePainter::hdc):
        (WebCore::TransparencyAwareFontPainter::TransparencyAwareUniscribePainter::TransparencyAwareUniscribePainter):
        (WebCore::TransparencyAwareFontPainter::TransparencyAwareUniscribePainter::~TransparencyAwareUniscribePainter):
        (WebCore::TransparencyAwareFontPainter::TransparencyAwareUniscribePainter::estimateTextBounds):
        (WebCore::Font::drawGlyphs):
        (WebCore::Font::drawComplexText):

2009-03-25  David Hyatt  <hyatt@apple.com>

        Reviewed by Eric Seidel

        Fix for bug 23198, border images should not clip to border radii.  The border-image should just ignore
        the border-radius, since the assumption is that any desired rounding will be built into the border-image
        itself.

        Note that I do not agree with this change, but I am matching the spec.

        Added fast/borders/border-image-border-radius.html

        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintNinePieceImage):

2009-03-25  Gustavo Noronha Silva  <gns@gnome.org>

        Reviewed by Holger Freyther.

        https://bugs.webkit.org/show_bug.cgi?id=24750
        [GTK] requests download instead of displaying page

        Fix the Content-Type headers we get from soup, so that we set a
        proper media type on the ResourceResponse.

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

2009-03-25  Gustavo Noronha Silva  <gns@gnome.org>

        Reviewed by Holger Freyther.

        https://bugs.webkit.org/show_bug.cgi?id=24600
        [GTK] responses with status code >= 400 should not be given special treatment

        Do not special case requests that have HTTP responses >=
        400. Redirects are handled automatically by libsoup, but the rest
        of the responses should be treated like any other.

        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::):
        (WebCore::gotHeadersCallback):
        (WebCore::gotChunkCallback):
        (WebCore::finishedCallback):

2009-03-25  Darin Adler  <darin@apple.com>

        Reviewed by John Sullivan.

        Tidy up LegacyWebArchive a bit. And don't include favicons in web archives when
        they are being used only for selections, not an entire document.

        * WebCore.base.exp: Remove exported function that's not used in WebKit.

        * loader/archive/cf/LegacyWebArchive.cpp:
        (WebCore::LegacyWebArchive::createPropertyListRepresentation): Made a static member
        function so it can share private things with other member functions. Added some FIXME
        comments to a branch of code I think is dead. Changed boolean argument into a named
        one. Renamed to match other similar functions.
        (WebCore::LegacyWebArchive::createResourceResponseFromPropertyListData): Ditto.
        (WebCore::LegacyWebArchive::createResource): Ditto.
        (WebCore::LegacyWebArchive::create): Merged the create and init functions.
        (WebCore::LegacyWebArchive::rawDataRepresentation): Added some assertions because
        we should never fail to write (we can fail to read).
        (WebCore::LegacyWebArchive::createResourceResponseFromMacArchivedData): Made a static
        member function as above.
        (WebCore::LegacyWebArchive::createFromSelection): Ditto.
        (WebCore::LegacyWebArchive::create): Iterate the vector with indices rather than
        iterators. Only include the favicon if the first node is the document since we don't
        want to include the favicon when copying and pasting.

        * loader/archive/cf/LegacyWebArchive.h: Made one of the create functions private.
        Made the Mac-specific functions be static member functions. Made other helpers be
        static member functions. Removed the nit function.

        * loader/archive/cf/LegacyWebArchiveMac.mm:
        (WebCore::LegacyWebArchive::createResourceResponseFromMacArchivedData): Updated
        comment and made this a static member function.
        (WebCore::LegacyWebArchive::createPropertyListRepresentation): Ditto. Also made
        it so we only type cast in one place.

2009-03-25  Darin Adler  <darin@apple.com>

        Reviewed by David Hyatt.

        Bug 24740: crash in RenderSlider::setPositionFromValue when calling pause() after setting <video> to display: none
        https://bugs.webkit.org/show_bug.cgi?id=24740
        rdar://problem/6679873

        Bug 12104: Native Slider: When the thumb's height is specified as a percentage, it is not centered properly
        https://bugs.webkit.org/show_bug.cgi?id=12104

        Test: media/video-display-none-crash.html

        The problem here was that RenderSlider was trying to position its thumb in a way that
        requires it to call updateLayout inside rendering code. The right way to position a
        child renderer is to do layout, so I had to write a layout function. And then fix a few
        other small problems shown by the same test case.

        * rendering/RenderSlider.cpp: Made defaultTrackLength have internal linkage.
        Renamed HTMLSliderThumbElement to SliderThumbElement because we only use the HTML
        prefix for public DOM classes, not elements used as implementation details.
        Made SliderThumbElement function members private and got rid of unneeded default
        argument value for shadowParent.
        (WebCore::SliderRange::SliderRange): Added. Parses precision, max, and min attributes.
        (WebCore::SliderRange::clampValue): Added. Does standard clamping based on the above.
        (WebCore::SliderRange::valueFromElement): Added. Reads the value from the element in
        a way that clamps to the range.
        (WebCore::sliderPosition): Added. Computes the slider position: a double.
        (WebCore::SliderThumbElement::SliderThumbElement): Removed unneeded explicit
        initialization of m_initialClickPoint.
        (WebCore::SliderThumbElement::defaultEventHandler): Call setValueForPosition instead
        of calling setCurrentPosition and valueChanged.
        (WebCore::RenderSlider::RenderSlider): Remove unneeded explicit initialization of m_thumb.
        (WebCore::RenderSlider::styleDidChange): Remove unneeded second argument to createThumbStyle.
        (WebCore::RenderSlider::createThumbStyle): Remove unneeded second argument. Get rid of code
        setting the position to relative and setting the left and top. We now handle positioning
        in a custom layout function.
        (WebCore::RenderSlider::layout): Rewrote to handle positioning of the thumb as layout.
        (WebCore::RenderSlider::updateFromElement): Added code to immediately update the value
        in the element if it's out of range. This clamping used to be done as a side effect of
        setPositionFromValue. Also, this has nothing to do with the renderer, so at some point
        it could be moved into HTMLInputElement. Removed call to setPositionFromValue
        and instead just rely on the call to setNeedsLayout. Fix the setNeedsLayout call to be
        a normal setNeedsLayout(true), not a setNeedsLayout(true, false), because we do want
        this to be propagated to the parent -- it's not called during layout.
        (WebCore::RenderSlider::setValueForPosition): Refactor to use the new SliderRange
        class. Also don't call setCurrentPosition; instead just call setNeedsLayout.
        (WebCore::RenderSlider::currentPosition): Use the actual position of the renderer rather
        than the style to find the position; that means this needs to be done after layout is done.
        Also removed unneeded runtime checks and replaced them with assertions, after checking
        all callers to see they already guarantee this.
        (WebCore::RenderSlider::trackSize): Removed unneeded runtime checks and replaced them
        with assertions, after checking all callers to see they already guarantee this.
        (WebCore::RenderSlider::inDragMode): Added a null check for m_thumb so this won't
        crash if called early on a brand new RenderSlider.

        * rendering/RenderSlider.h: Made all functions private except for forwardEvent and inDragMode.
        Renamed HTMLSliderThumbElement to SliderThumbElement because we only use the HTML
        prefix for public DOM classes, not elements used as implementation details. Made the
        mouseEventIsInThumb function non-virtual. Removed the return value and argument from
        setPositionFromValue. Removed valueChanged and setCurrentPosition. Removed the oldStyle
        argument to createThumbStyle (see above). Made SliderThumbElement a friend so it can use some
        private member functions.

2009-03-25  Eli Fidler  <eli.fidler@torchmobile.com>

        Reviewed by George Staikos.

        Fix ambiguous else cases by adding braces to nested if()s with elses.

        * loader/MainResourceLoader.cpp:
        (WebCore::MainResourceLoader::continueAfterContentPolicy):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::updateDragAndDrop):
        * rendering/RenderListMarker.cpp:
        (WebCore::toArmenianUnder10000):
        * rendering/TextControlInnerElements.cpp:
        (WebCore::TextControlInnerTextElement::defaultEventHandler):

2009-03-24  Eli Fidler  <eli.fidler@torchmobile.com>

        Reviewed by George Staikos.

        Move variable into proper platform block to quiet warning.

        * html/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::drawTextInternal):

2009-03-24  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Antti Koivisto.

        Fix for <rdar://problem/6719375> Deal with QTKit loadstate changes when playing streaming movies

        *  WebCore/html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::setNetworkState): Deal with media engine reviving after having
        network state of NETWORK_NO_SOURCE.

        *  WebCore/platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivate::updateStates): Reset m_readyState at each state change since
        some types of movies currently cause QTKit's load state to bounce around. QTMovieLoadStatePlaythroughOK
        corresponds to HaveFutureData, not HaveEnoughData.

2009-03-24  Adele Peterson  <adele@apple.com>

        Reviewed by Darin Adler.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=24707
        <rdar://problem/6593021> Deleting with a caret in a blank, quoted line decreases the quoting, but does not delete the line

        * editing/TypingCommand.cpp: (WebCore::TypingCommand::deleteKeyPressed):
        After breaking out of an empty mail blockquote, we still want continue with the deletion
        so actual content will get deleted, and not just the quote style.

2009-03-24  Darin Adler  <darin@apple.com>

        Reviewed by Brady Eidson.

        <rdar://problem/6624662> REGRESSION (r39904): can't save certain web pages as web archive (ones without favicons!)

        * loader/archive/cf/LegacyWebArchive.cpp:
        (WebCore::LegacyWebArchive::create): Added a null check.

2009-03-24  Adam Langley  <agl@google.com>

        Reviewed by Darin Fisher.

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

        The Skia drawLine function takes subpixel values and attempts to draw
        a line with subpixel precision. This is complex and slow for drawing
        scrollbars which use only vertical and horizontal lines.

        This changes the Chromium Linux scrollbar code to use drawIRect.

        * platform/chromium/ScrollbarThemeChromiumLinux.cpp:
        (WebCore::ScrollbarThemeChromium::invalidateOnMouseEnterExit):
        (WebCore::drawVertLine):
        (WebCore::drawHorizLine):
        (WebCore::drawBox):
        (WebCore::ScrollbarThemeChromium::paintTrackPiece):
        (WebCore::ScrollbarThemeChromium::paintThumb):

2009-03-24  David Kilzer  <ddkilzer@apple.com>

        Bug 23310: Setting an absolute path (/abs) on an <iframe> with no src doesn't resolve the URL properly

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

        Reviewed by Darin Adler.

        Test: fast/frames/iframe-no-src-set-location.html

        * dom/Document.cpp:
        (WebCore::Document::completeURL): If m_baseURL is empty or is
        about:blank and we have a parent document, use the parent
        document's URL for the base when completing a new URL.

2009-03-24  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dave Hyatt
        
        https://bugs.webkit.org/show_bug.cgi?id=24659
        
        When hit-testing 3d-transformed layers, it doesn't make sense to project the hitTestRect
        into the coordinate space of the layer, and doing so can result in pathalogical quads
        that break hit testing. In that case, simply use the same bounds as used for painting,
        which are the composited bounds for this layer.

        Test: transforms/3d/hit-testing/rotated-hit-test.html

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

2009-03-24  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dave Hyatt

        https://bugs.webkit.org/show_bug.cgi?id=24436
        
        When compositing is enabled, painting and hit testing end up using different
        clipping roots, because, for painting, every composited layer is a clipping root,
        but for hit testing only layers with transforms are. To fix this, we use
        temporary clip rects for hit testing, if the page is in compositing mode.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paintLayer):
        (WebCore::RenderLayer::hitTestLayer):
        (WebCore::RenderLayer::parentClipRects):
        (WebCore::RenderLayer::calculateRects):
        * rendering/RenderLayer.h:

2009-03-24  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein
        
        https://bugs.webkit.org/show_bug.cgi?id=24782

        Fix regression with CSS clip rects with non-length values, by reverting to
        the original code, but passing the zoom multiplier through convertToLength().
        
        Also make stylistic change in createTransformOperations(), renaming 'inStyle'
        to 'style.
        
        Tested by existing tests.

        * css/CSSStyleSelector.cpp:
        (WebCore::convertToLength):
        (WebCore::CSSStyleSelector::applyProperty):
        (WebCore::CSSStyleSelector::createTransformOperations):

2009-03-24  David Hyatt  <hyatt@apple.com>

        Reviewed by Simon Fraser

        https://bugs.webkit.org/show_bug.cgi?id=21789, overflow:hidden elements should clip their foreground contents
        to a border-radius.

        This patch makes non-self-painting overflow layers and control clips work with border-radius.  RenderLayers
        that should be clipped by overflow ancestors with border-radius are still broken.

        Added fast/clip/overflow-border-radius-clip.html

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::pushContentsClip):

2009-03-24  David Hyatt  <hyatt@apple.com>

        Reviewed by Simon Fraser

        https://bugs.webkit.org/show_bug.cgi?id=21789, overflow:hidden elements should clip their foreground contents.
        
        This first patch makes overflow:hidden properly clip the foreground contents of overflow:hidden replaced elements.  Common
        replaced elements now default to overflow:hidden in the UA stylesheet (this is what the spec specifically recommends be
        done).
    
        Added fast/replaced/border-radius-clip.html

        * css/html4.css:
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::paint):
        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::paint):

2009-03-24  Adele Peterson  <adele@apple.com>

        RS by Mark Rowe.

        Only build these Mail quirks checks in on the Mac.

        * dom/Document.cpp: (WebCore::disableRangeMutation):
        * html/HTMLElement.cpp: (WebCore::HTMLElement::inEitherTagList):

2009-03-24  Brent Fulgham  <bfulgham@webkit.org>

        Build fix, no review.

        Remove ResourceLoaderCFNet.cpp from build list for Cairo Releas
        and Debug targets.

        * WebCore.vcproj/WebCore.vcproj:

2009-03-24  Eric Carlson  <eric.carlson@apple.com>

        Fix layout tests broken by r41907.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::setReadyState): Don't set "was playing" based on the new ready state

2009-03-24  Dmitry Titov  <dimich@chromium.org>

        Reviewed by Dimitri Glazkov.

        https://bugs.webkit.org/show_bug.cgi?id=24689
        Fix Chromium compilation errors.

        * bindings/v8/WorkerContextExecutionProxy.cpp:
        (WebCore::WorkerContextExecutionProxy::FindOrCreateEventListener):
        (WebCore::WorkerContextExecutionProxy::RemoveEventListener):

2009-03-24  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=24759
        Add missing methods Element.prototype.removeMatchingStyleClasses and
        Node.prototype.enclosingNodeOrSelfWithNodeNameInArray to SourceFrame content
        iframe. These methods are called by Element.prototype.removeStyleClass and
        Node.prototype.enclosingNodeOrSelfWithNodeName.

        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype._loaded):

2009-03-24  Mark Mentovai  <mark@chromium.org>

        Reviewed by Mark Rowe.

        https://bugs.webkit.org/show_bug.cgi?id=24653
        WebKit should be buildable without prefix header injection.
        Adds missing #includes and forward declarations as needed.

        * editing/SmartReplaceCF.cpp:
        * platform/graphics/mac/ColorMac.mm:
        * platform/graphics/mac/FontCacheMac.mm:
        * platform/graphics/mac/FontCustomPlatformData.h:
        * platform/graphics/mac/FontMac.mm:
        * platform/graphics/mac/FontMacATSUI.mm:
        * platform/graphics/mac/FontPlatformData.h:
        * platform/graphics/mac/FontPlatformDataMac.mm:
        * platform/graphics/mac/GraphicsContextMac.mm:
        * platform/graphics/mac/SimpleFontDataMac.mm:
        * platform/mac/FoundationExtras.h:
        * platform/mac/LocalCurrentGraphicsContext.h:
        * platform/mac/WebCoreSystemInterface.h:
        * platform/mac/WebCoreSystemInterface.mm:
        * platform/mac/WebCoreTextRenderer.h:
        * platform/mac/WebCoreTextRenderer.mm:
        * platform/mac/WebFontCache.h:
        * platform/mac/WebFontCache.mm:
        * platform/text/PlatformString.h:
        * platform/text/mac/ShapeArabic.c:
        * platform/text/mac/StringMac.mm:
        * rendering/RenderThemeChromiumMac.h:

2009-03-24  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        - fix <rdar://problem/6107874> by capping the nesting depth of
          "block-level" elements generated by the parser

        Test: fast/parser/block-nesting-cap.html

        * html/HTMLParser.cpp:
        (WebCore::HTMLParser::HTMLParser):
        (WebCore::HTMLParser::insertNode):
        (WebCore::HTMLParser::pushBlock):
        (WebCore::HTMLParser::popOneBlockCommon):
        (WebCore::HTMLParser::freeBlock):
        * html/HTMLParser.h:

2009-03-23  Greg Bolsinga  <bolsinga@apple.com>

        Reviewed by David Kilzer.

        https://bugs.webkit.org/show_bug.cgi?id=24771
        
        DOMTimeStamps are based upon 1970.

        * platform/mac/GeolocationServiceMac.mm:
        (-[WebCoreCoreLocationObserver locationManager:didUpdateToLocation:fromLocation:]):

2009-03-23  Eric Seidel  <eric@webkit.org>

        Build fix, no review.

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::createVisiblePosition): change .container to .isNotNull()

2009-03-23  Eric Seidel  <eric@webkit.org>

        Reviewed by Darin Adler.

        Rename Position::container to m_anchorNode and make it private
        https://bugs.webkit.org/show_bug.cgi?id=24760

        More code cleanup for Position.

        Change all uses of m_container to node()
        Eventually most uses of node() should change to anchorNode() to designate
        that it's the node the Position is anchored to, but not necessarily the
        container of the position (it could be the before/after neighbor).

        Remove any code which sets m_container, and change it to use a new
        Position::moveToPosition function which takes a node and offset.
        It never makes sense to change the node and leave the offset.

        * dom/Position.h:
        (WebCore::Position::Position):
        (WebCore::Position::clear):
        (WebCore::Position::anchorNode):
        (WebCore::Position::node):
        (WebCore::Position::moveToPosition):
        (WebCore::Position::moveToOffset):
        (WebCore::Position::isNull):
        (WebCore::Position::isNotNull):
        (WebCore::operator==):
        * dom/Range.cpp:
        (WebCore::Range::create):
        (WebCore::Range::compareBoundaryPoints):
        * dom/RangeBoundaryPoint.h:
        (WebCore::RangeBoundaryPoint::container):
        (WebCore::RangeBoundaryPoint::set):
        (WebCore::RangeBoundaryPoint::setOffset):
        (WebCore::RangeBoundaryPoint::setToChild):
        (WebCore::RangeBoundaryPoint::setToStart):
        (WebCore::RangeBoundaryPoint::setToEnd):

2009-03-17  Eric Seidel  <eric@webkit.org>

        Reviewed by David Hyatt.

        document.write() should be able to make a document strict mode
        https://bugs.webkit.org/show_bug.cgi?id=24336

        Remove an implicit write of "<html>" on the first document.write call
        this was added as part of a KDE import http://trac.webkit.org/changeset/798
        with no layout test or explanation.  I can't think of any reason why
        an implicit <html> write is necessary (or correct), so I'm removing it and
        adding a test for the correct behavior.  The parser will add any necessary
        HTMLHTMLElements during the write() anyway.

        Our behavior is now tested by fast/dom/Document/document-write-doctype
        and matches IE, FF fails this new test.  Mozilla bug filed:
        https://bugzilla.mozilla.org/show_bug.cgi?id=483908

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

2009-03-23  Sam Weinig  <sam@webkit.org>

        Reviewed by Dan Bernstein.

        Fix for <rdar://problem/6140966>
        Empty Caches does not clear the Cross-site XMLHttpRequest preflight cache

        * WebCore.base.exp:
        * WebCore.xcodeproj/project.pbxproj:
        * loader/CrossOriginPreflightResultCache.cpp:
        (WebCore::CrossOriginPreflightResultCache::empty):
        * loader/CrossOriginPreflightResultCache.h:

2009-03-23  Darin Adler  <darin@apple.com>

        Reviewed by Adele Peterson.

        Bug 24726: hit testing doesn't work right when the click is on anonymous content
        https://bugs.webkit.org/show_bug.cgi?id=24726
        rdar://problem/6696992

        Test: editing/selection/hit-test-anonymous.html

        * rendering/RenderBR.cpp:
        (WebCore::RenderBR::positionForPoint): Call createVisiblePosition instead of
        creating a VisiblePosition directly. It will handle finding non-anonymous
        content nearby if node() is 0.
        * rendering/RenderBlock.cpp:
        (WebCore::positionForPointRespectingEditingBoundaries): Ditto.
        (WebCore::positionForPointWithInlineChildren): Ditto.
        (WebCore::RenderBlock::positionForPoint): Ditto.
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::positionForPoint): Ditto.
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::positionForPoint): Ditto.
        (WebCore::RenderObject::createVisiblePosition): Added.
        * rendering/RenderObject.h: Added createVisiblePosition.
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::positionForPoint): Call createVisiblePosition.
        * rendering/RenderSVGInlineText.cpp:
        (WebCore::RenderSVGInlineText::positionForPoint): Ditto.
        * rendering/RenderText.cpp:
        (WebCore::RenderText::positionForPoint): Ditto.

2009-03-23  Adele Peterson  <adele@apple.com>

        Reviewed by Darin Adler & Dave Hyatt.

        Fix for <rdar://problem/6621310> REGRESSION(35185): Apple Travel HTML emails missing some style after Safari 4 upgrade

        Leopard Mail doesn't expect <style> to be in the body.  This change reverts back to the old behavior of
        moving <style> to <head> for that version of Mail.

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

2009-03-23  Adele Peterson  <adele@apple.com>

        Reviewed by Mark Rowe & Dave Hyatt.

        Merge some of the individual Mail quirks into two settings that we can check for future quirks.

        * WebCore.base.exp:
        * dom/Document.cpp:
        (WebCore::disableRangeMutation):
        (WebCore::Document::nodeChildrenChanged):
        (WebCore::Document::nodeWillBeRemoved):
        (WebCore::Document::textInserted):
        (WebCore::Document::textRemoved):
        (WebCore::Document::textNodesMerged):
        (WebCore::Document::textNodeSplit):
        * page/Settings.cpp:
        (WebCore::Settings::Settings):
        (WebCore::Settings::setNeedsLeopardMailQuirks):
        (WebCore::Settings::setNeedsTigerMailQuirks):
        * page/Settings.h:
        (WebCore::Settings::needsLeopardMailQuirks):
        (WebCore::Settings::needsTigerMailQuirks):

2009-03-23  Ada Chan  <adachan@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=24762
        Support text-indent in <option> elements on windows platform.

        Reviewed by Adele Peterson.

        * css/themeWin.css:
        * platform/PopupMenuStyle.h: We don't honor font specified on <option> elements right now.  Make this
        explicit via windows themed default stylesheet.
        (WebCore::PopupMenuStyle::PopupMenuStyle): Also store text-indent and text-direction.
        (WebCore::PopupMenuStyle::textIndent):
        (WebCore::PopupMenuStyle::textDirection):
        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenu::paint): Adjust the text's x-coordinate if text-indent is supported for options and 
        text-indent is specified with LTR direction.
        * rendering/RenderMenuList.cpp:
        (WebCore::RenderMenuList::updateOptionsWidth): Take text-indent into account if theme supports text-indent for options.
        (WebCore::RenderMenuList::itemStyle): Use new PopupMenuStyle constructor on windows.
        (WebCore::RenderMenuList::menuStyle): Ditto.
        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::menuStyle): Ditto.
        * rendering/RenderTheme.h:
        (WebCore::RenderTheme::popupOptionSupportsTextIndent): Added.  Default is false since we are only supporting it in windows for now.
        * rendering/RenderThemeWin.h:
        (WebCore::RenderThemeWin::popupOptionSupportsTextIndent): Returns true for windows.

2009-03-23  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=24699
        REGRESSION: Java Applets broken
        <rdar://problem/6707494>

        Fix loading Java applets without a codeBase. Only pass the base (up to the
        the last path component) of the baseURL to the plug-in.

        * html/HTMLAppletElement.cpp:
        (WebCore::HTMLAppletElement::createRenderer):
        * platform/KURL.cpp:
        (WebCore::KURL::baseAsString):
        * platform/KURL.h:

2009-03-23  Darin Adler  <darin@apple.com>

        Reviewed by Sam Weinig.

        * platform/KURL.h: Removed now-incorrect comments.
        None of the parts include the separator characters any more, now that
        query doesn't include the "?", so the comments explaining which do and do
        not are no-longer helpful.

2009-03-23  David Levin  <levin@chromium.org>

        Reviewed by Dimitri Glazkov.

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

        Renamed files V8NodeFilter -> V8NodeFilterCondition to reflect
        class names.  Also fixed some headers that got mangled in search/replace
        operations.

        No change in behavior, so no test.

        * bindings/v8/V8NodeFilter.h: Removed.
        * bindings/v8/V8NodeFilterCondition.cpp: Renamed from WebCore/bindings/v8/V8NodeFilter.cpp.
        * bindings/v8/V8NodeFilterCondition.h: Added.
        * bindings/v8/custom/V8ClipboardCustom.cpp:
        * bindings/v8/custom/V8DocumentCustom.cpp:
        * bindings/v8/custom/V8ElementCustom.cpp:
        * bindings/v8/custom/V8HTMLCanvasElementCustom.cpp:
        * bindings/v8/custom/V8NavigatorCustom.cpp:

2009-03-23  Darin Fisher  <darin@chromium.org>

        Reviewed by Antti Koivisto.

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

        Adds a unique across-browser-sessions identifier to FormData, which may
        be used by ResourceHandle as a secondary cache key to enable cached
        form submissions.

        At issue: two otherwise identical form submissions may result in
        completely independent responses, which may each be appropriate to
        store and reuse from cache.

        * html/HTMLFormElement.cpp: Added call to FormData::setIdentifier so that
        we only enable cached form submissions for those generated by HTML.  This
        way we do not bother with POSTs generated by XMLHttpRequest.
        (WebCore::generateFormDataIdentifier):
        (WebCore::HTMLFormElement::createFormData):
        * platform/network/FormData.cpp: Initialize m_identifier to 0, which means
        the unspecified identifier.  So by default there is no identifier and
        nothing changes.
        (WebCore::FormData::FormData):
        * platform/network/FormData.h: Added m_identifier with setter and getter.
        (WebCore::FormData::setIdentifier):
        (WebCore::FormData::identifier):

2009-03-23  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Antti Koivisto
        
        https://bugs.webkit.org/show_bug.cgi?id=24733
        
        Fix media controller with full-page zoom. Previously, the media controller
        shadow nodes never saw style changes on the RenderMedia, so did not respond
        to zooming at all. Now, we update the style on the shadow renderers
        whenever RenderMedia gets a style change. Also fix the video thumb in
        the theme to be scaled properly.

        Test: media/video-controls-zoomed.html

        * rendering/MediaControlElements.cpp:
        (WebCore::MediaControlShadowRootElement::updateStyle):
        (WebCore::MediaTextDisplayElement::MediaTextDisplayElement):
        (WebCore::MediaTextDisplayElement::updateStyle):
        (WebCore::MediaControlInputElement::MediaControlInputElement):
        (WebCore::MediaControlInputElement::updateStyle):
        * rendering/MediaControlElements.h:
        * rendering/RenderMedia.cpp:
        (WebCore::RenderMedia::styleDidChange):
        * rendering/RenderMedia.h:
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::adjustSliderThumbSize):

2009-03-23  Mike Belshe  <mike@belshe.com>

        Reviewed by Darin Adler.

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

        Rework StringImpl::create methods to try to allocate a single buffer
        rather than allocating both the StringImpl class and a separate data
        buffer.

        * platform/text/StringImpl.cpp:
        * platform/text/StringImpl.h:

2009-03-23  Darin Adler  <darin@apple.com>

        Reviewed by Antti Koivisto.

        Based on a patch by Nico Weber <nicolasweber@gmx.de>

        Bug 24755: LayoutTests/http/tests/misc/url-in-utf16le.html regression
        https://bugs.webkit.org/show_bug.cgi?id=24755

        * platform/text/TextEncoding.cpp:
        (WebCore::TextEncoding::isUTF7Encoding): Added. Checks if the current encoding
        is UTF7 without loading extended codecs.
        (WebCore::TextEncoding::encodingForFormSubmission): Use isUTF7Encoding() instead
        of comparing with UTF7Encoding(). Eliminate the explicit check of
        noExtendedTextEncodingNameUsed() because that's now handled by the functions
        that this function calls instead.

        * platform/text/TextEncoding.h: Added isUTF7Encoding function.
        Also tweaked formatting a bit.

2009-03-20  Peter Kasting  <pkasting@google.com>

        Reviewed by Darin Fisher.

        https://bugs.webkit.org/show_bug.cgi?id=24720
        RenderThemeChromium should draw something for Slider parts instead of
        dropping them on the floor.

        * platform/chromium/ChromiumBridge.h:
        * rendering/RenderThemeChromiumWin.cpp:
        (WebCore::RenderThemeChromiumWin::adjustSliderThumbSize):
        (WebCore::RenderThemeChromiumWin::paintSliderTrack):
        (WebCore::RenderThemeChromiumWin::determineSliderThumbState):
        (WebCore::RenderThemeChromiumWin::getThemeData):
        * rendering/RenderThemeChromiumWin.h:
        (WebCore::RenderThemeChromiumWin::paintSliderThumb):

2009-03-23  Glen Murphy  <glen@chromium.org>

        Reviewed by Darin Fisher.

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

        Fix Skia drawing of highly scaled bitmaps; the conversion to
        IntRect produced visible layout test failures in highly scaled 
        coordinate systems.

        Test: svg/custom/image-small-width-height.svg

        * WebCore\platform\graphics\skia\ImageSkia.cpp:

2009-03-23  David Kilzer  <ddkilzer@apple.com>

        Provide JavaScript exception information after slow script timeout

        Reviewed by Oliver Hunt.

        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::evaluate): Changed to report
        exceptions for the Interrupted completion type as well.

2009-03-23  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Darin Adler

        https://bugs.webkit.org/show_bug.cgi?id=24736
        
        Fix three mostly-unrelated problems with full-page zoom:
        
        * dom/Document.cpp:
        (WebCore::Document::elementFromPoint):
        Document::elementFromPoint() needs to take full-page zoom into account.
        
        * dom/MouseRelatedEvent.cpp:
        (WebCore::MouseRelatedEvent::receivedTarget):
        Take full-page zoom into account when computing offsetX/offsetY.
        
        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::listBoxDefaultEventHandler):
        Don't use offsetX/offsetY when hit testing list boxes; offsets were broken
        with full-page zoom, and using pageX/pageY is easier because we don't
        have to worry about the event target, and we already have a point in
        absolute coordinates.

        Tests: fast/forms/listbox-hit-test-zoomed.html
               fast/forms/search-zoomed.html
               fast/forms/slider-zoomed.html

2009-03-23  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein

        https://bugs.webkit.org/show_bug.cgi?id=24753
        
        The rect for CSS 'clip' needs to have zooming applied to it.

        Test: fast/css/clip-zooming.html

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

2009-03-23  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Adam Roben.

        <rdar://problem/6704282>
        https://bugs.webkit.org/show_bug.cgi?id=24719
        QTMovieWinTimer logic inversion

        Fix logic inversion in the Win32 timer used by QTMovieWin that caused it to always
        use SetTimer, even when the intervals was below USER_TIMER_MINIMUM. A side effect of
        this was that a movie timer would sometimes be blocked for significant amounts of time 
        because WM_TIMER messages are not processed when the thread's message queue has any
        higher priority messages, and WebCore/Win's timer uses PostMessage for low interval
        timers. Also change SetTimer call to use HWND and custom message instead of 
        timer function since the timer already has an HWND for processing PostMessage.

        Not possible to make a test for this because it is so timing dependant.

        * platform/graphics/win/QTMovieWinTimer.cpp:
        (TimerWindowWndProc):
        (setSharedTimerFireDelay):

2009-03-23  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Adele Peterson.

        https://bugs.webkit.org/show_bug.cgi?id=24588
        
        Update media element implementation to current HTML5 spec

        New tests: 
               media/media-constants.html
               media/video-seek-no-src-exception.html
               media/video-source-add-src.html
               media/video-src-invalid-remove.html
               media/video-src-plus-source.html
               media/video-timeupdate-during-playback.html

        * dom/EventNames.h: Remove obsolute events, add new ones.
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::HTMLMediaElement): Initialize new member vars.
        (WebCore::HTMLMediaElement::attributeChanged): Trigger load() only when we don't
        have a source.
        (WebCore::HTMLMediaElement::removedFromDocument): Deal with state name changes.
        (WebCore::HTMLMediaElement::scheduleProgressEvent): New, create a progress event and 
        add it to the event queue to be dispatch when the timer fires.
        (WebCore::HTMLMediaElement::scheduleEvent): New, create a generic event and add
        it to the event queue to be dispatch when the timer fires.
        (WebCore::HTMLMediaElement::enqueueEvent): Add an event to the queue and ticke the 
        asynch event timer.
        (WebCore::HTMLMediaElement::asyncEventTimerFired): Dispatch all pending events.
        (WebCore::HTMLMediaElement::loadTimerFired): Either trigger the initial load or
        try to load the next <source> url.
        (WebCore::HTMLMediaElement::load): Minor style change.
        (WebCore::HTMLMediaElement::loadInternal): The first part of the spec load algorithm, cleanup
        the current load (if any) and set up state for a new load.
        (WebCore::HTMLMediaElement::selectMediaResource): Deal with no 'src' or <source>, post 'loadstart'
        event, and initiate load from 'src' if present.
        (WebCore::HTMLMediaElement::loadNextSourceChild): Initiate load from next <source> url, or trigger
        noneSupported() if no more to consider.
        (WebCore::HTMLMediaElement::loadResource): Instantiate a new MediaPlayer and ask it to load a url.
        (WebCore::HTMLMediaElement::startProgressEventTimer): Start the repeating progress event timer.
        (WebCore::HTMLMediaElement::noneSupported): Post error event and set up state when no valid 
        media url was found.
        (WebCore::HTMLMediaElement::mediaEngineError): Post error event and set up state when no valid 
        media engine failed with a decode error or a network error.
        (WebCore::HTMLMediaElement::mediaPlayerNetworkStateChanged):
        (WebCore::HTMLMediaElement::setNetworkState): Updated for new spec network states.
        (WebCore::HTMLMediaElement::mediaPlayerReadyStateChanged):
        (WebCore::HTMLMediaElement::setReadyState): Updated for new spec ready state.
        (WebCore::HTMLMediaElement::progressEventTimerFired): Bail if the network is not active.
        (WebCore::HTMLMediaElement::seek): Return INVALID_STATE_ERR exception if state is too low or
        if player hasn't been set up yet. This is necessary becase load() is async. Clear the flag
        we use to guard against sending 'ended' more than once.
        (WebCore::HTMLMediaElement::duration): Don't bother calling media engine before it has metadata.
        (WebCore::HTMLMediaElement::setDefaultPlaybackRate): Remove exception param, 0 is no longer an
        invalid rate. 
        (WebCore::HTMLMediaElement::setPlaybackRate): Remove exception param, 0 is no longer an
        invalid rate. Cache rate being set so we can use it later if media engine isn't ready now.
        (WebCore::HTMLMediaElement::play): Remove exception param, play() before load() now just
        starts loading asynchronously.
        (WebCore::HTMLMediaElement::playInternal): Remove exception param. Fire 'waiting' or 'playing'
        event depending on current state.
        (WebCore::HTMLMediaElement::pause): Remove exception param, pause() before load() now just
        starts loading asynchronously.
        (WebCore::HTMLMediaElement::pauseInternal): Remove exception param.
        (WebCore::HTMLMediaElement::setVolume): dispatchEventAsync -> scheduleEvent
        (WebCore::HTMLMediaElement::setMuted): dispatchEventAsync -> scheduleEvent
        (WebCore::HTMLMediaElement::togglePlayState): Remove exception param.
        (WebCore::HTMLMediaElement::beginScrubbing): pause() doesn't take an exception param.
        (WebCore::HTMLMediaElement::startPlaybackProgressTimer): New, starts timer that fires 4 times per
        second when the movie is playing to timeupdate so we can post 'timeupdate' events.
        (WebCore::HTMLMediaElement::playbackProgressTimerFired): Timer proc.
        (WebCore::HTMLMediaElement::scheduleTimeupdateEvent): Bottleneck around scheduling a 'timeupdate'
        event because we both fire them them when the spec says we should and when the media engine
        says that time has jumped, but we don't want to fire more than one at a given movie time. We also
        use this bottleneck to keep track of the last time one was posted so we won't fire too often
        during playback.
        (WebCore::HTMLMediaElement::canPlay): readyState now tracks whether or not we have metadata.
        (WebCore::HTMLMediaElement::havePotentialSourceChild): New, checks to see if there are a <source>
        element with a 'src' attribute that we have not tried to load yet.
        (WebCore::HTMLMediaElement::nextSourceChild): New, returns the url and content type of the next
        <source> element that we haven't tried to load.
        (WebCore::HTMLMediaElement::mediaPlayerTimeChanged): Schedule 'seeked' event when seeking completes.
        Set a flag when we post the 'ended' event, clear it when time changed and we aren't at the end since
        some media engines call this proc more than once when playback reaches the end and stops, but we
        don't want to post 'ended' more than once.
        (WebCore::HTMLMediaElement::mediaPlayerDurationChanged): New, added so media engine can inform
        when the movie duration changes and we can post 'durationchanged' event.
        (WebCore::HTMLMediaElement::mediaPlayerRateChanged): New, added so media engine can inform when
        the rate changed and we can updated our cached rate. This is useful because we only want to know
        post periodic 'timeupdate' events when the movie is actually playing, and because we want to know
        the actual playback rate when it differs from what we tried to set.
        (WebCore::HTMLMediaElement::mediaPlayerSizeChanged): New, added so media engine can inform when
        a movie's intrinsic size changes and we can inform the renderer.
        (WebCore::HTMLMediaElement::potentiallyPlaying): Renamed from activelyPlaying since the spec now
        uses "actively playing" for this concept. Update logic for new state names and un-comment calls
        to stoppedDueToErrors() and pausedForUserInteraction() since the spec says those condiditons
        are part of the answer.
        (WebCore::HTMLMediaElement::endedPlayback): Update logic for new state names. 
        (WebCore::HTMLMediaElement::stoppedDueToErrors): New, spec says this logic should be part of
        the determination of "potentially playing".
        (WebCore::HTMLMediaElement::pausedForUserInteraction): New, placeholder for when (if) user
        agent supports this spec concept.
        (WebCore::HTMLMediaElement::updatePlayState): Stop timer used to fire periodic 'timeupdate' 
        events when we pauses the movie. Set the media engine rate before calling play() in case it
        wasn't set up when the rate was changed.
        (WebCore::HTMLMediaElement::stopPeriodicTimers): New, stop the progress event and 'timeupate'
        event timers.
        (WebCore::HTMLMediaElement::userCancelledLoad): New, logic pulled out of documentWillBecomeInactive
        and updated for the current spec.
        (WebCore::HTMLMediaElement::documentWillBecomeInactive): Moved some logic to userCancelledLoad.
        (WebCore::HTMLMediaElement::documentDidBecomeActive): Update comments.
        (WebCore::HTMLMediaElement::initialURL): Update for refactoring of code that determines the 
        initial url.
        * html/HTMLMediaElement.h: Change ReadyState and NetworkState enums to match names in the spec,
        update for changes in .cpp.
        (WebCore::HTMLMediaElement::):

        * html/HTMLMediaElement.idl: Update ready state and network state constants for spec changes.
        defaultPlaybackRate, playbackRate, play(), and pause() no longer raise exceptions.

        * html/HTMLSourceElement.cpp:
        (WebCore::HTMLSourceElement::insertedIntoDocument): Update for network state name changes.

        * html/HTMLVideoElement.cpp:
        (WebCore::HTMLVideoElement::updatePosterImage): Update for ready state name changes.

        * html/MediaError.h:
        (WebCore::MediaError::): add MEDIA_ERR_NONE_SUPPORTED.

        * html/MediaError.idl: add MEDIA_ERR_NONE_SUPPORTED.

        * loader/MediaDocument.cpp:
        (WebCore::MediaDocument::defaultEventHandler): play() and pause() don't take an exception.

        * platform/graphics/MediaPlayer.cpp:
        (WebCore::NullMediaPlayerPrivate::readyState): Update for newtork state name changes.
        (WebCore::MediaPlayer::sizeChanged): New, so engine can report intrinsic size changes.
        (WebCore::MediaPlayer::rateChanged): New, so engine can report rate changes.
        (WebCore::MediaPlayer::durationChanged): New, so engine can report duration changes.
        * platform/graphics/MediaPlayer.h: Update NetworkState and ReadyState enum names to match spec
        states.
        (WebCore::MediaPlayerClient::mediaPlayerDurationChanged): New.
        (WebCore::MediaPlayerClient::mediaPlayerRateChanged): New.
        (WebCore::MediaPlayerClient::mediaPlayerSizeChanged): New.
        (WebCore::MediaPlayer::):

        * platform/graphics/gtk/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivate::MediaPlayerPrivate): Update for network/ready state name changes.
        (WebCore::MediaPlayerPrivate::load): Ditto.
        (WebCore::MediaPlayerPrivate::updateStates): Ditto.
        (WebCore::MediaPlayerPrivate::loadingFailed): Ditto.

        * platform/graphics/mac/MediaPlayerPrivateQTKit.h: Update for network/ready state name changes.
        Remove endPointTimer, it is no longer necessary. Add m_enabledTrackCount and m_duration.
        (WebCore::MediaPlayerPrivate::metaDataAvailable):
        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivate::MediaPlayerPrivate): No more m_endPointTimer or m_endTime. Initialize
        m_enabledTrackCount and m_duration. Update for network/ready state name changes.
        (WebCore::MediaPlayerPrivate::load): Update for network/ready state name changes.
        (WebCore::MediaPlayerPrivate::play): No more m_endPointTimer.
        (WebCore::MediaPlayerPrivate::pause): Ditto.
        (WebCore::MediaPlayerPrivate::currentTime): No more m_endTime.
        (WebCore::MediaPlayerPrivate::seek): Ditto.
        (WebCore::MediaPlayerPrivate::doSeek): Ditto, plus don't call setRate(0) when the rate is
        already zero.
        (WebCore::MediaPlayerPrivate::setEndTime): No more m_endTime.
        (WebCore::MediaPlayerPrivate::updateStates): Update for network/ready state name changes. Return
        different errors depending on what causes a failure. Watch for and report duration changes.
        (WebCore::MediaPlayerPrivate::rateChanged): Report rate changes.
        (WebCore::MediaPlayerPrivate::sizeChanged): Report size changes.
        (WebCore::MediaPlayerPrivate::didEnd): No more endpoint timer.
        (WebCore::MediaPlayerPrivate::setVisible): Update for network/ready state name changes.
        (WebCore::MediaPlayerPrivate::disableUnsupportedTracks): Don't return number of unsupported
        tracks, store in m_enabledTrackCount so we can use it to help determine causes of failure.

        * platform/graphics/qt/MediaPlayerPrivatePhonon.cpp:
        (WebCore::MediaPlayerPrivate::MediaPlayerPrivate): Update for network/ready state name changes.
        (WebCore::MediaPlayerPrivate::load): Ditto.
        (WebCore::MediaPlayerPrivate::duration): Ditto.
        (WebCore::MediaPlayerPrivate::updateStates): Ditto.
        (WebCore::MediaPlayerPrivate::naturalSize): Ditto.

        * platform/graphics/win/MediaPlayerPrivateQuickTimeWin.cpp:
        (WebCore::MediaPlayerPrivate::MediaPlayerPrivate): No more m_endPointTimer. Update for 
        network/ready state name changes.
        (WebCore::MediaPlayerPrivate::load): Update for network/ready state name changes. No more
        m_endPointTimer.
        (WebCore::MediaPlayerPrivate::play): No more m_endPointTimer.
        (WebCore::MediaPlayerPrivate::pause): Ditto. 
        (WebCore::MediaPlayerPrivate::setEndTime): Ditto.
        (WebCore::MediaPlayerPrivate::updateStates): Update for network/ready state name changes.
        (WebCore::MediaPlayerPrivate::didEnd): No more m_endPointTimer.
        * platform/graphics/win/MediaPlayerPrivateQuickTimeWin.h:

        * rendering/MediaControlElements.cpp:
        (WebCore::MediaControlPlayButtonElement::defaultEventHandler): Update for network/ready state 
        name changes.
        (WebCore::MediaControlSeekButtonElement::defaultEventHandler): Ditto.

2009-03-22  Kevin Ollivier  <kevino@theolliviers.com>

        wxGTK build fix. Add missing header.

        * platform/wx/wxcode/gtk/non-kerned-drawing.cpp:

2009-03-22  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein
        
        https://bugs.webkit.org/show_bug.cgi?id=24665
        
        Image-map code in RenderImage could result in RenderImage::nodeAtPoint()
        setting HitTestResult::innerNode(), but returning false, which violates
        hit testing rules. Use a temporary HitTestResult so that we only fill in
        result when we know we've hit.

        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::nodeAtPoint):

2009-03-22  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein
        
        https://bugs.webkit.org/show_bug.cgi?id=24743
        
        Fix hit testing regression from r41840. We need to pass the temporary
        HitTestResult when testing sublayers, then only copy to 'result' when
        the layer is known to have been hit.

        Test: fast/layers/zindex-hit-test.html

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

2009-03-20  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Darin Adler

        https://bugs.webkit.org/show_bug.cgi?id=24733
        
        Fix hit testing on video controls after full page zoom by fixing wider issue
        with event->pageX(), pageY() with zooming. pageX and pageY are "fixed" to be
        invariant under zooming (for JavaScript), so we keep an actual page point around
        in MouseEvent::absoluteLocation() to avoid the need to factor in zooming everywhere.

        * dom/MouseRelatedEvent.cpp:
        (WebCore::MouseRelatedEvent::initCoordinates):
        (WebCore::MouseRelatedEvent::computePageLocation):
        * dom/MouseRelatedEvent.h:
        (WebCore::MouseRelatedEvent::absoluteLocation):
        (WebCore::MouseRelatedEvent::setAbsoluteLocation):
        Member var, and getter and setter for absoluteLocation.
        New method, computePageLocation(), to compute the actual page point,
        and call it when creating and initting mouse-related events.

        * dom/Node.cpp:
        (WebCore::Node::dispatchMouseEvent):
        (WebCore::Node::dispatchWheelEvent):
        Keep non-adjusted pageX and pageY around, and call setAbsoluteLocation()
        on the event to replace a potentially rounded point.
        
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::defaultEventHandler):
        Clean up slider handling code.
        
        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::listBoxDefaultEventHandler):
        Add FIXME comment for use of offsetX/offsetY.
        
        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::handleContextMenuEvent):
        Use absoluteLocation() when hit testing for context menus.
        
        * rendering/RenderFrameSet.cpp:
        (WebCore::RenderFrameSet::userResize):
        Use absoluteLocation() when resizing frames.
        
        * rendering/RenderMedia.cpp:
        (WebCore::RenderMedia::forwardEvent):
        Use absoluteLocation() when hit testing media controls.

        * rendering/RenderSlider.cpp:
        (WebCore::HTMLSliderThumbElement::defaultEventHandler):
        (WebCore::RenderSlider::mouseEventIsInThumb):
        Use absoluteLocation() when handling slider events.

        (WebCore::RenderSlider::forwardEvent):
        Factor some code out of HTMLInputElement::defaultEventHandler().
        
        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::forwardEvent):
        Use absoluteLocation() when hit testing search field buttons, which fixees
        bugs in the search field with zooming.

2009-03-21  David Levin  <levin@chromium.org>

        Reviewed by Dimitri Glazkov.

        https://bugs.webkit.org/show_bug.cgi?id=24727
        Add V8XMLHttpRequest*.

        * bindings/v8/V8XMLHttpRequestUtilities.cpp: Added.
        * bindings/v8/V8XMLHttpRequestUtilities.h: Added.
        * bindings/v8/custom/V8XMLHttpRequestConstructor.cpp: Added.
        * bindings/v8/custom/V8XMLHttpRequestCustom.cpp: Added.
        * bindings/v8/custom/V8XMLHttpRequestUploadCustom.cpp: Added.

2009-03-21  David Levin  <levin@chromium.org>

        Reviewed by Dimitri Glazkov.

        https://bugs.webkit.org/show_bug.cgi?id=24725
        Add V8NodeFilter.

        * bindings/v8/V8NodeFilter.cpp: Added.
        * bindings/v8/V8NodeFilter.h: Added.

2009-03-21  Dan Bernstein  <mitz@apple.com>

        Rubber-stamped by Kevin Decker

        - remove some redundant #include statements

        * bindings/js/JSDOMWindowBase.cpp:

2009-03-20  Dan Bernstein  <mitz@apple.com>

        Reviewed by Mark Rowe.

        - fix <rdar://problem/6574185> REGRESSION (3.2.2-TOT): hang in text drawing code

        * platform/graphics/win/FontCGWin.cpp:
        (WebCore::drawGDIGlyphs): Changed glyph stroking to fill and stroke each
        glyph as a separate path, instead of all glyphs as a single path. This
        matches what CGContextShowGlyphsWithAdvances() does, and has comparable
        performance.

2009-03-20  Dean Jackson  <dino@apple.com>

        Reviewed by Simon Fraser

        Build fix for ENABLE(3D_RENDERING)

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

2009-03-20  Dave Moore  <davemoore@google.com>

        Reviewed by Dimitri Glazkov.

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

        A bug in the V8 bindings is preventing chromium from setting the href on the
        location object...any attempt throws a security error, not just for javascript
        protocol

        * page/Location.idl:

2009-03-20  Craig Schlenter  <craig.schlenter@gmail.com>

        Reviewed by Dimitri Glazkov.

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

        Include stdio.h needed for printf on gcc 4.4.0

        * platform/KURLGoogle.cpp:

2009-03-20  Mike Belshe <mike@belshe.com>

        Reviewed by Darin Fisher.

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

        Don't let comments at the end of an event handler
        break the event handler.

        No change in behavior, so no test.

        * bindings/v8/V8LazyEventListener.cpp:
        (WebCore::V8LazyEventListener::getWrappedListenerFunction):

2009-03-20  Norbert Leser  <norbert.leser@nokia.com>

        Reviewed by Darin Adler.

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

        Fixes missing line terminator character (;) after macro call.
        It is common practice to add the trailing ";" where macros are substituted
        and not where they are defined with #define.
        This change is consistent with other macro declarations across webkit,
        and it also solves compilation failure with symbian compilers. 
 
        No change in behavior, so no test.

        * bindings/js/JSDOMWindowShell.cpp:
        * bindings/js/JSEventListener.cpp:
        * bindings/js/JSImageConstructor.cpp:
        * bindings/js/JSInspectedObjectWrapper.cpp:
        * bindings/js/JSInspectorCallbackWrapper.cpp:
        * bindings/js/JSNamedNodesCollection.cpp:
        * bindings/js/JSNodeFilterCondition.cpp:
        * bindings/js/JSOptionConstructor.cpp:
        * bindings/js/JSQuarantinedObjectWrapper.cpp:
        * bindings/js/JSRGBColor.cpp:
        * bindings/js/JSWorkerContextBase.cpp:
        * bindings/js/JSXMLHttpRequestConstructor.cpp:
        * bindings/js/JSXSLTProcessorConstructor.cpp:
        * bindings/scripts/CodeGeneratorJS.pm:

2009-03-20  Mike Belshe  <mike@belshe.com>

        Reviewed by Dimitri Glazkov and Dave Hyatt.

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

        Make the minimum timer configurable for different platforms.

        * page/DOMTimer.cpp:
        (WebCore::DOMTimer::DOMTimer):
        (WebCore::DOMTimer::fired):
        * page/DOMTimer.h:
        (WebCore::DOMTimer::minTimerInterval):
        (WebCore::DOMTimer::setMinTimerInterval):

2009-03-20  Dean McNamee  <deanm@chromium.org>

        Reviewed by Darin Adler.

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

        Make sure to consistently match new/delete and fastMalloc/fastFree.

        * css/CSSSelectorList.cpp:
        (WebCore::CSSSelectorList::adoptSelectorVector):
        (WebCore::CSSSelectorList::deleteSelectors):

2009-03-20  Dan Bernstein  <mitz@apple.com>

        Reviewed by Dave Hyatt.

        - fix https://bugs.webkit.org/show_bug.cgi?id=23739
          <rdar://problem/6556371> REGRESSION (r36513): iframe isn't sized properly upon load

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::percentHeightDescendants): Added this accessor.
        * rendering/RenderBlock.h:
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::layoutRows): Extended the check for
        children that flex to include other descendants with percent height
        which is relative to the cell.

2009-03-20  Dmitry Titov  <dimich@chromium.org>

        Reviewed by Alexey Proskuryakov.

        https://bugs.webkit.org/show_bug.cgi?id=24706
        Remove ScriptExecutionContext::encoding() since Workers do not need it.
        WorkerContext::encoding() is simply removed, while Document::encoding()
        made non-virtual and private. Workers use UTF-8 now except when instructed
        otherwise by http header. Also updated test.

        * dom/Document.h: Made encoding() non-virtual and private.
        * dom/ScriptExecutionContext.h: removed encoding().

        * workers/Worker.cpp:
        (WebCore::Worker::Worker):
        (WebCore::Worker::notifyFinished):
        * workers/WorkerContext.cpp: removed encoding() implementation.
        (WebCore::WorkerContext::WorkerContext):
        (WebCore::WorkerContext::completeURL):
        * workers/WorkerContext.h: removed encoding()
        (WebCore::WorkerContext::create):
        * workers/WorkerContextProxy.h:
        * workers/WorkerImportScriptsClient.cpp:
        (WebCore::WorkerImportScriptsClient::didReceiveData):
        * workers/WorkerMessagingProxy.cpp:
        (WebCore::WorkerMessagingProxy::startWorkerContext):
        * workers/WorkerMessagingProxy.h:
        * workers/WorkerThread.cpp:
        (WebCore::WorkerThreadStartupData::create):
        (WebCore::WorkerThreadStartupData::WorkerThreadStartupData):
        (WebCore::WorkerThread::create):
        (WebCore::WorkerThread::WorkerThread):
        (WebCore::WorkerThread::workerThread):
        * workers/WorkerThread.h:
        In all these, removed storing encoding and 'inheriting' it from the parent.
        Instead, they are all using UTF-8 now.

2009-03-20  Timothy Hatcher  <timothy@apple.com>

        Change how threading exceptions are checked so they are reported
        by what round they were added. That way WebKit can decided the
        behavior per-round based on linked-on-or-after checks.

        <rdar://problem/6626741&6648478&6635474&6674079>

        Reviewed by Darin Adler.

        * WebCore.base.exp: Export the new symbols.
        * bindings/objc/DOMAbstractView.mm: Use the new WebCoreThreadViolationCheckRoundOne macro.
        * bindings/scripts/CodeGeneratorObjC.pm: Ditto.
        * platform/ThreadCheck.h:
        * platform/mac/ThreadCheck.mm:
        (WebCore::readThreadViolationBehaviorFromUserDefaults): Refactor how the default is read.
        (WebCore::setDefaultThreadViolationBehavior): Take a round argument.
        (WebCore::reportThreadViolation): Ditto.
        (WebCoreReportThreadViolation): Ditto.

2009-03-20  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig.

        Fixed up an out-of-date comment.

        * bindings/js/JSDOMWindowCustom.h:
        (WebCore::JSDOMWindow::customPut):

2009-03-20  Beth Dakin  <bdakin@apple.com>

        Reviewed by Dave Hyatt.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=20909 REGRESSION 
        (r35318): A press release at pfizer.com does not display correctly
        - and corresponding -
        <rdar://problem/6680073>

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::invalidateContainerPrefWidths):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::markContainingBlocksForLayout):

2009-03-20  Eric Seidel  <eric@webkit.org>

        Reviewed by Justin Garcia.

        maxDeepOffset is confusing and should be removed
        https://bugs.webkit.org/show_bug.cgi?id=24586

        Abstract some hard-to-read (but shared) logic into a new renderedAsNonInlineTableOrHR function.
        Add first/lastDeepEditingPositionForNode Position creation functions
        and deploy them to places we used to call maxDeepOffset.

        Rename Position::atStart and atEnd to atStartOfTree atEndOfTree
        Add a new Position::atFirst/atLastEditingPositionForNode() and use these
        to replace a few more callers for maxDeepOffset()
        
        Rename maxDeepOffset to lastEditingOffsetForNode (so that we mere mortals have some clue what it does)

        "Editing positions" are confusing because they have one
        of two behaviors, depending on if the container node is ignored
        by editing (if editingIgnoresContent(node) returns true) or not.
        Positions referring to nodes ignored by editing are
        neighbor-relative (they are before or after the node) where as
        positions reffering to other nodes are container-relative
        (they are between two child nodes of the container, identified
        by the offset() member).  I will be fixing this confusion in
        future patches.  These renames hopefully make the current behavior clearer.

        * dom/Position.cpp:
        (WebCore::Position::previous):
        (WebCore::Position::next):
        (WebCore::Position::atFirstEditingPositionForNode):
        (WebCore::Position::atLastEditingPositionForNode):
        (WebCore::Position::atStartOfTree):
        (WebCore::Position::atEndOfTree):
        (WebCore::Position::previousCharacterPosition):
        (WebCore::Position::nextCharacterPosition):
        (WebCore::Position::upstream):
        (WebCore::Position::isCandidate):
        (WebCore::firstDeepEditingPositionForNode):
        (WebCore::lastDeepEditingPositionForNode):
        * dom/Position.h:
        * dom/PositionIterator.cpp:
        (WebCore::PositionIterator::operator Position):
        (WebCore::PositionIterator::increment):
        (WebCore::PositionIterator::decrement):
        (WebCore::PositionIterator::atEnd):
        (WebCore::PositionIterator::atEndOfNode):
        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::positionAvoidingSpecialElementBoundary):
        * editing/DeleteSelectionCommand.cpp:
        (WebCore::isTableCellEmpty):
        (WebCore::DeleteSelectionCommand::removeNode):
        (WebCore::DeleteSelectionCommand::handleGeneralDelete):
        * editing/Editor.cpp:
        (WebCore::Editor::advanceToNextMisspelling):
        * editing/InsertLineBreakCommand.cpp:
        (WebCore::InsertLineBreakCommand::doApply):
        * editing/InsertListCommand.cpp:
        (WebCore::InsertListCommand::doApply):
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::positionAtEndOfInsertedContent):
        * editing/TypingCommand.cpp:
        (WebCore::TypingCommand::forwardDeleteKeyPressed):
        * editing/VisiblePosition.cpp:
        (WebCore::VisiblePosition::previous):
        (WebCore::VisiblePosition::leftVisuallyDistinctCandidate):
        (WebCore::VisiblePosition::left):
        (WebCore::VisiblePosition::rightVisuallyDistinctCandidate):
        (WebCore::VisiblePosition::right):
        * editing/VisibleSelection.cpp:
        (WebCore::VisibleSelection::selectionFromContentsOfNode):
        (WebCore::VisibleSelection::adjustSelectionToAvoidCrossingEditingBoundaries):
        * editing/htmlediting.cpp:
        (WebCore::nextVisuallyDistinctCandidate):
        (WebCore::previousVisuallyDistinctCandidate):
        (WebCore::firstEditablePositionAfterPositionInRoot):
        (WebCore::lastEditablePositionBeforePositionInRoot):
        (WebCore::lastOffsetForEditing):
        (WebCore::isFirstPositionAfterTable):
        (WebCore::isLastPositionBeforeTable):
        (WebCore::positionBeforeNode):
        (WebCore::positionAfterNode):
        (WebCore::enclosingEmptyListItem):
        (WebCore::caretMaxOffset):
        * editing/htmlediting.h:
        * editing/visible_units.cpp:
        (WebCore::renderedAsNonInlineTableOrHR):
        (WebCore::startOfParagraph):
        (WebCore::endOfParagraph):
        (WebCore::startOfEditableContent):
        (WebCore::endOfEditableContent):
        * page/AccessibilityObject.cpp:
        (WebCore::endOfStyleRange):
        * page/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::visiblePositionRange):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::positionForPoint):

2009-03-20  Dmitry Titov  <dimich@chromium.org>

        Reviewed by Dimitri Glazkov.

        https://bugs.webkit.org/show_bug.cgi?id=24689
        Add (upstream) V8 bindings for Workers. Mostly style cleaning.

        * bindings/v8/WorkerContextExecutionProxy.cpp: Added.
        * bindings/v8/WorkerContextExecutionProxy.h: Added.
        * bindings/v8/WorkerScriptController.cpp: Added.
        * bindings/v8/WorkerScriptController.h: Added.
        * bindings/v8/V8Index.h: Added. This is just a wrapper for v8_index.h, like V8Proxy.h
        * bindings/v8/V8Proxy.h: Added domObjectMap() function that wraps GetDOMObjectMap().
        * bindings/v8/V8WorkerContextEventListener.cpp:
        (WebCore::V8WorkerContextEventListener::callListenerFunction): TrackEvent() renamed trackEvent()

2009-03-20  Stephen White  <senorblanco@chromium.org>

        Reviewed by Eric Seidel.

        Fix for LayoutTests/fast/canvas/canvas-text-alignment.html
        on chromium/skia.  The problem was that the gradient matrix
        for text was being applied twice.  Fixed by reverting some of
        https://bugs.webkit.org/show_bug.cgi?id=23957, so that skiaDrawText
        is no longer responsible for measuring the text and scaling up
        the gradient matrix.  Instead, the text bounding box is passed
        in from SVGPaintServerGradient.  I didn't make this change for CG,
        since it uses a different method (the gradient is drawn using the
        text as a pre-rendered mask).
        https://bugs.webkit.org/show_bug.cgi?id=24687

        * platform/graphics/skia/SkiaFontWin.cpp:
        (WebCore::skiaDrawText):
        * svg/graphics/SVGPaintServerGradient.cpp:
        (WebCore::SVGPaintServerGradient::setup):

2009-03-20  Xan Lopez  <xlopez@igalia.com>

        Rubber-stamped by Holger Freyther.

        There seems to be some rounding error in cairo (or in how we use
        cairo) with some fonts, like DejaVu Sans Mono, which makes cairo
        report a height smaller than ascent + descent, which is wrong and
        confuses WebCore's layout system. Workaround this while we figure
        out what's going on.

        * platform/graphics/gtk/SimpleFontDataGtk.cpp:
        (WebCore::SimpleFontData::platformInit):
        * platform/graphics/gtk/SimpleFontDataPango.cpp:
        (WebCore::SimpleFontData::platformInit):

2009-03-19  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=24122
        <rdar://problem/6674179>
        REGRESSION: DOM Range extractContents/deleteContents failures seen on Moxiecode tests

        Test: fast/dom/Range/deleted-range-endpoints.html

        * dom/Range.cpp: (WebCore::Range::processContents): Set the final range in accordance
        to the specification.

2009-03-19  Anders Carlsson  <andersca@apple.com>

        Reviewed by Dan Bernstein.

        <rdar://problem/6682554> Flash content not being rendered (Shockwave Flash 10.0 r22)
        
        If calling updateWidget for some reason resulted in another widget being added to m_widgetUpdateSet, then
        that object would never be updated.
        
        * page/FrameView.cpp:
        (WebCore::FrameView::updateWidgets):
        Factor the widget updating code out into this method. Return true if the update set is empty.
        
        (WebCore::FrameView::performPostLayoutTasks):
        Loop over the update set multiple times until all widgets have been updated or until we reach the cap.
        
        * page/FrameView.h:

2009-03-18  Timothy Hatcher  <timothy@apple.com>

        Make the defered data loading timer honor the Page's scheduled runloop pairs.
        Introduces a new RunLoopTimer class that has an API mimicking Timer but
        allows it to be scheduled with one or more SchedulePairs.

        <rdar://problem/6687342> -[WebView scheduleInRunLoop:forMode:] has no affect on timers

        Reviewed by Darin Adler.

        * WebCore.xcodeproj/project.pbxproj: Adds the new RunLoopTimer.{cpp,h} files.
        * loader/MainResourceLoader.cpp:
        (WebCore::MainResourceLoader::handleDataLoadNow): Use the MainResourceLoaderTimer typedef.
        (WebCore::MainResourceLoader::startDataLoadTimer): Added. Start the timer and on
        Mac platforms also schedule with the Page's SchedulePairs.
        (WebCore::MainResourceLoader::handleDataLoadSoon): Call startDataLoadTimer().
        (WebCore::MainResourceLoader::setDefersLoading): Ditto.
        * loader/MainResourceLoader.h:
        * platform/cf/RunLoopTimerCF.cpp: Added.
        (WebCore::RunLoopTimerBase::~RunLoopTimerBase):
        (WebCore::timerFired):
        (WebCore::RunLoopTimerBase::start):
        (WebCore::RunLoopTimerBase::schedule):
        (WebCore::RunLoopTimerBase::stop):
        (WebCore::RunLoopTimerBase::isActive):
        * platform/RunLoopTimer.h: Added.
        (WebCore::RunLoopTimerBase::RunLoopTimerBase):
        (WebCore::RunLoopTimerBase::startRepeating):
        (WebCore::RunLoopTimerBase::startOneShot):
        (WebCore::RunLoopTimer::RunLoopTimer):
        (WebCore::RunLoopTimer::fired):

2009-03-19  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Darin Fisher.

        https://bugs.webkit.org/show_bug.cgi?id=24702
        Upstream miscellaneous bindings changes.

        * bindings/v8/ScheduledAction.cpp:
        (WebCore::ScheduledAction::execute): Changed to call lower-case evaluate.
        * bindings/v8/ScriptCallStack.h: Added an extra include.

2009-03-19  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dave Hyatt

        https://bugs.webkit.org/show_bug.cgi?id=24686
        
        When hit testing a RenderLayer whose parent lives in a preserves-3D hierarchy,
        we need to compare the computed z-offset with the depth-test z-offset before
        deciding that such a RenderLayer was hit. This fixes an issue, tested by the
        3d-point-mapping-overlapping.html test, where the child of a transformed element
        is found by hit testing, even when some other element with greater Z overlaps
        them both.
        
        Improved the code by adding a utility method, isHitCandidate(), which computes and tests
        z-depth when necessary.

        Tests: transforms/3d/point-mapping/3d-point-mapping-coplanar.html
               transforms/3d/point-mapping/3d-point-mapping-overlapping.html

        * rendering/RenderLayer.cpp:
        (WebCore::isHitCandidate):
        (WebCore::RenderLayer::hitTestLayer):

2009-03-19  Jeremy Moskovich  <jeremy@chromium.org>

        Reviewed by Dimitri Glazkov.

        https://bugs.webkit.org/show_bug.cgi?id=24456
        Split ColorChromium.cpp into Mac & Windows variants.
        Remove Chromium Dependency on platform/graphics/mac/ColorMac.mm since we
        ultimately need to take a different approach.  For now, createCGColor()
        is copied from ColorMac.mm.

        No observable change in behavior, so no test.

        * platform/graphics/chromium/ColorChromium.cpp:
        (WebCore::focusRingColor):
        * platform/graphics/chromium/ColorChromiumMac.mm: Added.

2009-03-19  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Dimitri Glazkov.

        https://bugs.webkit.org/show_bug.cgi?id=24675
        Unforking frontend: add custom InspectorController methods
        implementation.

        * bindings/v8/custom/V8InspectorControllerCustom.cpp: Added.

2009-03-19  Jay Campan  <jcampan@google.com>

        Reviewed by Dimitri Glazkov.

        https://bugs.webkit.org/show_bug.cgi?id=24625
        Adding an accessor to the currently selected index in the PopupMenuChromium.
        This is required for implementing the deletion of an autocomplete entry in Chromium.

        * platform/chromium/PopupMenuChromium.cpp:
        (WebCore::PopupContainer::selectedIndex):
        * platform/chromium/PopupMenuChromium.h:

2009-03-19  Evan Stade  <estade@chromium.org>

        Reviewed by Dimitri Glazkov.

        https://bugs.webkit.org/show_bug.cgi?id=24526
        Improve windows skia text stroking.

        Test: LayoutTests/svg/custom/struct-use-09-b.svg

        * platform/graphics/skia/SkiaFontWin.cpp: Close the path representing
        each font glyph polygon, rather than only closing the path once per
        letter. This fixes stroking for letters with multiple polygons, such
        as 'A' or 'D'.
        (WebCore::getPathForGlyph):
        (WebCore::skiaDrawText):

2009-03-19  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Tor Arne Vestbø.

        Fixed support for doing calls from JavaScript into NPAPI Plugins for the Qt port on Windows.

        Removed dead code for distinguishing between Widget and PluginView in the Qt port.

        * bindings/js/ScriptControllerQt.cpp:
        (WebCore::ScriptController::createScriptInstanceForWidget): Removed incorrect isNPAPI check.
        * plugins/PluginView.cpp:
        (WebCore::PluginView::PluginView): Removed m_isNPAPIPlugin variable.
        * plugins/PluginView.h: Removed setter/getter.
        * plugins/mac/PluginViewMac.cpp:
        (WebCore::PluginView::init): Removed call to setIsNPAPIPlugin.
        * plugins/qt/PluginViewQt.cpp:
        (WebCore::PluginView::init): Ditto.

2009-03-19  Cameron Zwarich  <cwzwarich@uwaterloo.ca>

        Reviewed by Oliver Hunt.

        Bug 24596: ASSERT in JSC::PropertySlot::slotBase @ iGoogle homepage
        <https://bugs.webkit.org/show_bug.cgi?id=24596>
        <rdar://problem/6686493>

        JSDOMWindow::customGetOwnPropertySlot() does an access check after calling
        JSGlobalObject::getOwnPropertySlot(). This causes the PropertySlot to be
        set twice, once to the value that is illegal to access, and then to undefined
        This causes an assertion failure in property access caching code.

        The fix is to do the access check before calling JSGlobalObject::getOwnPropertySlot().

        * bindings/js/JSDOMWindowCustom.h:
        (WebCore::JSDOMWindow::customGetOwnPropertySlot):

2009-03-18  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=24676
        Simple cross-origin requests shouldn't dispatch upload progress events

        Test: http/tests/xmlhttprequest/simple-cross-origin-progress-events.html

        * loader/CrossOriginAccessControl.cpp: (WebCore::passesAccessControlCheck): Added a comment
        explaining the somewhat unexpected behavior of this function.

        * xml/XMLHttpRequestUpload.cpp: (WebCore::XMLHttpRequestUpload::hasListeners):
        * xml/XMLHttpRequestUpload.h:
        Report whether there are any event listeners registered.

        * xml/XMLHttpRequest.h: Added m_uploadEventsAllowed.

        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::createRequest): Set m_uploadEventsAllowed flag.
        (WebCore::XMLHttpRequest::makeSameOriginRequest): Ditto.
        (WebCore::XMLHttpRequest::makeCrossOriginAccessRequest): Ditto.
        (WebCore::XMLHttpRequest::makeSimpleCrossOriginAccessRequest): Set request body - it can be
        non-empty for POST requests.
        (WebCore::XMLHttpRequest::makeCrossOriginAccessRequestWithPreflight): Set m_uploadEventsAllowed flag.
        (WebCore::XMLHttpRequest::handleAsynchronousPreflightResult): Ditto.
        (WebCore::XMLHttpRequest::abort): Only dispatch upload progress events if allowed.
        (WebCore::XMLHttpRequest::networkError): Ditto.
        (WebCore::XMLHttpRequest::abortError): Ditto.
        (WebCore::XMLHttpRequest::didSendData): Ditto.

2009-03-18  Marc-Antoine Ruel  <maruel@chromium.org>

        Reviewed by Darin Fisher.

        https://bugs.webkit.org/show_bug.cgi?id=24398
        Fix a crash when loading a svg file in Chromium's test_shell and
        then reloading the page.

        * history/BackForwardListChromium.cpp:
        (WebCore::BackForwardList::BackForwardList):
        (WebCore::BackForwardList::close):

2009-03-18  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Simon Fraser.

        Fix for <rdar://problem/6685235>
        <video> element poster cannot be set dynamically if not originally set up in HTML
        
        Allocate the media engine immediately so the plug-in proxy is available for
        scripting right away.

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

2009-03-18  Beth Dakin  <bdakin@apple.com>

        Reviewed by Dave Hyatt.

        Fix for <rdar://problem/6636747> REGRESSION (Safari 4 PB-r41326): 
        Popup menu appears at the wrong location on page at http://
        www.signonsandiego.com/

        This was a regression from http://trac.webkit.org/changeset/40769, 
        which changed the base class of RenderInline to 
        RenderBoxModelObject rather than RenderBox.

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::offsetParent): offsetParent should return a 
        RenderBoxModelObject rather than just a RenderBox, which is more 
        restrictive. 

2009-03-18  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/6504776> 
        CrashTracer: [USER] 188 crashes in Safari at com.apple.WebCore • WTF::HashTableIterator<WTF::RefPtr<WebCore::ResourceLoader>, ...

        Return early in case calling the client ends up spinning the run loop and completing/cancelling the load.
        
        * loader/NetscapePlugInStreamLoader.cpp:
        (WebCore::NetscapePlugInStreamLoader::didCancel):

2009-03-18  David Levin  <levin@chromium.org>

        Reviewed by Dimitri Glazkov.

        https://bugs.webkit.org/show_bug.cgi?id=24664
        Upstreaming v8 collection.h

        No change in behavior, so no test.

        * bindings/v8/V8Collection.h: Added.

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

        Reviewed by Simon Fraser.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=23966
        REGRESSION: Custom arrow navigation functionality doesn't work at dropular.net
        <rdar://problem/6589657>

        Match the CSSOM spec for getClientRects and getBoundingClientRect by
        returning a 0x0 rect at the correct top/left position for empty inline
        boxes.

        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::absoluteRects):
        (WebCore::RenderInline::absoluteQuads):

2009-03-18  David Levin  <levin@chromium.org>

        Reviewed by Eric Seidel.

        Match the changes done for windows in the bug
        https://bugs.webkit.org/show_bug.cgi?id=24530.

        No change in behavior, so no test.

        * rendering/RenderThemeChromiumLinux.cpp:
        (WebCore::RenderThemeChromiumLinux::extraDefaultStyleSheet):

2009-03-18  Dirk Schulze  <krit@webkit.org>

        Reviewed by Holger Freyther.

        Added support for SVG's stroked texts to Qt.

        [Qt] SVGs stroked text support missing
        https://bugs.webkit.org/show_bug.cgi?id=24262

        * platform/graphics/qt/FontQt.cpp:
        (WebCore::Font::drawComplexText):

2009-03-18  Mark Rowe  <mrowe@apple.com>

        Reviewed by Alexey Proskuryakov.

        Fix fast/encoding/char-decoding.html with recent ICU.

        * platform/text/TextCodecICU.cpp:
        (WebCore::TextCodecICU::decode): Look for gb18030 case-insensitively,
        as newer versions of ICU use GB18030 as the canonical name.

2009-03-17  David Levin  <levin@chromium.org>

        Reviewed by Dimitri Glazkov.

        https://bugs.webkit.org/show_bug.cgi?id=24662
        Chromium build fixes.

        Bug https://bugs.webkit.org/show_bug.cgi?id=24663 tracks
        the invalid implementation of ScriptCallStack.

        No change in behavior, so no test.

        * bindings/v8/ScriptCallStack.h:
        (WebCore::ScriptCallStack::state):
        * platform/graphics/skia/PlatformContextSkia.cpp:
        (PlatformContextSkia::drawRect):

2009-03-17  David Carson  <dacarson@apple.com>

        Reviewed by David Hyatt.

        Add anchor elements to the simple style sheet so that applications that 
        are using WebKit just for simple text and links will also take advantage
        of the fast path.

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

2009-03-17  Darin Adler  <darin@apple.com>

        Reviewed by Adele Peterson.

        <rdar://problem/6687005> Need support for new move-left/right selectors.

        * editing/EditorCommand.cpp:
        (WebCore::executeMoveToLeftEndOfLine): Added.
        (WebCore::executeMoveToLeftEndOfLineAndModifySelection): Added.
        (WebCore::executeMoveToRightEndOfLine): Added.
        (WebCore::executeMoveToRightEndOfLineAndModifySelection): Added.
        Added command entries for the functions above.

2009-03-17  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Adele Peterson.

        Put the padding inside scrollbars on textareas.
        https://bugs.webkit.org/show_bug.cgi?id=24370
        
        Put the padding inside the scrollbars on textareas. This is done by moving the
        overflow from the shadowNode to the RenderTextControlMultiline. As a result,
        all of the scroll handing methods that RenderTextControl overrides can be moved
        down into RenderTextControlSingleLine since RenderTextControlMultiline can now
        just use RenderBlock's versions. This also allows RenderTextControlMultiLine to
        no longer need a custom layout method since the shadowNode can now just size
        like a regular DIV.

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::adjustRenderStyle):
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::styleDidChange):
        (WebCore::RenderTextControl::selection):
        (WebCore::RenderTextControl::calcHeight):
        (WebCore::RenderTextControl::hitInnerTextElement):
        * rendering/RenderTextControl.h:
        * rendering/RenderTextControlMultiLine.cpp:
        (WebCore::RenderTextControlMultiLine::nodeAtPoint):
        (WebCore::RenderTextControlMultiLine::createInnerTextStyle):
        * rendering/RenderTextControlMultiLine.h:
        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::styleDidChange):
        (WebCore::RenderTextControlSingleLine::autoscroll):
        (WebCore::RenderTextControlSingleLine::scrollWidth):
        (WebCore::RenderTextControlSingleLine::scrollHeight):
        (WebCore::RenderTextControlSingleLine::scrollLeft):
        (WebCore::RenderTextControlSingleLine::scrollTop):
        (WebCore::RenderTextControlSingleLine::setScrollLeft):
        (WebCore::RenderTextControlSingleLine::setScrollTop):
        (WebCore::RenderTextControlSingleLine::scroll):
        * rendering/RenderTextControlSingleLine.h:
        * rendering/TextControlInnerElements.cpp:
        (WebCore::RenderTextControlInnerBlock::RenderTextControlInnerBlock):
        (WebCore::RenderTextControlInnerBlock::positionForPoint):
        (WebCore::TextControlInnerTextElement::createRenderer):

2009-03-17  Darin Adler  <darin@apple.com>

        Reviewed by David Hyatt.

        Bug 24517: REGRESSION (r41552): innerHTML does an updateLayout -- unneeded and can be slow
        https://bugs.webkit.org/show_bug.cgi?id=24517

        * editing/DeleteButtonController.cpp:
        (WebCore::DeleteButtonController::enable): Added a call to updateRendering, since
        determining whether to display the delete button involves style and updateRendering
        also updates style (should probably be named updateStyle, in fact). Not needed to fix
        this bug, but would have prevented the crash that led to this bug in the first place.

        * editing/EditCommand.cpp:
        (WebCore::EditCommand::EditCommand): Get rid of unneeded null check. All frames have
        delete button controllers.
        * editing/Editor.cpp:
        (WebCore::Editor::rangeForPoint): Ditto.

        * editing/markup.cpp:
        (WebCore::appendStartMarkup): Changed a "&" to a "&&" so that generating markup
        doesn't depend on renderers at all when the convertBlocksToInlines boolean is false.
        This allows us to omit the call to updateLayoutIgnorePendingStylesheets in the
        createMarkup function that's called by innerHTML.
        (WebCore::MarkupAccumulator::appendMarkup): Turned this into a class with a member
        function. Added a feature where the accumulator will skip a node. Moved arguments
        that don't change during recursion into an object. This function still is a bit
        inefficient, since it creates a new HashMap at every level as it recurses, but for now
        I did not tackle that. Also replaced the onlyIncludeChildren boolean with EChildrenOnly
        for consistency and clarity.
        (WebCore::createMarkup): Removed the call to updateLayoutIgnorePendingStylesheets.
        Instead of calling disable/enable on the delete button controller's container element,
        pass it in to the markup accumulator as a node to skip.

2009-03-17  Scott Violet  <sky@google.com>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=24651
        Skia does not always render text fill/stroke pattern/gradient/color correctly

        Changes Skia's font rendering to only render gradient/pattern if current
        color space indicates the gradient/pattern should be used.
        This is covered by LayoutTests/fast/canvas/canvas-text-alignment.html .
    
        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::strokeColorSpace):
        (WebCore::GraphicsContext::fillColorSpace):
        * platform/graphics/GraphicsContext.h:
        (WebCore::):
        * platform/graphics/GraphicsContextPrivate.h:
        * platform/graphics/skia/SkiaFontWin.cpp:
        (WebCore::paintSkiaText):

2009-03-17  Adele Peterson  <adele@apple.com>

        Reviewed by Darin Adler.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=24655
        <rdar://problem/6633727> Hitting return at the end of a line with an anchor jumps me to the bottom of the message

        Test: editing/inserting/6633727.html

        This changes does a few things:
        1) Renames pos to insertionPosition.
        2) Eliminates "startNode".  It doesn't work well to consider the node separately from the insertionPosition.  
           The insertionPosition gets updated at various times, and it seems likely that startNode can get out of sync.
        3) Before building up a list of ancestors to move around when we insert the new block, make sure to use the deepest
           representation of the insertionPosition, so all ancestor nodes are correctly included.

        * editing/InsertParagraphSeparatorCommand.cpp: (WebCore::InsertParagraphSeparatorCommand::doApply):

2009-03-17  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Kevin Ollivier.

        https://bugs.webkit.org/show_bug.cgi?id=24115
        Introduce platform independent stubs for plugins.

        * plugins/PluginDataNone.cpp: Copied from WebCore/plugins/wx/PluginDataWx.cpp.
        * plugins/PluginPackageNone.cpp: Copied from WebCore/plugins/wx/PluginPackageWx.cpp.
        * plugins/PluginViewNone.cpp: Copied from WebCore/plugins/wx/PluginViewWx.cpp.
        * plugins/wx/PluginDataWx.cpp: Removed.
        * plugins/wx/PluginPackageWx.cpp: Removed.
        * plugins/wx/PluginViewWx.cpp: Removed.
        * webcore-wx.bkl:

2009-03-17  Darin Adler  <darin@apple.com>

        Earlier version reviewed by Adele Peterson.

        Bug 24304: REGRESSION (r39864): Hitting the space bar to select an <input type=radio>
        or push an <input type=button> or <button> causes the page to scroll down.

        Would be best to add a regression test for Windows eventually; tested that this has
        no effect on the Mac OS X platform.

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::defaultEventHandler): Added FIXMEs and tweaked formatting.
        Use the code that calls the base class's defaultEventHandler early only in the cases
        where it's needed: keydown and keypress events in text fields. In other cases, do the
        more typical thing and call the default handler only at the end of the function.
        This function already had code to make sure the keypress event for space never gets
        through, but it was running too late since the scrolling code was moved into the
        base class default event handler.

2009-03-17  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dave Hyatt

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

        Fix repaint issues when composited layers come and go (only applies
        when ACCELERATED_COMPOSITING is turned on).
        
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::RenderLayer):
        * rendering/RenderLayer.h:
        (WebCore::RenderLayer::mustOverlayCompositedLayers):
        (WebCore::RenderLayer::setMustOverlayCompositedLayers):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::RenderLayerBacking):
        * rendering/RenderLayerBacking.h:

        Move what used to be the 'forceCompositingLayer' flag from RenderLayerBacking
        to RenderLayer, because we don't want the side-effects of creating RenderLayerBacking
        when setting this flag.
        
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::updateLayerCompositingState):
        When a RenderLayer flips into or out of compositing mode, compute a repaint
        rect relative to the containerForRepaint, and repaint it.
        
        (WebCore::RenderLayerCompositor::computeCompositingRequirements):
        Call layer->setMustOverlayCompositedLayers() rather than setForcedCompositingLayer().
        
        (WebCore::RenderLayerCompositor::needsToBeComposited):
        (WebCore::RenderLayerCompositor::requiresCompositingLayer):
        (WebCore::RenderLayerCompositor::requiresCompositingForTransform):
        (WebCore::RenderLayerCompositor::requiresCompositingForAnimation):
        * rendering/RenderLayerCompositor.h:
        
        Rename requiresCompositingLayerForTransform() to requiresCompositingForTransform()
        and make it a class static method to match requiresCompositingForAnimation(). Both
        now take RenderObjects, rathern than RenderLayers.
        
        * rendering/style/RenderStyle.h:
        (WebCore::InheritedFlags::hasTransformRelatedProperty):
        Minor tidyup using convenience methods added in an earlier commit.

2009-03-17  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Darin Adler

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

        * config.h:
        Add WTF_USE_ACCELERATED_COMPOSITING, defined to 0 for now, and add some
        comments to make the #ifdefs more readable.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::computedTransform):
        Add a comment to mention that we don't flatten the matrix.
        
        * css/MediaQueryEvaluator.cpp:
        (WebCore::transform_3dMediaFeatureEval):
        Have the 'transform-3d' media query evaluate to 'true' if 3d-rendering
        is supported.
        
        * platform/graphics/mac/GraphicsLayerCA.mm:
        (WebCore::GraphicsLayerCA::animateTransform):
        No need for the #ifdef here. If we don't support 3d, we will have already flattened
        the matrix.
        
        * platform/graphics/transforms/TransformationMatrix.cpp:
        (WebCore::TransformationMatrix::makeAffine):
        * platform/graphics/transforms/TransformationMatrix.h:
        New method to convert the matrix to an affine matrix by throwing a way the non-affine
        parts.
        
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateTransform):
        (WebCore::RenderLayer::currentTransform):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateLayerTransform):
        If 3d rendering is not supported, convert the matrix to an affine matrix
        which can be rendered, and used for hit testing.
        
        * rendering/RenderLayerCompositor.cpp:
        Change the name of the exported symbol that webkitdirs.pm uses to know if
        3d rendering is supported. There is no other 3d-rendering-specific symbol we can sniff.
        
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::transformFromContainer):
        Only take perspective into account if 3d rendering is supported.

        * rendering/RenderObject.h:
        (WebCore::makeMatrixRenderable):
        Utility method that flattens a matrix if 3d rendering is not supported.

2009-03-17  Kevin Ollivier  <kevino@theolliviers.com>

        wx build fix. Fix typo after mouse wheel changes.

        * platform/wx/MouseWheelEventWx.cpp:
        (WebCore::PlatformWheelEvent::PlatformWheelEvent):

2009-03-17  Darin Adler  <darin@apple.com>

        * inspector/ConsoleMessage.cpp:
        (WebCore::ConsoleMessage::isEqual): Fix build, remove stray parenthesis.

2009-03-17  Darin Adler  <darin@apple.com>

        Fix crash seen right away when running run-webkit-tests.

        * inspector/ConsoleMessage.cpp:
        (WebCore::ConsoleMessage::isEqual): Restore assertion to its behavior pre-refactoring.
        Also tweaked formatting a bit.

2009-03-17  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin Adler.

        HTMLSelectElement::add() doesn't look at exception code returned from insertBefore(), so 
        it doesn't need to zero it out before calling.

        * html/HTMLSelectElement.cpp: (WebCore::HTMLSelectElement::add): Removed "ec = 0" line.

2009-03-17  Dan Bernstein  <mitz@apple.com>

        Reviewed by Adam Roben.

        - WebCore part of adding a mechanism for controlling the caching of
          responses through WebFrameLoaderClient

        Mac already has such a mechanism, and this adds one for CFNetwork ports.

        * WebCore.vcproj/WebCore.vcproj: Added EmptyClients.h
        and ResourceLoaderCFNet.cpp.

        * loader/EmptyClients.h:
        (WebCore::EmptyFrameLoaderClient::shouldCacheResponse): Added an
        implementation that always returns true.

        * loader/FrameLoaderClient.h: Declared shouldCacheResponse().

        * loader/ResourceLoader.h: Ditto.

        * loader/cf/ResourceLoaderCFNet.cpp: Added.
        (WebCore::ResourceLoader::shouldCacheResponse): Added. Calls through to
        FrameLoaderClient::shouldCacheResponse().

        * platform/network/ResourceHandleClient.h:
        (WebCore::ResourceHandleClient::shouldCacheResponse): Added an
        implementation that always returns true.

        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::willCacheResponse): Added a call to
        ResourceHandleClient::shouldCacheResponse(). If the client returns
        false, return 0, which will prevent CFNetwork from caching the response.

2009-03-17  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=13287
        Cannot change SELECT to a dynamically created option

        Tests: fast/forms/add-and-remove-option.html
               fast/forms/add-remove-option-modification-event.html
               fast/forms/add-selected-option.html
               fast/forms/select-cache-desynchronization.html

        * dom/ContainerNode.cpp:
        (WebCore::dispatchChildInsertionEvents): Increment DOM tree version. This will happen when
        dispatching DOMSubtreeModified again, but the version should be incremented for event
        listeners to have an up to date view of the DOM.
        (WebCore::dispatchChildRemovalEvents): Ditto.

        * html/HTMLOptionElement.cpp: (WebCore::HTMLOptionElement::insertedIntoTree):
        Make sure that the select element knows about its new selected option.

        * html/HTMLOptionElement.h: Use insertedIntoTree() instead of insertedIntoDocument(),
        because DOM also needs to be updated for forms that are not in document yet. Similar
        problems exist for node removing, but removedFromTree() is called at a wrong time, so
        those problems cannot be fixed without deeper refactoring.

        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::setRecalcListItems): Reset m_activeSelectionAnchorIndex - it
        doesn't make sense to keep the anchor after programmatically changing the selection, and
        keeping it was causing a failure in fast/forms/listbox-selection.html.

        * html/HTMLSelectElement.h: Removed overrides for ContainerNode methods that only called
        base class versions.

2009-03-17  Steve Falkenburg  <sfalken@apple.com>

        <rdar://problem/6690324> Accessing FTP sites reads unallocated memory, can result in garbled entries or crashes
        
        Reviewed by Darin Adler.

        * loader/FTPDirectoryDocument.cpp:
        (WebCore::FTPDirectoryTokenizer::parseAndAppendOneLine): Assign CString to a local while we hold pointers into it.

2009-03-16  David Hyatt  <hyatt@apple.com>

        <rdar://problem/6648411> REGRESSION: Layout of page is wrong at http://www.popcap.com/

        Make sure that the initial shouldPaint check that looks at enclosingLayers properly skips over
        layers that don't paint themselves.  This is done by adding a new enclosingSelfPaintingLayer method
        so that RenderObjects can walk up the enclosing layer chain and skip any layers that don't paint
        themselves.

        Reviewed by Darin Adler.

        Added fast/block/float/overlapping-floats-with-overflow-hidden.html

        * WebCore.base.exp:
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::addOverhangingFloats):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::enclosingSelfPaintingLayer):
        * rendering/RenderObject.h:

2009-03-17  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Holger Freyther.

        https://bugs.webkit.org/show_bug.cgi?id=24592
        [GTK] Crash in FcPatternHash

        Style fixes.

        * platform/graphics/gtk/FontPlatformDataGtk.cpp:
        (WebCore::FontPlatformData::operator=):
        * platform/graphics/gtk/FontPlatformDataPango.cpp:

2009-03-17  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Holger Freyther.

        https://bugs.webkit.org/show_bug.cgi?id=24592
        [GTK] Crash in FcPatternHash

        Sanitize memory management in pango fonts.

        Release memory allocated by FontPlatformDataPango in its own
        destructor instead of doing it from other classes, and add copy
        constructor and '=' operator to be able to track referenced
        objects properly.

        * platform/graphics/gtk/FontPlatformDataPango.cpp:
        (WebCore::FontPlatformData::~FontPlatformData):
        (WebCore::FontPlatformData::operator=):
        (WebCore::FontPlatformData::FontPlatformData):
        * platform/graphics/gtk/SimpleFontDataPango.cpp:

2009-03-17  Darin Adler  <darin@apple.com>

        Reviewed by Alexey Proskuryakov.

        Bug 24624: Crash in imageLoadEventTimerFired after adoptNode used on <img>,
        seen with inspector, which uses adoptNode
        https://bugs.webkit.org/show_bug.cgi?id=24624
        rdar://problem/6422850

        Test: fast/dom/HTMLImageElement/image-load-cross-document.html

        * dom/Document.cpp:
        (WebCore::Document::Document): Removed m_imageLoadEventTimer.
        (WebCore::Document::detach): Removed m_imageLoadEventDispatchSoonList and
        m_imageLoadEventDispatchingList.
        (WebCore::Document::implicitClose): Called ImageLoader::dispatchPendingLoadEvents
        instead of dispatchImageLoadEventsNow.

        * dom/Document.h: Removed ImageLoader, dispatchImageLoadEventSoon,
        dispatchImageLoadEventsNow, removeImage, m_imageLoadEventDispatchSoonList,
        m_imageLoadEventDispatchingList, m_imageLoadEventTimer, and imageLoadEventTimerFired.

        * loader/ImageLoader.cpp:
        (WebCore::loadEventSender): Added. Returns the single global ImageLoadEventSender
        object used privately as the target of the load event timer.
        (WebCore::ImageLoader::~ImageLoader): Call ImageLoadEventSender::cancelLoadEvent
        rather than Document::removeImage.
        (WebCore::ImageLoader::setImage): Use m_element directly, not element().
        (WebCore::ImageLoader::updateFromElement): Ditto. Also name the local variable
        document instead of doc.
        (WebCore::ImageLoader::notifyFinished): Call ImageLoadEventSender::dispatchLoadEventSoon
        rather than Document::dispatchImageLoadEventSoon.
        (WebCore::ImageLoader::dispatchPendingLoadEvent): Added. Handles the common logic
        about when load events can be dispatched so that dispatchLoadEvent only has to
        have the specific part for each derived class. This includes a check that the
        document is attached, which used to be handled by having documents empty out the
        image load event vectors in the detach function.
        (WebCore::ImageLoader::dispatchPendingLoadEvents): Added. Calls the appropriate
        function on the ImageLoadEventSender, which avoids the need to have that class be
        public in the ImageLoader header.
        (WebCore::ImageLoadEventSender::ImageLoadEventSender): Added. Has the code that
        was previously in the Document constructor.
        (WebCore::ImageLoadEventSender::dispatchLoadEventSoon): Added. Has the code that
        was previously in Document::dispatchImageLoadEventSoon.
        (WebCore::ImageLoadEventSender::cancelLoadEvent): Added. Has the code that was
        previously in Document::removeImage.
        (WebCore::ImageLoadEventSender::dispatchPendingLoadEvents): Added. Has the code
        that was previously in Document::dispatchImageLoadEventsNow.
        (WebCore::ImageLoadEventSender::timerFired): Added. Calls dispatchPendingLoadEvents.

        * loader/ImageLoader.h: Improved comments. Made the virtual functions private
        or protected rather than public. Added static dispatchPendingLoadEvents function
        for use by Document and private dispatchPendingLoadEvent function for use by
        ImageLoadEventSender. Made setLoadingImage private and eliminated
        setHaveFiredLoadEvent since that can all be done inside the class without any
        member functions.

        * html/HTMLImageLoader.cpp:
        (WebCore::HTMLImageLoader::dispatchLoadEvent): Removed logic to check whether a
        load event already fired and whether image() is 0. These are now both base class
        responsibilities.
        * svg/SVGImageLoader.cpp:
        (WebCore::SVGImageLoader::dispatchLoadEvent): Ditto.
        * wml/WMLImageLoader.cpp:
        (WebCore::WMLImageLoader::dispatchLoadEvent): Ditto.

2009-03-17  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Timothy Hatcher.

        https://bugs.webkit.org/show_bug.cgi?id=24623
        Refactor ConsoleMessage to use ScriptFuncitonCall and eliminate JSC
        dependencies.

        * bindings/js/ScriptFunctionCall.cpp:
        (WebCore::ScriptFunctionCall::appendArgument): Added uint and ScriptString-taking methods.
        * bindings/js/ScriptFunctionCall.h:
        * bindings/js/ScriptObjectQuarantine.cpp:
        (WebCore::quarantineValue): Added generic ScriptValue quarantine helper.
        * bindings/js/ScriptObjectQuarantine.h:
        * bindings/js/ScriptValue.cpp:
        (WebCore::ScriptValue::isEqual): Added.
        * bindings/js/ScriptValue.h:
        * inspector/ConsoleMessage.cpp:
        (WebCore::ConsoleMessage::ConsoleMessage):
        (WebCore::ConsoleMessage::addToConsole): Added.
        (WebCore::ConsoleMessage::isEqual): Changed to use ScriptValue::isEqual.
        * inspector/ConsoleMessage.h:
        (WebCore::ConsoleMessage::incrementCount): Added.
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::addConsoleMessage): Changed to use ConsoleMessage::addToConsole.
        (WebCore::InspectorController::populateScriptObjects): Ditto.
        * inspector/InspectorController.h:

2009-03-17  Kevin Ollivier  <kevino@theolliviers.com>

        Reviewed by Mark Rowe.

        Get BUILDING_ON_* defines from Platform.h.
        
        https://bugs.webkit.org/show_bug.cgi?id=24630

        * WebCorePrefix.h:

2009-03-16  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Holger Freyther.

        https://bugs.webkit.org/show_bug.cgi?id=24592
        [GTK] Crash in FcPatternHash

        Sanitize memory management in gtk fonts.

        Release memory allocated by FontPlatformDataGtk in its own
        destructor instead of doing it from other classes, and add copy
        constructor and '=' operator to be able to track referenced
        objects properly.

        * platform/graphics/gtk/FontPlatformData.h:
        * platform/graphics/gtk/FontPlatformDataGtk.cpp:
        (WebCore::FontPlatformData::operator=):
        (WebCore::FontPlatformData::FontPlatformData):
        (WebCore::FontPlatformData::~FontPlatformData):
        * platform/graphics/gtk/SimpleFontDataGtk.cpp:
        (WebCore::SimpleFontData::platformDestroy):

2009-03-17  Ariya Hidayat  <ariya.hidayat@nokia.com>

        Build fix for Qt < 4.5.

        As reported by Yael Aharon  <yael.aharon@nokia.com>

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

2009-03-17  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=24614
        Access control checks are different in cached and uncached cases

        Test: http/tests/xmlhttprequest/access-control-basic-non-simple-deny-cached.html

        * loader/CrossOriginAccessControl.cpp:
        (WebCore::isOnAccessControlSimpleRequestMethodWhitelist): Factored out simple method
        check for use in both cached and uncached cases. In cached case, an old definition that
        omitted HEAD was still used.
        (WebCore::isOnAccessControlSimpleRequestHeaderWhitelist): Check that content type has an
        allowed value. This is needed in all call sites. Also changed to compare MIME type, not
        content type.
        (WebCore::isSimpleCrossOriginAccessRequest): Use the above methods.

        * loader/CrossOriginAccessControl.h: Expose isOnAccessControlSimpleRequestMethodWhitelist.

        * loader/CrossOriginPreflightResultCache.cpp:
        (WebCore::CrossOriginPreflightResultCacheItem::allowsCrossOriginMethod):
        (WebCore::CrossOriginPreflightResultCacheItem::allowsCrossOriginHeaders):
        Use the new checks for simple method and header.

2009-03-16  Gustavo Noronha Silva  <gns@gnome.org> and Thadeu Lima de Souza Cascardo <cascardo@holoscopio.com>

        Reviewed by Mark Rowe.

        https://bugs.webkit.org/show_bug.cgi?id=24638
        [GTK] HTML5 media tags do not work

        Add a repaint-requested signal to the video sink, and use it to
        call MediaPlayerPrivate::repaint, so that the video actually
        plays.

        * platform/graphics/gtk/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::mediaPlayerPrivateRepaintCallback):
        (WebCore::MediaPlayerPrivate::createGSTPlayBin):
        * platform/graphics/gtk/VideoSinkGStreamer.cpp:
        (webkit_video_sink_idle_func):
        (webkit_video_sink_render):
        (webkit_video_sink_class_init):

2009-03-16  Gustavo Noronha Silva  <gns@gnome.org> and Thadeu Lima de Souza Cascardo <cascardo@holoscopio.com>

        Reviewed by Holger Freyther.

        https://bugs.webkit.org/show_bug.cgi?id=24638
        [GTK] HTML5 media tags do not work

        Work-around the fact that gst_element_query_duration returns true even
        though it is unable to figure out the duration when in stream (push)
        mode.

        * platform/graphics/gtk/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivate::duration):

2009-03-16  Darin Adler  <darin@apple.com>

        Reviewed by Kevin Decker.

        <rdar://problem/6642742> Top Sites malfunction when switching text zoom mode

        * page/Frame.cpp:
        (WebCore::Frame::setNeedsReapplyStyles): Don’t do anything if the frame is
        currently showing a non-HTML view.

2009-03-16  Darin Adler  <darin@apple.com>

        Reviewed by Adele Peterson.

        Bug 24629: moving forward or backward a paragraph fails at edge of document
        https://bugs.webkit.org/show_bug.cgi?id=24629
        rdar://problem/6544413

        Test: editing/selection/move-paragraph-document-edges.html

        * editing/visible_units.cpp:
        (WebCore::previousParagraphPosition): Use the last result from
        previousLinePosition rather than going all the way back to what was originally
        passed in when we hit exception cases like null or not moving. This correctly
        inherits the behavior of previousLinePosition when we are in a paragraph at the
        edge of a document.
        (WebCore::nextParagraphPosition): Ditto.

2009-03-16  Darin Adler  <darin@apple.com>

        Reviewed by Adele Peterson.

        Bug 24619: RenderObject::selectionStartEnd does not need to be a virtual function
        https://bugs.webkit.org/show_bug.cgi?id=24619

        * rendering/RenderObject.h: Remove virtual keyword from selectionStartEnd declaration.
        * rendering/RenderView.h: Ditto.

2009-03-16  Peter Kasting  <pkasting@google.com>

        Reviewed by David Hyatt.

        https://bugs.webkit.org/show_bug.cgi?id=24368
        DOM scroll events should be based off the actual number of wheel
        ticks, not off the number of lines scrolled.  This matches IE.

        * dom/Node.cpp:
        (WebCore::Node::dispatchWheelEvent):
        * dom/WheelEvent.cpp:
        (WebCore::WheelEvent::WheelEvent):
        * dom/WheelEvent.h:
        (WebCore::WheelEvent::create):
        * platform/PlatformWheelEvent.h:
        (WebCore::PlatformWheelEvent::wheelTicksX):
        (WebCore::PlatformWheelEvent::wheelTicksY):
        * platform/gtk/WheelEventGtk.cpp:
        (WebCore::PlatformWheelEvent::PlatformWheelEvent):
        * platform/mac/WheelEventMac.mm:
        (WebCore::PlatformWheelEvent::PlatformWheelEvent):
        * platform/qt/WheelEventQt.cpp:
        * platform/win/WheelEventWin.cpp:
        (WebCore::PlatformWheelEvent::PlatformWheelEvent):
        * platform/wx/MouseWheelEventWx.cpp:
        (WebCore::PlatformWheelEvent::PlatformWheelEvent):

2009-03-16  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Eric Seidel
        
        Clean up a few issues in the Animation code:

        * page/animation/AnimationBase.cpp:
        (WebCore::AnimationBase::updateStateMachine):
        Whitespace
        
        (WebCore::AnimationBase::willNeedService):
        Don't round to float, use std::max

        * page/animation/AnimationController.cpp:
        (WebCore::AnimationControllerPrivate::startTimeResponse):
        Fix erroneously copied line to null out m_lastResponseWaiter.

2009-03-12  David Hyatt  <hyatt@apple.com>

        Reviewed by Eric Seidel

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

        Overflow scrolling needs to account for the bottom/right padding on the object itself as well
        as for bottom/right margins on children.

        Existing tests cover this.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::lowestPosition):
        (WebCore::RenderBlock::rightmostPosition):

2009-03-16  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Fix for <rdar://problem/6320555>
        Add an upper limit for setting HTMLSelectElement.length.

        Test: fast/forms/select-max-length.html

        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::setOption):
        (WebCore::HTMLSelectElement::setLength):

2009-03-16  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Simon Fraser.

        <rdar://problem/6686721> Media document crash in 64-bit WebKit

        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivate::createQTMovieView): QTMovieContentViewClass is only used when
        rendering inline with old versions of QuickTime, so don't look for it when we are in a 
        media document.

2009-03-16  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Timothy Hatcher.

        https://bugs.webkit.org/show_bug.cgi?id=24590
        Refactor InspectorDOMStorageResource to use ScriptFunctionCall.

        * bindings/js/ScriptFunctionCall.cpp:
        (WebCore::ScriptFunctionCall::appendArgument): Added method for bool argument.
        * bindings/js/ScriptFunctionCall.h: Ditto, also cleaned up.
        * bindings/js/ScriptObjectQuarantine.cpp:
        (WebCore::getQuarantinedScriptObject): Added Storage helper.
        * bindings/js/ScriptObjectQuarantine.h: Ditto.
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::populateScriptObjects): Changed to use bind method.
        (WebCore::InspectorController::resetScriptObjects): Changed to use unbind method.
        (WebCore::InspectorController::didUseDOMStorage): Changed to use isSameHostAndType and bind methods.
        * inspector/InspectorController.h: Removed add/remove methods for DOM storage.
        * inspector/InspectorDOMStorageResource.cpp:
        (WebCore::InspectorDOMStorageResource::InspectorDOMStorageResource):
        (WebCore::InspectorDOMStorageResource::isSameHostAndType): Added.
        (WebCore::InspectorDOMStorageResource::bind): Added.
        (WebCore::InspectorDOMStorageResource::unbind): Added.
        * inspector/InspectorDOMStorageResource.h:

2009-03-16   Mike Belshe  <mike@belse.com>

        Reviewed by Dimitri Glazkov.

        https://bugs.webkit.org/show_bug.cgi?id=24580
        Fix query() to match KURL behavior, this time with the code that
        compiles.

        * platform/KURLGoogle.cpp:
        (WebCore::KURL::query): Fix copy/paste mistake.

2009-03-16  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=21752
        REGRESSION: referencing XHR constructor for a not yet loaded frame permanently breaks it

        Test: fast/dom/Window/window-early-properties-xhr.html

        For some transitions, the Window object is not replaced, but Document is. When this happened,
        window.document property was updated, but references to Document kept in cached constructors
        were not.

        * bindings/js/JSAudioConstructor.cpp:
        (WebCore::JSAudioConstructor::JSAudioConstructor):
        (WebCore::JSAudioConstructor::document):
        (WebCore::JSAudioConstructor::mark):
        * bindings/js/JSAudioConstructor.h:
        * bindings/js/JSImageConstructor.cpp:
        (WebCore::JSImageConstructor::JSImageConstructor):
        (WebCore::JSImageConstructor::document):
        (WebCore::JSImageConstructor::mark):
        * bindings/js/JSImageConstructor.h:
        * bindings/js/JSMessageChannelConstructor.cpp:
        (WebCore::JSMessageChannelConstructor::JSMessageChannelConstructor):
        (WebCore::JSMessageChannelConstructor::scriptExecutionContext):
        (WebCore::JSMessageChannelConstructor::mark):
        * bindings/js/JSMessageChannelConstructor.h:
        * bindings/js/JSOptionConstructor.cpp:
        (WebCore::JSOptionConstructor::JSOptionConstructor):
        (WebCore::JSOptionConstructor::document):
        (WebCore::JSOptionConstructor::mark):
        * bindings/js/JSOptionConstructor.h:
        * bindings/js/JSXMLHttpRequestConstructor.cpp:
        (WebCore::JSXMLHttpRequestConstructor::JSXMLHttpRequestConstructor):
        (WebCore::JSXMLHttpRequestConstructor::scriptExecutionContext):
        (WebCore::JSXMLHttpRequestConstructor::mark):
        * bindings/js/JSXMLHttpRequestConstructor.h:
        Changed cached constructors to keep a reference to Window, not Document.

2009-03-15  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=24549
        Impose a limit on Access-Control-Max-Age value

        * loader/CrossOriginPreflightResultCache.cpp:
        (WebCore::CrossOriginPreflightResultCacheItem::parse):

2009-03-15  Greg Bolsinga  <bolsinga@apple.com>

        Reviewed by David Kilzer.

        <rdar://problem/6668875> Normalize Geolocation results

        * platform/mac/GeolocationServiceMac.mm:
        (-[WebCoreCoreLocationObserver locationManager:didUpdateToLocation:fromLocation:]):

2009-03-15  Greg Bolsinga  <bolsinga@apple.com>

        Reviewed by David Kilzer.

        Update ::toString format as suggested by Darin Adler.

        * page/Geoposition.cpp:
        (WebCore::Geoposition::toString):

2009-03-15  David Kilzer  <ddkilzer@apple.com>

        <rdar://problem/6668238> WebCore is registering text encodings needlessly from KURL constructor.

        Reviewed by Darin Adler.

        Yet another case where we would trigger extended encoding loading needlessly.

        * platform/text/TextEncoding.cpp:
        (WebCore::TextEncoding::encodingForFormSubmission):

2009-03-15  Simon Fraser  <simon.fraser@apple.com>

        Build fix: no review.

        * rendering/style/ContentData.h:

2009-03-15  David Kilzer  <ddkilzer@apple.com>

        Bug 24542: Improve ContentData encapsulation

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

        Reviewed by Simon Fraser.

        No tests since there is no change in behavior.

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::createObject): Used getter methods
        instead of data members on ContentData class.  Used isImage()
        convenience method.
        * rendering/RenderObjectChildList.cpp:
        (WebCore::RenderObjectChildList::updateBeforeAfterContent): Ditto.

        * rendering/style/ContentData.cpp:
        (WebCore::ContentData::clear): Extracted code into
        deleteContent() method.
        (WebCore::ContentData::dataEquivalent): Added.  Extracted code
        from StyleRareNonInheritedData::contentDataEquivalent().
        (WebCore::ContentData::deleteContent): Added.  Used by setter
        methods.
        * rendering/style/ContentData.h: Made m_type, m_content and
        m_next private.
        (WebCore::ContentData::isCounter): Added.
        (WebCore::ContentData::isImage): Added.
        (WebCore::ContentData::isNone): Added.
        (WebCore::ContentData::isText): Added.
        (WebCore::ContentData::type): Added.
        (WebCore::ContentData::dataEquivalent): Added.
        (WebCore::ContentData::image): Added.
        (WebCore::ContentData::setImage): Added.
        (WebCore::ContentData::text): Added.
        (WebCore::ContentData::setText): Added.
        (WebCore::ContentData::counter): Added.
        (WebCore::ContentData::setCounter): Added.
        (WebCore::ContentData::next): Added.
        (WebCore::ContentData::setNext): Added.

        * rendering/style/CounterContent.h:
        (WebCore::operator!=): Removed.
        (WebCore::operator==): Renamed operator!=() and reversed its
        logic after extracting code from
        StyleRareNonInheritedData::contentDataEquivalent() to create
        ContentData::dataEquivalent().

        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::setContent): Used new getters and setters
        on ContentData class.  Changed first argument from a StringImpl*
        to a PassRefPtr<StrimgImpl>.  Used isText() convenience method.
        * rendering/style/RenderStyle.h:
        (WebCore::RenderStyle::setContent): Updated declaration.
        * rendering/style/StyleRareNonInheritedData.cpp:
        (WebCore::StyleRareNonInheritedData::contentDataEquivalent):
        Extracted most logic in while() loop into
        ContentData::dataEquivalent().

2009-03-15  Gustavo Noronha Silva  <gns@gnome.org>

        Reviewed by Anders Carlsson.

        https://bugs.webkit.org/show_bug.cgi?id=24602
        [Gtk] Searching in thepiratebay.org doesn't work with more than 1 word

        Reintroduce the URI into the soup message after having set it in
        the KURL, on redirects, to make sure it is properly encoded. This
        fixes bad request problems when servers give bad URIs on their
        response's Location header.

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

2009-03-15  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=19737
        No cursor and paste not enabled right clicking text field/area

        Test: fast/events/right-click-focus.html

        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleMousePressEventSingleClick):
        (WebCore::EventHandler::handleMousePressEvent):
        Take normal code path for right clicks (we were taking it for Ctrl-clicks anyway).

2009-03-15  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Adele Peterson.

        https://bugs.webkit.org/show_bug.cgi?id=23949
        HTMLSelectElement is in inconsistent state when handling mutation events

        Test: fast/forms/mutation-event-recalc.html

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::insertBefore):
        (WebCore::ContainerNode::appendChild):
        Call childrenChanged() before dispatching modification events, not after.

        * html/HTMLOptGroupElement.cpp:
        (WebCore::HTMLOptGroupElement::insertBefore):
        (WebCore::HTMLOptGroupElement::replaceChild):
        (WebCore::HTMLOptGroupElement::removeChild):
        (WebCore::HTMLOptGroupElement::appendChild):
        (WebCore::HTMLOptGroupElement::removeChildren):
        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::add):
        (WebCore::HTMLSelectElement::remove):
        (WebCore::HTMLSelectElement::insertBefore):
        (WebCore::HTMLSelectElement::replaceChild):
        (WebCore::HTMLSelectElement::removeChild):
        (WebCore::HTMLSelectElement::appendChild):
        (WebCore::HTMLSelectElement::removeChildren):
        Remove calls to recalcSelectOptions(). It is too late to recalc now, after mutation events
        were already dispatched.

2009-03-14  Greg Bolsinga  <bolsinga@apple.com>

        <rdar://problem/6683465>

        Geolocation has to be able to handle NULL Frames.

        Reviewed by Mark Rowe
    
2009-03-14  Greg Bolsinga  <bolsinga@apple.com>

        Reviewed by David Kilzer.

        Geoposition::toString was missing the Coordinates after the update.

        * page/Geoposition.cpp:
        (WebCore::Geoposition::toString):

2009-03-14  Jan Michael Alonzo  <jmalonzo@webkit.org>

        Reviewed by Mark Rowe.

        [Gtk] Build fix - pass a Coordinate to Geoposition::create
        https://bugs.webkit.org/show_bug.cgi?id=24603

        Gtk build fix per r41650
        https://bugs.webkit.org/show_bug.cgi?id=24506
        Geolocation in Safari differs from the spec, no Coordinates attribute on Position

        Pass a Coordinate to Geoposition::create.

        * platform/gtk/GeolocationServiceGtk.cpp:
        (WebCore::GeolocationServiceGtk::updatePosition):

2009-03-14  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=24545
        Make cross-site XHR simple request definition match current spec draft

        Tests: http/tests/xmlhttprequest/access-control-basic-post-fail-non-simple-content-type.html
               http/tests/xmlhttprequest/access-control-basic-whitelist-request-headers.html

        * loader/CrossOriginAccessControl.cpp:
        (WebCore::isOnAccessControlSimpleRequestHeaderWhitelist): Added Content-Language.
        (WebCore::isSimpleCrossOriginAccessRequest): Added HEAD. Restricted content types to those
        that could be sent via form submission.

2009-03-14  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=15172
        object fallback - empty string for first argument of setAttributeNS does not work like null

        https://bugs.webkit.org/show_bug.cgi?id=24548
        createElementNS("", name) should create an element in null namespace

        Tests: fast/dom/createElementNS-empty-namespace.html
               fast/dom/setAttributeNS-empty-namespace.html

        * dom/QualifiedName.h: (WebCore::QualifiedName::QualifiedNameImpl::QualifiedNameImpl):
        Convert empty namespaces to null.

2009-03-13  Mark Rowe  <mrowe@apple.com>

        Rubber-stamped by Dan Bernstein.

        Take advantage of the ability of recent versions of Xcode to easily switch the active
        architecture.

        * Configurations/DebugRelease.xcconfig:

2009-03-13  John Abd-El-Malek  <jam@google.com>

        Reviewed by Darin Fisher.

        https://bugs.webkit.org/show_bug.cgi?id=24593
        Added requestorID so we can track the request to its WebView without using frame (which was removed).

        * platform/network/chromium/ResourceRequest.h:
        (WebCore::ResourceRequest::ResourceRequest):
        (WebCore::ResourceRequest::requestorID):
        (WebCore::ResourceRequest::setRequestorID):
        (WebCore::ResourceRequest::setTargetType):
        (WebCore::ResourceRequest::policyURL):
        (WebCore::ResourceRequest::setPolicyURL):
        (WebCore::ResourceRequest::requestorPid):
        (WebCore::ResourceRequest::setRequestorPid):

2009-03-13  Mike Belshe  <mike@belshe.com>

        Reviewed by Dimitri Glazkov.

        https://bugs.webkit.org/show_bug.cgi?id=24561
        Add custom V8 bindings for HTMLElementCanvas, Location.

        * bindings/v8/custom/V8HTMLCanvasElementCustom.cpp: Added.
        * bindings/v8/custom/V8LocationCustom.cpp: Added.

2009-03-13  Stephen White  <senorblanco@chromium.org>

        Reviewed by Eric Seidel.

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

        Fix transparent text rendering on Chromium.  FontChromiumWin
        was calling beginTransparencyLayer()/endTransparencyLayer(), with
        a TransparencyWin inside to do GDI ClearType rendering over an
        opaque background.  TransparencyWin does its special sauce
        in the destructor, but it was being called too late to be used
        correctly in the layer.  Put the special sauce into a new function,
        composite(), and call that explicitly instead.

        * platform/graphics/chromium/FontChromiumWin.cpp:
        (WebCore::TransparencyAwareFontPainter::TransparencyAwareFontPainter::~TransparencyAwareFontPainter):
        * platform/graphics/chromium/TransparencyWin.cpp:
        (WebCore::TransparencyWin::~TransparencyWin):
        (WebCore::TransparencyWin::composite):
        (WebCore::TransparencyWin::init):
        * platform/graphics/chromium/TransparencyWin.h:
        * rendering/RenderThemeChromiumWin.cpp:
        (WebCore::):

2009-03-13  Mike Belshe  <mike@belshe.com>

        Reviewed by Dimitri Glazkov.

        https://bugs.webkit.org/show_bug.cgi?id=24562
        Add custom implementation for getCSSCanvasContext to V8 bindings.

        * bindings/v8/custom/V8DocumentCustom.cpp: Added new method.

2009-03-13  Mike Belshe  <mike@belse.com>

        Reviewed by Dimitri Glazkov.

        https://bugs.webkit.org/show_bug.cgi?id=24580
        Fix query() to match KURL behavior.

        * platform/KURLGoogle.cpp:
        (WebCore::KURL::query): remove extra logic around question mark.

2009-03-13  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Beth Dakin.

        Bug 24474: AX: in multi-body tables, asking for a cell at a specific coordinate can return nil
        https://bugs.webkit.org/show_bug.cgi?id=24474

        Test: platform/mac-snowleopard/accessibility/table-multi-bodies.html

        * page/AccessibilityTable.cpp:
        (WebCore::AccessibilityTable::cellForColumnAndRow):

2009-03-13  Jian Li  <jianli@chromium.org>

        Reviewed by Dimitri Glazkov.

        https://bugs.webkit.org/show_bug.cgi?id=24589
        Upstream changes to V8 event listeners (Chromium r11133) in order to
        fix worker functionality break in Chromium.

        * bindings/v8/V8AbstractEventListener.cpp:
        (WebCore::V8AbstractEventListener::invokeEventHandler):
        (WebCore::V8AbstractEventListener::handleEvent):
        * bindings/v8/V8AbstractEventListener.h:
        * bindings/v8/V8WorkerContextEventListener.cpp:
        (WebCore::V8WorkerContextEventListener::handleEvent):

2009-03-13  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Timothy Hatcher.

        https://bugs.webkit.org/show_bug.cgi?id=24524
        Introduce ScriptObject and ScriptFunctionCall abstractions.

        * GNUmakefile.am: Added ScriptObject and ScriptFunctionCall to project.
        * WebCore.pro: Ditto.
        * WebCore.vcproj/WebCore.vcproj: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * WebCoreSources.bkl: Ditto.
        * bindings/js/ScriptFunctionCall.cpp: Added.
        * bindings/js/ScriptFunctionCall.h: Added.
        * bindings/js/ScriptObject.cpp: Added.
        * bindings/js/ScriptObject.h: Added.
        * bindings/js/ScriptObjectQuarantine.cpp: Added.
        * bindings/js/ScriptObjectQuarantine.h: Added.
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::populateScriptObjects): Changed to use InspectorDatabaseResource::bind.
        (WebCore::InspectorController::resetScriptObjects): Changed to use InspectorDatabaseResource::unbind.
        (WebCore::InspectorController::didOpenDatabase): Changed to use InspectorDatabaseResource::unbind.
        * inspector/InspectorController.h: Removed addScriptDatabaseResource and
        removeScriptDatabaseResource declarations.
        * inspector/InspectorDatabaseResource.cpp:
        (WebCore::InspectorDatabaseResource::InspectorDatabaseResource):
        (WebCore::InspectorDatabaseResource::bind): Added.
        (WebCore::InspectorDatabaseResource::unbind): Added.
        * inspector/InspectorDatabaseResource.h: Added bind and unbind declarations.

2009-03-13  Peter Kasting  <pkasting@google.com>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=24467
        Make Skia drawRect() and stroke behavior match CG.

        This makes drawRect() ignore the stroke width (like CG does), and
        adds a warning comment about that to the appropriate header.

        It also eliminates some hacky code in Skia's stroke preparation,
        which tried to adjust odd-width strokes to fall on pixel boundaries.
        Not only did this not match CG, it wouldn't necessarily work right,
        because there could be other transforms (e.g. full-page zoom) that
        would affect the stroke before it reached the device pixel level.

        * platform/graphics/GraphicsContext.h:
        * platform/graphics/skia/GraphicsContextSkia.cpp:
        (WebCore::GraphicsContext::drawRect):
        (WebCore::GraphicsContext::fillRect):
        * platform/graphics/skia/PlatformContextSkia.cpp:
        (PlatformContextSkia::drawRect):
        (PlatformContextSkia::setupPaintForStroking):

2009-03-13  Jian Li  <jianli@chromium.org>

        Reviewed by Dimitri Glazkov.

        https://bugs.webkit.org/show_bug.cgi?id=24583
        Need to change scope of constructor and destructor of V8ObjectEventListener from private
        to protected so that they could be used in its derived class V8WorkerContextEventListener.

        * bindings/v8/V8ObjectEventListener.h:

2009-03-13  David Levin  <levin@chromium.org>

        Reviewed by Dimitri Glazkov.

        https://bugs.webkit.org/show_bug.cgi?id=24579
        Many V8*Event* files are misplaced.

        This code is infrastructure for supporting the bindings and thus should
        be in the bindings/v8 directory.

        * bindings/v8/V8AbstractEventListener.cpp: Renamed from WebCore/bindings/v8/custom/V8AbstractEventListener.cpp.
        * bindings/v8/V8AbstractEventListener.h: Renamed from WebCore/bindings/v8/custom/V8AbstractEventListener.h.
        * bindings/v8/V8LazyEventListener.cpp: Renamed from WebCore/bindings/v8/custom/V8LazyEventListener.cpp.
        * bindings/v8/V8LazyEventListener.h: Renamed from WebCore/bindings/v8/custom/V8LazyEventListener.h.
        * bindings/v8/V8ObjectEventListener.cpp: Renamed from WebCore/bindings/v8/custom/V8ObjectEventListener.cpp.
        * bindings/v8/V8ObjectEventListener.h: Renamed from WebCore/bindings/v8/custom/V8ObjectEventListener.h.
        * bindings/v8/V8WorkerContextEventListener.cpp: Renamed from WebCore/bindings/v8/custom/V8WorkerContextEventListener.cpp.
        * bindings/v8/V8WorkerContextEventListener.h: Renamed from WebCore/bindings/v8/custom/V8WorkerContextEventListener.h.

2009-03-13  Adele Peterson  <adele@apple.com>

        Reviewed by Justin Garcia.

        Fix for <rdar://problem/5089327> Color of quoted content is wrong when pasted inside other quoted content

        Test: editing/pasteboard/5089327.html

        Handle spans being pasted within a quoted region in the same way we handle "paste as quotation" content.

        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::handleStyleSpansBeforeInsertion):
        (WebCore::ReplaceSelectionCommand::handleStyleSpans):

2009-03-13  Greg Bolsinga  <bolsinga@apple.com>

        Reviewed by Simon Fraser.

        Update Geolocation perimission dialogs to be asynchronous.
        https://bugs.webkit.org/show_bug.cgi?id=24505

        Geolocation now requests permission from the Chrome asynchronously.
        The Chrome is passed the Geolocation object, and the Chrome sets the permission
        on the Geolocation. Geolocation also tracks if the Chrome should clear its cache
        of SecurityOrigins with geolocation permission. This is so that the GeolocationService
        can inform the Chrome of its request, and the Chrome is also free to implement its
        own policy.
        
        * WebCore.base.exp:
        * WebCore.xcodeproj/project.pbxproj:
        * page/Chrome.cpp:
        (WebCore::Chrome::requestGeolocationPermissionForFrame):
        * page/Chrome.h:
        * page/ChromeClient.h:
        (WebCore::ChromeClient::requestGeolocationPermissionForFrame):
        * page/Geolocation.cpp:
        (WebCore::Geolocation::Geolocation):
        (WebCore::Geolocation::getCurrentPosition):
        (WebCore::Geolocation::watchPosition):
        (WebCore::Geolocation::setIsAllowed):
        (WebCore::Geolocation::displayChallengeIfNecessary):
        (WebCore::Geolocation::geolocationServicePositionChanged):
        * page/Geolocation.h:
        (WebCore::Geolocation::isAllowed):
        (WebCore::Geolocation::setShouldClearCache):
        (WebCore::Geolocation::shouldClearCache):
        (WebCore::Geolocation::):

2009-03-13  Anders Carlsson  <andersca@apple.com>

        Reviewed by Dan Bernstein.

        <rdar://problem/6610666> Revise the Cocoa event model text API
        
        Add a NPCocoaEventTextInput event type. Remove the text input variables.
        
        * bridge/npapi.h:
        (_NPCocoaEvent::):

2009-03-13  Kevin Decker  <kdecker@apple.com>

        Reviewed by Anders.

        <rdar://problem/6630340> REGRESSION (39114-39115): Unity Web Player no longer works if Flip4Mac is also installed
        
        The code assumed if we have a plug-in that supports "application/x-oleobject" we should always prefer the object tag
        over of an embed tag. That assumption can cause the Mac platform to load the wrong plug-in, as Flip4Mac claims supports
        for x-oleobject.
        
        * rendering/RenderPartObject.cpp:
        (WebCore::shouldUseEmbedDescendant): Made the Mac platform always return true here. 

2009-03-13  Jian Li  <jianli@chromium.org>

        Reviewed by Dimitri Glazkov.

        https://bugs.webkit.org/show_bug.cgi?id=24559
        Need to port JSC fix (r41565) to V8 in order to fix layout test onload-single-line-comment.html.

        * bindings/v8/custom/V8LazyEventListener.cpp:
        (WebCore::V8LazyEventListener::getListenerFunction):
        (WebCore::V8LazyEventListener::getWrappedListenerFunction):

2009-03-13  Jian Li  <jianli@chromium.org>

        Reviewed by Dimitri Glazkov.

        https://bugs.webkit.org/show_bug.cgi?id=24557
        This is to support running multiple workers in a single worker process in chromium.

        * bindings/v8/custom/V8WorkerContextEventListener.cpp:
        (WebCore::V8WorkerContextEventListener::handleEvent):
        Add locker to v8 event listener of worker context.

2009-03-13  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=24575
        XHR response is incorrect after a network error.

        Tests: http/tests/xmlhttprequest/cross-site-denied-response-sync-2.html
               http/tests/xmlhttprequest/cross-site-denied-response-sync.html
               http/tests/xmlhttprequest/cross-site-denied-response.html

        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::networkError): Call internalAbort() to fully reset the request.
        (WebCore::XMLHttpRequest::didFailRedirectCheck): No need to call internalAbort() here. Note
        that since internalAbort() can drop GC protection, it is not safe to use the object after
        this call.
        (WebCore::XMLHttpRequest::didReceiveData): Check that the request wasn't aborted, and
        return early if it was. This can happen during sync requests, as the loader does not know
        that it was aborted, and just synthesizes all callbacks.

2009-03-13  Adam Bergkvist <adam.bergkvist@ericsson.com>

        Reviewed by Alexey Proskuryakov.

        https://bugs.webkit.org/show_bug.cgi?id=3547
        XMLHttpRequest.statusText returns always "OK"

        Covered by existing tests (which now pass on all platforms but Mac).

        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::statusText): Return ResourceResponse status text. It is now up
        to each platform to correctly set the status text or set it to "OK" to retain current
        behavior.

2009-03-13  Adam Bergkvist <adam.bergkvist@ericsson.com>

        Reviewed by Alexey Proskuryakov.

        https://bugs.webkit.org/show_bug.cgi?id=24349
        [QT] HTTP status text is never set

        Set HTTP status text to the reason phrase attribute of QNetworkReply.

        * platform/network/qt/QNetworkReplyHandler.cpp:
        (WebCore::QNetworkReplyHandler::sendResponseIfNeeded):

2009-03-12  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Mark Rowe

        <rdar://problem/6622300>: Reproducible crash on
        <http://www.editgrid.com/explore/tnc/dave/FusionChart%3A_Candlestick>
        
        Prevent CSSStyleSheet::checkLoaded() writing to freed memory when it gets
        deleted from under itself. The sheetLoaded() notification can allow scripts
        to run via HTMLTokenizer::executeScriptsWaitingForStylesheets(),
        which can cause the last ref to the CSSStyleSheet to be released.

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

2009-03-12  Kevin Ollivier  <kevino@theolliviers.com>

        wx build fix. Allow make-generated-sources.sh to pass args down to DerivedSources.make

        * make-generated-sources.sh:

2009-03-12  Adam Treat  <adam.treat@torchmobile.com>

        Reviewed by Oliver Hunt.

        https://bugs.webkit.org/show_bug.cgi?id=24498
        Fix the Qt port to use the same algorithm for drawing dashed and dotted
        borders as the other ports.  This makes the Qt port pixel-for-pixel perfect
        compared to border drawing with Apple's canonical mac port and much closer
        to konqueror and firefox behavior.

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

2009-02-26  Eric Seidel  <eric@webkit.org>

        Reviewed by Justin Garcia.

        Clean up DOMSelection to use some helper functions
        making the code smaller, and less error-prone.
        https://bugs.webkit.org/show_bug.cgi?id=19221

        I tried moving DOMSelection off of rangeCompliantEquivalent
        but failed.  VisibleSelection holds positions like (table, 1) to mean
        "after the table".

        * page/DOMSelection.cpp:
        (WebCore::DOMSelection::visibleSelection):
        (WebCore::anchorPosition):
        (WebCore::focusPosition):
        (WebCore::basePosition):
        (WebCore::extentPosition):
        (WebCore::DOMSelection::anchorNode):
        (WebCore::DOMSelection::anchorOffset):
        (WebCore::DOMSelection::focusNode):
        (WebCore::DOMSelection::focusOffset):
        (WebCore::DOMSelection::baseNode):
        (WebCore::DOMSelection::baseOffset):
        (WebCore::DOMSelection::extentNode):
        (WebCore::DOMSelection::extentOffset):
        * page/DOMSelection.h:

2009-03-12  Dmitry Titov  <dimich@chromium.org>

        Reviewed by Dimitri Glazkov.

        https://bugs.webkit.org/show_bug.cgi?id=24563
        Change ResourceRequest to be a struct rather then a class to match other declarations.

        * platform/network/chromium/ResourceRequest.h:

2009-03-12  David Levin  <levin@chromium.org>

        Reviewed by Darin Fisher.

        Bug 24530: width100percent-searchfield.html should be fixed for chromium.
        <https://bugs.webkit.org/show_bug.cgi?id=24530>

        Compensate for r39924 in chromium, which broke LayoutTests/fast/replaced/width100percent-searchfield.html

        * css/themeChromiumWin.css: Added.
        Overrides the changes to start supporting input[type="search"] on Windows (since
        Chromium doesn't do anything special for this).

        * rendering/RenderThemeChromiumWin.cpp:
        (WebCore::supportsFocus):
        (WebCore::RenderThemeChromiumWin::extraDefaultStyleSheet):
        (WebCore::RenderThemeChromiumWin::determineState):
        (WebCore::RenderThemeChromiumWin::getThemeData):

2009-03-12  Greg Bolsinga  <bolsinga@apple.com>

        Reviewed by Antti Koivisto.

        https://bugs.webkit.org/show_bug.cgi?id=24506
        Geolocation in Safari differs from the spec, no Coordinates attribute on Position
        
        Get up to date.

        * DerivedSources.make:
        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.scons:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * bindings/js/JSGeolocationCustom.cpp:
        (WebCore::createPositionOptions):
        * page/Coordinates.cpp: Added.
        (WebCore::Coordinates::toString):
        * page/Coordinates.h: Added.
        (WebCore::Coordinates::create):
        (WebCore::Coordinates::latitude):
        (WebCore::Coordinates::longitude):
        (WebCore::Coordinates::altitude):
        (WebCore::Coordinates::accuracy):
        (WebCore::Coordinates::altitudeAccuracy):
        (WebCore::Coordinates::heading):
        (WebCore::Coordinates::speed):
        (WebCore::Coordinates::Coordinates):
        * page/Coordinates.idl: Added.
        * page/Geoposition.cpp:
        (WebCore::Geoposition::toString):
        * page/Geoposition.h:
        (WebCore::Geoposition::create):
        (WebCore::Geoposition::coords):
        (WebCore::Geoposition::Geoposition):
        * page/Geoposition.idl:
        * page/PositionOptions.h:
        (WebCore::PositionOptions::create):
        (WebCore::PositionOptions::maximumAge):
        (WebCore::PositionOptions::setMaximumAge):
        (WebCore::PositionOptions::PositionOptions):
        * platform/mac/GeolocationServiceMac.mm:
        (-[WebCoreCoreLocationObserver locationManager:didUpdateToLocation:fromLocation:]):

2009-03-12  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Darin Fisher.

        https://bugs.webkit.org/show_bug.cgi?id=24496
        Fix console logging of non-string values by coercing the argument to
        a string, for V8 bindings.

        Test: fast/js/console-non-string-values.html

        * bindings/v8/ScriptValue.cpp: Added toString method.
        (WebCore::ScriptValue::toString):
        * bindings/v8/ScriptValue.h: Added PlatformString, ScriptState includes
            and toString declaration.

2009-03-12  Darin Fisher  <darin@chromium.org>

        Reviewed by Dimitri Glazkov.

        Eliminate ChromiumBridge::uiResourceProtocol
        https://bugs.webkit.org/show_bug.cgi?id=24558

        * platform/chromium/ChromiumBridge.h:

2009-03-12  Greg Bolsinga  <bolsinga@apple.com>

        Reviewed by Simon Fraser.

        Missing breaks in switch statement
        https://bugs.webkit.org/show_bug.cgi?id=24556

        * platform/mac/GeolocationServiceMac.mm:
        (-[WebCoreCoreLocationObserver locationManager:didFailWithError:]):

2009-03-12  Darin Fisher  <darin@chromium.org>

        Reviewed by Dimitri Glazkov.

        https://bugs.webkit.org/show_bug.cgi?id=24554
        Remove some unused functions from ChromiumBridge.

        * platform/chromium/ChromiumBridge.h:

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

        Reviewed by Darin Fisher and Justin Garcia.

        Safari crashes during drag and drop in Google presentations
        due to mutation event handlers removing DOM content during insertNode
        https://bugs.webkit.org/show_bug.cgi?id=22634

        Added a bunch of "null" checks to make sure nodes are still
        in the document before we operate on them.  This is an
        inelegant solution, but it's the best we have for now.
        
        Test: editing/selection/crash-on-drag-with-mutation-events.html

        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::insertNodeAt):
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::doApply):

2009-03-12  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Adam Treat.

        https://bugs.webkit.org/show_bug.cgi?id=24525
        REGRESSION: Inspector window doesn't close when inspected page is
        destroyed. This is a revert of r41158, which became unnecessary when
        InspectorController became ref-counted in r41462.

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::inspectedPageDestroyed): Reset m_inspectedPage
            after calling close().
        (WebCore::InspectorController::stopUserInitiatedProfiling): Remove
            m_inspectedPage check guard around profile logic.

2009-03-12  Peter Kasting  <pkasting@google.com>

        Reviewed by Darin Fisher.

        https://bugs.webkit.org/show_bug.cgi?id=24502
        Make horizontal scrolling on Windows always go the correct direction.

        * platform/PlatformWheelEvent.h:
        * platform/win/WheelEventWin.cpp:
        (WebCore::PlatformWheelEvent::PlatformWheelEvent):

2009-03-12  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Simon Fraser.

        https://bugs.webkit.org/show_bug.cgi?id=24496
        Fix console logging of non-string values by coercing the argument to
        a string.

        Test: fast/js/console-non-string-values.html

        * bindings/js/ScriptValue.cpp: Removed PlatformString include.
        * bindings/js/ScriptValue.h: Added toString method.
        (WebCore::ScriptValue::toString):
        * page/Console.cpp:
        (WebCore::getFirstArgumentAsString): Changed firstArgumentAsString method to use
            ScriptValue::toString.
        (WebCore::Console::addMessage): added extra ScriptState argument to callsite.
        (WebCore::Console::count): Ditto.

2009-03-12  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Adele Peterson.
        
        https://bugs.webkit.org/show_bug.cgi?id=24508
        
        Fix updating of text field with placeholder text when value is set
        by ensuring that updatePlaceholderVisibility() is called after
        the value has been updated, not before.

        Test: fast/forms/placeholder-set-value.html

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

2009-03-12  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dave Hyatt
        
        https://bugs.webkit.org/show_bug.cgi?id=24552
        
        Hit testing involving normal flow, self-painting layers (e.g. reflections)
        was broken because it was not null-testing the result of hitTestLayer(),
        so bailing early with a nil hit layer.

        Test: fast/layers/normal-flow-hit-test.html

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

2009-03-12  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Cameron Zwarich.

        Removed zero-sized files, left over from improperly applied patch.

        * platform/graphics/chromium/ThemeHelperChromiumWin.cpp: Removed.
        * platform/graphics/chromium/ThemeHelperChromiumWin.h: Removed.

2009-03-12  Adam Treat  <adam.treat@torchmobile.com>

        Reviewed by George Staikos.

        Do not ignore alpha color in optimization.  Hard to believe, but there
        are websites that fill the entire page with a tiled image consisting of
        nothing but a 100% transparent 1x1 image. <cough>orbitz.com</cough>

        * platform/graphics/qt/ImageQt.cpp:
        (WebCore::BitmapImage::checkForSolidColor):

2009-03-12  Julien Chaffraix  <jchaffraix@webkit.org>

        Reviewed by Darin Adler.

        Bug 24110: cloneNode should call cloneElement and not the reverse

        - Splitted the code from cloneNode into cloneElementWithChildren and cloneElementWithChildren.
          Now cloneNode calls one of the 2 previous methods.

        - Renamed cloneElement to cloneElementWithoutChildren as it was the previous behaviour.

        - Moved cloneNode to the Element private section so that WebCore callers cannot use it.

        - Removed Element::cloneNode usage through WebCore.

        * dom/Element.cpp:
        (WebCore::Element::cloneNode): Moved to Element's private section and it
        now calls the two next methods.
        (WebCore::Element::cloneElementWithChildren): Added.
        (WebCore::Element::cloneElementWithoutChildren): Renamed from cloneElement
        to avoid ambiguity.
        * dom/Element.h:

        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::addInlineStyleIfNeeded): Changed call to cloneElement
        to call to cloneElementWithoutChildren.
        * editing/BreakBlockquoteCommand.cpp:
        (WebCore::BreakBlockquoteCommand::doApply): Ditto.
        * editing/IndentOutdentCommand.cpp:
        (WebCore::IndentOutdentCommand::indentRegion): Ditto.
        * editing/InsertParagraphSeparatorCommand.cpp:
        (WebCore::InsertParagraphSeparatorCommand::doApply): Ditto.
        * editing/ModifySelectionListLevel.cpp:
        (WebCore::IncreaseSelectionListLevelCommand::doApply): Ditto.
        * editing/SplitElementCommand.cpp:
        (WebCore::SplitElementCommand::doApply): Ditto.
        * editing/markup.cpp:
        (WebCore::createFragmentFromText): Ditto.
        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::buildShadowTree): Ditto.
        (WebCore::SVGUseElement::expandUseElementsInShadowTree): Ditto.

2009-03-12  Dirk Schulze  <krit@webkit.org>

        Reviewed by Oliver Hunt.

        Fixed a crash on the 1x1 pixel check for background image in gtk.
        We need to load the image first and need to be sure that the image
        is not null before checking the type. 

        * platform/graphics/cairo/ImageCairo.cpp:
        (WebCore::BitmapImage::checkForSolidColor):

2009-03-12  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Alexey Proskuryakov.

        https://bugs.webkit.org/show_bug.cgi?id=24544
        Rename setUrl to setURL

        Use proper case for setUrl method, rename it to setURL.

        * platform/network/ResourceResponseBase.cpp:
        (WebCore::ResourceResponseBase::adopt):
        * platform/network/ResourceResponseBase.h:
        * platform/network/curl/ResourceHandleManager.cpp:
        (WebCore::writeCallback):
        (WebCore::headerCallback):
        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::fillResponseFromMessage):
        (WebCore::queryInfoCallback):

2009-03-12  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Alexey Proskuryakov.

        https://bugs.webkit.org/show_bug.cgi?id=24519
        [GTK] Use two argument KURL ctor in ResourceHandleSoup

        Use two argument KURL ctor, the single argument ctor expects its
        input to be the output of a previous KURL::parse call, which is
        not the case here.

        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::fillResponseFromMessage):
        (WebCore::queryInfoCallback):

2009-03-11  Jon Honeycutt  <jhoneycutt@apple.com>

        Fix for <rdar://6418681>
        https://bugs.webkit.org/show_bug.cgi?id=22644

        Reviewed by Steve Falkenburg.

        * plugins/win/PluginPackageWin.cpp:
        (WebCore::PluginPackage::isPluginBlacklisted): Add the Citrix ICA
        Client plug-in to the blacklist; it requires a Mozilla-based browser.

2009-03-12  Oliver Hunt  <oliver@apple.com>

        Reviewed by NOBODY (build fix).

        build fix.

        * html/CanvasRenderingContext2D.h:

2009-03-11  Oliver Hunt  <oliver@apple.com>

        Reviewed by Adele Peterson.

        <rdar://problem/6673852> Widget "Simple World Clock" does not display with Safari 4

        A number of dashboard widgets rely on canvas failing silently when given invalid
        colors for gradient stops, but both the spec and firefox throw exceptions here.
        So we work around this by creating a dashboard quirk that will only suppress the
        exception in dashboard compatibility mode.

        Test: fast/canvas/canvas-gradient-addStop-error.html

        * html/CanvasGradient.cpp:
        (WebCore::CanvasGradient::CanvasGradient):
        (WebCore::CanvasGradient::addColorStop):
        * html/CanvasGradient.h:
        (WebCore::CanvasGradient::setDashboardCompatibilityMode):
        * html/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::prepareGradientForDashboard):
        (WebCore::CanvasRenderingContext2D::createLinearGradient):
        (WebCore::CanvasRenderingContext2D::createRadialGradient):
        * html/CanvasRenderingContext2D.h:

2009-03-11  David Kilzer  <ddkilzer@apple.com>

        Clarify comments regarding order of FEATURE_DEFINES

        Rubber-stamped by Mark Rowe.

        * Configurations/WebCore.xcconfig: Added warning about the
        consequences when FEATURE_DEFINES are not kept in sync.

2009-03-11  Gustavo Noronha Silva  <gns@gnome.org>

        Reviewed by Holger Freyther.

        https://bugs.webkit.org/show_bug.cgi?id=24515
        [GTK] soup backend should use GMappedFile instead of mmap directly

        Rewrite mmap code used to upload files to use GMappedFile, so that
        it is platform-independent.

        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::ResourceHandle::startHttp):

2009-03-11  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        - WebCore part of fixing <rdar://problem/3919124> Thai text selection
          in Safari is incorrect

        Test: platform/mac/editing/selection/word-thai.html

        Tested on Mac, but should work on all ICU platforms (or more precisely
        on all platforms that implement
        WTF::Unicode::hasLineBreakingPropertyComplexContext() correctly).

        * editing/TextIterator.cpp:
        (WebCore::BackwardsCharacterIterator::BackwardsCharacterIterator):
        Added.
        (WebCore::BackwardsCharacterIterator::range): Added.
        (WebCore::BackwardsCharacterIterator::advance): Added.

        * editing/TextIterator.h: Added BackwardsCharacterIterator with the
        minimal functionality required for this patch.
        (WebCore::BackwardsCharacterIterator::atEnd): Added.

        * editing/visible_units.cpp:
        (WebCore::firstNonComplexContextLineBreak): Added this helper function
        that returns the index of the first character in the string whose
        Unicode line breaking property value is not SA ("Complex Context"), or
        the length of the string if there is no such character.
        (WebCore::lastNonComplexContextLineBreak): Added this helper function
        that returns the index of the last character in the string whose
        Unicode line breaking property value is not SA ("Complex Context"), or
        -1 if there is no such character.
        (WebCore::previousBoundary): Changed the signature of the search
        function to include an offset parameter. Renamed the 'exception' local
        variable to 'ec' and changed its type to ExceptionCode. Extend the
        string forwards until the first character with Unicode line breaking
        property value other than SA. This gives the boundary search function
        enough context in the forward direction. Changed to use a
        BackwardsCharacterIterator for translating the backwards offset into
        a position.
        (WebCore::nextBoundary): Changed the signature of the search
        function to include an offset parameter. Extend the string backwards
        until the first character with Unicode line breaking property value
        other than SA. This gives the boundary search function enough context in
        the backwards direction. Restricted the workaround for <rdar://5192593>
        only to the line break case, because it was causing an extra character
        to be selected following a word that ended with a combining mark.
        (WebCore::startWordBoundary): Added an offset parameter. Check that
        going backwards from the given offset, there is a character with Unicode
        line breaking property value other than SA, and otherwise return 0 to
        request more context.
        (WebCore::endWordBoundary): Similar, but in reverse.
        (WebCore::previousWordPositionBoundary): Similar.
        (WebCore::nextWordPositionBoundary): Similar.
        (WebCore::startSentenceBoundary): Updated for the new search function
        signature.
        (WebCore::endSentenceBoundary): Ditto.
        (WebCore::previousSentencePositionBoundary): Ditto.
        (WebCore::nextSentencePositionBoundary): Ditto.

2009-03-11  Darin Adler  <darin@apple.com>

        Reviewed by Mark Rowe.

        Don't use "::" in thread names because it is ugly!

        * loader/icon/IconDatabase.cpp:
        (WebCore::IconDatabase::open): Use "WebCore: " instead of "WebCore::".
        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::ResourceHandle::loaderRunLoop): Call this "WebCore: CFNetwork Loader" to make
        it clear this is a WebCore-created thread.
        * storage/DatabaseThread.cpp:
        (WebCore::DatabaseThread::start): Use "WebCore: " instead of "WebCore::".
        * storage/LocalStorageThread.cpp:
        (WebCore::LocalStorageThread::start): Use "WebCore: " instead of "WebCore::".
        * workers/WorkerThread.cpp:
        (WebCore::WorkerThread::start): Use "WebCore: " instead of "WebCore::".

2009-03-11  Mark Rowe  <mrowe@apple.com>

        Rubber-stamped by Darin Adler.

        <rdar://problem/6653286> WebCore's implementation of screenIsMonochrome is needlessly complex

        * platform/mac/PlatformScreenMac.mm:
        (WebCore::screenIsMonochrome): Return false.

2009-03-11  Beth Dakin  <bdakin@apple.com>

        Reviewed by Dan Bernstein.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=14749 percentage 
        top value on position:relative child not calculated correctly if 
        parent has percentage height
        - and corresponding -
        <rdar://problem/6172925>

        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::relativePositionOffsetY):

2009-03-11  Jian Li  <jianli@chromium.org>

        Reviewed by Dimitri Glazkov.

        Implement ScriptValue::hasNoValue for V8.
        https://bugs.webkit.org/show_bug.cgi?id=24507

        * bindings/v8/ScriptValue.h:
        (WebCore::ScriptValue::hasNoValue):

2009-03-11  David Levin  <levin@chromium.org>

        Reviewed by Dimitri Glazkov.

        Bug 24459: Add v8 bindings for event.
        <https://bugs.webkit.org/show_bug.cgi?id=24459>

        Adding custom event bindings.

        * bindings/v8/custom/V8AbstractEventListener.cpp: Added.
        * bindings/v8/custom/V8AbstractEventListener.h: Added.
        * bindings/v8/custom/V8AttrCustom.cpp:
        Fixed messed up copyright header.
        * bindings/v8/custom/V8CustomEventListener.cpp: Added.
        * bindings/v8/custom/V8CustomEventListener.h:
        Replaced forwarding header with the real implementation.
        * bindings/v8/custom/V8ElementCustom.cpp:
        * bindings/v8/custom/V8LazyEventListener.cpp: Added.
        * bindings/v8/custom/V8LazyEventListener.h: Added.
        * bindings/v8/custom/V8ObjectEventListener.cpp: Added.
        * bindings/v8/custom/V8ObjectEventListener.h: Added.
        * bindings/v8/custom/V8WorkerContextEventListener.cpp: Added.
        * bindings/v8/custom/V8WorkerContextEventListener.h: Added.

2009-03-11  Darin Fisher  <darin@chromium.org>

        Reviewed by Dimitri Glazkov.

        https://bugs.webkit.org/show_bug.cgi?id=24521
        Add some missing includes for the non-JSC build.

        * platform/text/PlatformString.h: added OwnPtr.h
        * xml/XMLHttpRequest.cpp: added SecurityOrigin.h

2009-03-11  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Darin Adler

        https://bugs.webkit.org/show_bug.cgi?id=24531
        
        Make sure that AnimationControllerPrivate::getAnimatedStyleForRenderer() never
        returns a null style if it has a valid renderer, which could happen if a
        CompositeAnimation existed, but wasn't running any animations or transitions.

        * page/animation/AnimationController.cpp:
        (WebCore::AnimationControllerPrivate::getAnimatedStyleForRenderer):

2009-03-11  Simon Fraser  <simon.fraser@apple.com>

        Fix Scons build. Patch from Alexander Guy.

        * WebCore.scons:

2009-03-11  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein
       
        https://bugs.webkit.org/show_bug.cgi?id=23093
        
        When the cancel button in the search field is shown or hidden,
        we need to explicitly setStyle() on the cancel button's renderer,
        to ensure that repaint happens. Changing the style without telling
        the renderer won't work.

        Test: fast/repaint/search-field-cancel.html

        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::subtreeHasChanged):
        (WebCore::RenderTextControlSingleLine::updateFromElement):
        (WebCore::RenderTextControlSingleLine::createCancelButtonStyle):
        (WebCore::RenderTextControlSingleLine::updateCancelButtonVisibility):
        (WebCore::RenderTextControlSingleLine::visibilityForCancelButton):
        * rendering/RenderTextControlSingleLine.h:

2009-03-11  Hironori Bono  <hbono@chromium.org>

        Reviewed by Alexey Proskuryakov.

        https://bugs.webkit.org/show_bug.cgi?id=15790
        Ligatures aren't accounted for when manipulating VisiblePositions

        Changed cursorMovementIterator rules to prevent a cursor from moving in the middle of an
        Indic ligature which uses a virama sign.
        
        Test: editing/deleting/skip-virama-001.html

        * platform/text/TextBreakIteratorICU.cpp:
        (WebCore::cursorMovementIterator):

2009-03-11  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by George Staikos.

        https://bugs.webkit.org/show_bug.cgi?id=24513
        REGRESSION: Cursor movement doesn't work on Tiger (ICU 3.2)

        Fixes existing tests on Tiger.

        * platform/text/TextBreakIteratorICU.cpp: (WebCore::cursorMovementIterator):
        Use characterBreakIterator on Tiger (like we used to do).

2009-03-11  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Oliver Hunt.

        <rdar://problem/4072827> Downloaded non-ASCII file name becomes garbled

        * platform/network/mac/ResourceRequestMac.mm:
        (WebCore::ResourceRequest::doUpdatePlatformRequest): Correct selector name
        in instancesRespondToSelector.

2009-03-11  Jan Michael Alonzo  <jmalonzo@webkit.org>

        Reviewed by Holger Freyther.

        [GTK]DumpRenderTree doesn't compile for non-X11 GTK ports anymore
        https://bugs.webkit.org/show_bug.cgi?id=2260

        Add missing stdio.h include to get the build going

        * plugins/gtk/PluginPackageGtk.cpp:

2009-03-10  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by Ken Kocienda.

        * dom/Range.cpp:
        (WebCore::Range::addLineBoxRects): If the range ended at [div, 0], addLineBoxRects
        would include rects for the divs contents.  Set the correct RenderObject to stop at.

2009-03-10  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Sam Weinig.

        <rdar://problem/6123770> Restrict access to document.cookie when making a cross-site XHR

        * xml/XMLHttpRequest.cpp: (WebCore::XMLHttpRequest::responseXML): Removed an incorrect
        comment about cookie support. Firefox doesn't expose cookies on responseXML at all, and
        there are security concerns with exposing them for cross-origin requests, so it's not clear
        if we want to change anything here.

2009-03-10  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Darin Adler

        https://bugs.webkit.org/show_bug.cgi?id=24503
        
        Fix hit testing of absolutely positioned single line text controls by
        ensuring that we set result.innerNode() correctly. If the hit node is
        a descendant of the inner text element or if it is the <input> itself,
        then we say we hit the innerTextElement.
        
        Rename hitInnerTextBlock() to hitInnerTextElement() to match the
        'innerTextElement' terminology used elsewhere.
        
        Assert that if renderer()->hitTest() returns false, no-one set
        result.innerNode().

        Test: fast/forms/search-abs-pos-cancel-button.html

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::hitTestContents):
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::hitInnerTextElement):
        * rendering/RenderTextControl.h:
        * rendering/RenderTextControlMultiLine.cpp:
        (WebCore::RenderTextControlMultiLine::nodeAtPoint):
        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::nodeAtPoint):

2009-03-10  Antti Koivisto  <antti@apple.com>

        Reviewed by Mark Rowe.

        <rdar://problem/6668238> WebCore is registering text encodings needlessly from KURL constructor.
        
        Another case where we would trigger extended encoding loading needlessly.

        * platform/text/TextEncoding.cpp:
        (WebCore::TextEncoding::isNonByteBasedEncoding):

2009-03-10  Beth Dakin  <bdakin@apple.com>

        Reviewed by Darin Adler.

        Fix for <rdar://problem/6624769> REGRESSION (Safari 4 PB): No 
        scroll bar appears for long line of text with NOWRAP set

        This is a regression from http://trac.webkit.org/changeset/32226
        I talked with Dan about the original change, and we decided that 
        the best fix was to remove his small potential-optimization that 
        only created a separate line box for whitespace under certain 
        circumstances. This new code will always create a separate line 
        box.

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

2009-03-10  Sam Weinig  <sam@webkit.org>

        Reviewed by Geoffrey Garen.

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

        Use same rule for loading java applets as we do for images.

        * html/HTMLAppletElement.cpp:
        (WebCore::HTMLAppletElement::createRenderer):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::createJavaAppletWidget):

2009-03-10  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by David Kilzer.

        Get rid of revealCaret and use revealSelection instead.

        * WebCore.base.exp:
        * editing/SelectionController.cpp:
        (WebCore::SelectionController::setSelection):
        * page/Frame.cpp:
        (WebCore::Frame::revealSelection):
        * page/Frame.h:

2009-03-10  Cameron Zwarich  <cwzwarich@uwaterloo.ca>

        Reviewed by Geoff Garen.

        Bug 23736: WebKit Crashes on http://g-conquest.fr/~server2
        <https://bugs.webkit.org/show_bug.cgi?id=23736>
        <rdar://problem/6560278>

        Before replacing the document, FrameLoader::executeIfJavaScriptURL()
        should call stopAllLoaders(), just like continueLoadAfterNavigationPolicy().

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

2009-03-10  Darin Adler  <darin@apple.com>

        Reviewed by Alexey Proskuryakov.

        Bug 24494: crash when deleting at end of document and merging paragraphs
        https://bugs.webkit.org/show_bug.cgi?id=24494
        rdar://problem/6571537

        Test: editing/deleting/merge-at-end-of-document.html

        * dom/Range.cpp:
        (WebCore::Range::compareBoundaryPoints): Split out assertion. It's better not to
        use && in assertions since we'd like to know which condition is failing.

        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::applyInlineStyleToRange): Added a null check before
        calling compareBoundaryPoints, since a 0 for the node is ambiguous and so the
        function doesn't know which value to return.

2009-03-10  Dirk Schulze  <krit@webkit.org>

        Reviewed by Eric Seidel. Math checked by Oliver Hunt.

        Implement the Cairo version of the checkForSolidColor() method. This halfes the
        time to draw on 1x1 px background images.
        I added two new calls to Color for the pixel manipulation on cairo_surface's.
        They are neede to premultiply/unpremultiply the colors of the surface.

        [CAIRO] Introduce single-pixel image optimizations
        https://bugs.webkit.org/show_bug.cgi?id=17284

        * platform/graphics/Color.cpp:
        (WebCore::colorFromPremultipliedARGB):
        (WebCore::premultipliedARGBFromColor):
        * platform/graphics/Color.h:
        * platform/graphics/cairo/ImageBufferCairo.cpp:
        (WebCore::ImageBuffer::getImageData):
        (WebCore::ImageBuffer::putImageData):
        * platform/graphics/cairo/ImageCairo.cpp:
        (WebCore::BitmapImage::checkForSolidColor):

2009-03-06  Darin Fisher  <darin@chromium.org>

        Reviewed by Sam Weinig.

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

        Add support for registering noAccess URL schemes:
        1-  Add FrameLoader::registerURLSchemeAsNoAccess, and have SecurityOrigin check
        that list upon construction (similar to how isLocal is implemented).
        2-  Make InspectorController call grantUniversalAccess on its Document's
        SecurityOrigin at the time when windowScriptObjectAvailable is called.

        This enables content such as the inspector to be loaded from a custom (non-file)
        URL, which is how Chromium loads the inspector.  It also allows other URL schemes
        to be treated like data: URLs, which Chromium utilizes for its various HTML-based
        UI panels.

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::windowScriptObjectAvailable):
        * loader/FrameLoader.cpp:
        (WebCore::localSchemes):
        (WebCore::noAccessSchemes):
        (WebCore::FrameLoader::loadItem):
        * loader/FrameLoader.h:
        * page/SecurityOrigin.cpp:
        (WebCore::SecurityOrigin::SecurityOrigin):
        (WebCore::SecurityOrigin::isLocal):

2009-03-10  Xan Lopez  <xlopez@igalia.com>

        Build fix, no review

        * page/mac/AccessibilityObjectWrapper.mm:
        (textMarkerForVisiblePosition):
        (visiblePositionForTextMarker):

2009-03-10  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=24491
        Rename posOffset to m_offset, get rid of accessor

        As suggested in dom/Position.h, this patch gets rid of the
        'offset()' accessor and renames posOffset to m_offset. I've used
        m_offset instead of offset to follow the style guide lines, since
        Position is still a class and not a structure. If the long term
        plan is still to make it a structure it would be pretty easy to
        just s/m_offset/offset/ globally when that is achieved.

        * dom/Position.cpp:
        (WebCore::Position::previous):
        (WebCore::Position::next):
        (WebCore::Position::atStart):
        (WebCore::Position::atEnd):
        (WebCore::Position::renderedOffset):
        (WebCore::Position::isCandidate):
        (WebCore::Position::inRenderedText):
        (WebCore::Position::isRenderedCharacter):
        (WebCore::Position::rendersInDifferentPosition):
        (WebCore::Position::leadingWhitespacePosition):
        (WebCore::Position::debugPosition):
        (WebCore::Position::formatForDebugger):
        * dom/Position.h:
        (WebCore::Position::Position):
        * dom/PositionIterator.h:
        (WebCore::PositionIterator::PositionIterator):
        * dom/Range.cpp:
        * dom/RangeBoundaryPoint.h:
        (WebCore::RangeBoundaryPoint::position):
        (WebCore::RangeBoundaryPoint::set):
        (WebCore::RangeBoundaryPoint::setOffset):
        (WebCore::RangeBoundaryPoint::setToChild):
        (WebCore::RangeBoundaryPoint::setToStart):
        (WebCore::RangeBoundaryPoint::setToEnd):
        (WebCore::RangeBoundaryPoint::childBeforeWillBeRemoved):
        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::applyRelativeFontStyleChange):
        (WebCore::ApplyStyleCommand::applyInlineStyleToRange):
        (WebCore::ApplyStyleCommand::removeInlineStyle):
        (WebCore::ApplyStyleCommand::nodeFullySelected):
        (WebCore::ApplyStyleCommand::nodeFullyUnselected):
        (WebCore::ApplyStyleCommand::splitTextAtStartIfNeeded):
        (WebCore::ApplyStyleCommand::splitTextAtEndIfNeeded):
        (WebCore::ApplyStyleCommand::splitTextElementAtStartIfNeeded):
        (WebCore::ApplyStyleCommand::splitTextElementAtEndIfNeeded):
        (WebCore::ApplyStyleCommand::mergeStartWithPreviousIfIdentical):
        (WebCore::ApplyStyleCommand::mergeEndWithNextIfIdentical):
        (WebCore::ApplyStyleCommand::joinChildTextNodes):
        * editing/BreakBlockquoteCommand.cpp:
        (WebCore::BreakBlockquoteCommand::doApply):
        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::insertNodeAt):
        (WebCore::CompositeEditCommand::positionOutsideTabSpan):
        (WebCore::CompositeEditCommand::rebalanceWhitespaceAt):
        (WebCore::CompositeEditCommand::prepareWhitespaceAtPositionForSplit):
        (WebCore::CompositeEditCommand::deleteInsignificantText):
        (WebCore::CompositeEditCommand::removePlaceholderAt):
        (WebCore::CompositeEditCommand::moveParagraphs):
        (WebCore::CompositeEditCommand::breakOutOfEmptyMailBlockquotedParagraph):
        * editing/DeleteSelectionCommand.cpp:
        (WebCore::updatePositionForNodeRemoval):
        (WebCore::updatePositionForTextRemoval):
        (WebCore::DeleteSelectionCommand::handleGeneralDelete):
        (WebCore::DeleteSelectionCommand::fixupWhitespace):
        * editing/Editor.cpp:
        (WebCore::Editor::setComposition):
        (WebCore::Editor::advanceToNextMisspelling):
        (WebCore::Editor::getCompositionSelection):
        * editing/InsertLineBreakCommand.cpp:
        (WebCore::InsertLineBreakCommand::doApply):
        * editing/InsertParagraphSeparatorCommand.cpp:
        (WebCore::InsertParagraphSeparatorCommand::doApply):
        * editing/InsertTextCommand.cpp:
        (WebCore::InsertTextCommand::performTrivialReplace):
        (WebCore::InsertTextCommand::input):
        (WebCore::InsertTextCommand::insertTab):
        * editing/MoveSelectionCommand.cpp:
        (WebCore::MoveSelectionCommand::doApply):
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::doApply):
        * editing/SelectionController.cpp:
        (WebCore::SelectionController::debugRenderer):
        * editing/TextIterator.cpp:
        (WebCore::TextIterator::rangeFromLocationAndLength):
        * editing/TypingCommand.cpp:
        (WebCore::TypingCommand::deleteKeyPressed):
        (WebCore::TypingCommand::forwardDeleteKeyPressed):
        * editing/VisiblePosition.cpp:
        (WebCore::VisiblePosition::characterAfter):
        (WebCore::VisiblePosition::debugPosition):
        (WebCore::makeRange):
        (WebCore::setStart):
        (WebCore::setEnd):
        * editing/VisibleSelection.cpp:
        (WebCore::VisibleSelection::toNormalizedRange):
        (WebCore::makeSearchRange):
        (WebCore::VisibleSelection::debugPosition):
        (WebCore::VisibleSelection::showTreeForThis):
        * editing/htmlediting.cpp:
        (WebCore::comparePositions):
        (WebCore::rangeCompliantEquivalent):
        (WebCore::isFirstPositionAfterTable):
        (WebCore::isLastPositionBeforeTable):
        * editing/visible_units.cpp:
        (WebCore::previousBoundary):
        (WebCore::nextBoundary):
        (WebCore::startPositionForLine):
        (WebCore::startOfLine):
        (WebCore::endPositionForLine):
        (WebCore::nextLinePosition):
        (WebCore::startOfParagraph):
        (WebCore::endOfParagraph):
        * page/AccessibilityObject.cpp:
        (WebCore::updateAXLineStartForVisiblePosition):
        * page/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::indexForVisiblePosition):
        * page/DOMSelection.cpp:
        (WebCore::DOMSelection::anchorOffset):
        (WebCore::DOMSelection::baseOffset):
        (WebCore::DOMSelection::focusOffset):
        (WebCore::DOMSelection::extentOffset):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleMousePressEventSingleClick):
        * page/Frame.cpp:
        (WebCore::Frame::selectionLayoutChanged):
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::indexForVisiblePosition):
        * rendering/RenderTreeAsText.cpp:
        (WebCore::writeSelection):

2009-03-10  Darin Adler  <darin@apple.com>

        Reviewed by Dan Bernstein.

        Bug 23564: REGRESSION (r39230-39286): crash loading page that changes <input> display type and then calls innerHTML
        https://bugs.webkit.org/show_bug.cgi?id=23564
        rdar://problem/6537238

        Test: fast/dom/HTMLElement/innerHTML-selection-crash.html

        * editing/markup.cpp: (WebCore::createMarkup): Added updateLayoutIgnorePendingStylesheets
        call to the one of the two overloads of this function that wasn't calling it. This fixes
        this crash and other possible crashes inside innerHTML.

2009-03-10  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=24285
        Text resource loading checks for BOM twice

        This removes TextDecoder class, since its only purpose was to check for BOM, which is
        already done in TextResourceDecoder. Callers that use TextEncoding::decode() won't get
        BOM checked, but I didn't find any cases where it would significantly change behavior.

        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.scons:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        Remove TextDecoder.{h,cpp}.

        * platform/text/TextDecoder.cpp: Removed.
        * platform/text/TextDecoder.h: Removed.

        * loader/TextResourceDecoder.h: Instead of a TextDecoder object, keep TextEncoding and
        TextCodec separately.

        * loader/TextResourceDecoder.cpp:
        (WebCore::TextResourceDecoder::TextResourceDecoder): Updated for m_encoding being a member.
        (WebCore::TextResourceDecoder::setEncoding): Ditto.
        (WebCore::TextResourceDecoder::checkForBOM): Removed a FIXME saying that a BOM could override
        even a user-chosen encoding - this is how it already worked due to TextDecoder checking for
        BOM again. Made this function return the detected BOM length.
        (WebCore::TextResourceDecoder::decode): Skip the BOM if it was found at the beginning of
        a text resource.
        (WebCore::TextResourceDecoder::flush): Reset m_checkedForBOM, so that re-decoding the same
        resource again (as frequently done by CachedResource subclasses) will skip the BOM correctly.

        * platform/text/TextEncoding.cpp: (WebCore::TextEncoding::decode):
        Use TextCodec directly without a TextDecoder wrapper. This means that this method no longer
        checks for BOM, which was a counter-intuitive feature.

        * loader/CachedScript.cpp:
        (WebCore::CachedScript::CachedScript):
        (WebCore::CachedScript::setEncoding):
        (WebCore::CachedScript::encoding):
        (WebCore::CachedScript::script):
        * loader/CachedScript.h:
        * loader/appcache/ManifestParser.cpp:
        (WebCore::parseManifest):
        Use TextResourceDecoder, as TextEncoding::decode() no longer checks for BOM.
        A side effect of this is that these resources will now be subject to encoding auto-detection.

        * loader/CachedFont.cpp: (WebCore::CachedFont::ensureSVGFontData):
        * page/Page.cpp: (WebCore::Page::userStyleSheet):
        Be sure to flush TextResourceDecoder, pushing any remaining bytes out, and making the decoder
        re-usable (for repeated decoding of the same resource).

        * platform/text/TextEncodingRegistry.h: Updated comments for newTextCodec().

2009-03-10  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=24488
        An assertion failure when updating an offline application cache after emptying caches

        Emptying appcache cannot be performed automatically, so no test.

        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::ApplicationCacheGroup::checkIfLoadIsComplete): Ensure that the cache is in disk
        storage, even if the application wasn't updated server side.

2009-03-10  Oliver Hunt  <oliver@apple.com>

        Reviewed by Alexey Proskuryakov.

        <rdar://problem/6425807> Implement WorkerUtils.importScripts()
        <https://bugs.webkit.org/show_bug.cgi?id=22721>

        Implement importScripts, currently uses a series of synchronous loads
        to fetch the scripts, but this is simpler than a synchronous load of
        multiple loads in parallel.  In future we'll want to switch to parallel
        loading, but this will do for now.
        
        Test: http/tests/workers/worker-importScripts.html

        * GNUmakefile.am:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSWorkerContextCustom.cpp:
        (WebCore::JSWorkerContext::importScripts):
        * bindings/js/ScriptValue.h:
        (WebCore::ScriptValue::hasNoValue):
        * bindings/js/WorkerScriptController.cpp:
        (WebCore::WorkerScriptController::evaluate):
        (WebCore::WorkerScriptController::setException):
        * bindings/js/WorkerScriptController.h:
        * dom/Document.cpp:
        (WebCore::Document::scriptImported):
        * dom/Document.h:
        * dom/ScriptExecutionContext.h:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::scriptImported):
        * inspector/InspectorController.h:
        * inspector/InspectorResource.cpp:
        (WebCore::InspectorResource::setScriptProperties):
        * inspector/InspectorResource.h:
        * workers/WorkerContext.cpp:
        (WebCore::WorkerContext::scriptImported):
        (WebCore::WorkerContext::importScripts):
        * workers/WorkerContext.h:
        * workers/WorkerContext.idl:
        * workers/WorkerImportScriptsClient.cpp: Added.
        (WebCore::WorkerImportScriptsClient::didReceiveResponse):
        (WebCore::WorkerImportScriptsClient::didReceiveData):
        (WebCore::WorkerImportScriptsClient::didFinishLoading):
        (WebCore::WorkerImportScriptsClient::didFail):
        (WebCore::WorkerImportScriptsClient::didFailRedirectCheck):
        (WebCore::WorkerImportScriptsClient::didReceiveAuthenticationCancellation):
        * workers/WorkerImportScriptsClient.h: Added.
        (WebCore::WorkerImportScriptsClient::WorkerImportScriptsClient):
        (WebCore::WorkerImportScriptsClient::script):
        (WebCore::WorkerImportScriptsClient::failed):

2009-03-10  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=24462
        Move cross-origin access control code out of XMLHttpRequest

        Step 1: move preflight result cache and access control helper functions.

        No change in behavior, so no test.

        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.scons:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * loader/CrossOriginAccessControl.cpp: Added.
        (WebCore::isOnAccessControlSimpleRequestHeaderWhitelist):
        (WebCore::isSimpleCrossOriginAccessRequest):
        (WebCore::createAllowedCrossOriginResponseHeadersSet):
        (WebCore::isOnAccessControlResponseHeaderWhitelist):
        (WebCore::passesAccessControlCheck):
        * loader/CrossOriginAccessControl.h: Added.
        * loader/CrossOriginPreflightResultCache.cpp: Added.
        (WebCore::parseAccessControlMaxAge):
        (WebCore::addToAccessControlAllowList):
        (WebCore::parseAccessControlAllowList):
        (WebCore::CrossOriginPreflightResultCacheItem::parse):
        (WebCore::CrossOriginPreflightResultCacheItem::allowsCrossOriginMethod):
        (WebCore::CrossOriginPreflightResultCacheItem::allowsCrossOriginHeaders):
        (WebCore::CrossOriginPreflightResultCacheItem::allowsRequest):
        (WebCore::CrossOriginPreflightResultCache::shared):
        (WebCore::CrossOriginPreflightResultCache::appendEntry):
        (WebCore::CrossOriginPreflightResultCache::canSkipPreflight):
        * loader/CrossOriginPreflightResultCache.h: Added.
        (WebCore::CrossOriginPreflightResultCacheItem::CrossOriginPreflightResultCacheItem):
        (WebCore::CrossOriginPreflightResultCache::CrossOriginPreflightResultCache):
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequestStaticData::XMLHttpRequestStaticData):
        (WebCore::XMLHttpRequest::createRequest):
        (WebCore::XMLHttpRequest::makeCrossOriginAccessRequest):
        (WebCore::XMLHttpRequest::makeSimpleCrossOriginAccessRequest):
        (WebCore::XMLHttpRequest::makeCrossOriginAccessRequestWithPreflight):
        (WebCore::XMLHttpRequest::didReceiveResponse):
        (WebCore::XMLHttpRequest::didReceiveResponsePreflight):
        * xml/XMLHttpRequest.h:

2009-03-10  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=19797
        Bring the list of forbidden headers in sync with XMLHttpRequest spec draft

        Added new checks to http/tests/xmlhttprequest/set-dangerous-headers.html.

        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequestStaticData::XMLHttpRequestStaticData): Added all headers from
        XMLHttpRequest 2 draft.

2009-03-10  Dan Bernstein  <mitz@apple.com>

        Reviewed by Adele Peterson.

        - fix https://bugs.webkit.org/show_bug.cgi?id=23975
          <rdar://problem/6593610> REGRESSION: Scrollbar arrow not repainted

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::invalidateScrollbarRect): Corrected the vertical
        scrollbar rect calculation.

2009-03-09  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein, Oliver Hunt

        https://bugs.webkit.org/show_bug.cgi?id=24475
        
        When repainting replaced elements, need to union the selection
        and overflow rects because either may extend outside the other.
        
        Test: fast/repaint/transform-replaced-shadows.html

        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::clippedOverflowRectForRepaint):

2009-03-09  Stephanie Lewis  <slewis@apple.com>

        Fix build.

        * editing/Editor.cpp:
        (WebCore::Editor::advanceToNextMisspelling):
        (WebCore::markAllMisspellingsAndBadGrammarInRanges):

2009-03-09  Kim Christensen  <kimworking@gmail.com>

        Reviewed by Darin Fisher.

        https://bugs.webkit.org/show_bug.cgi?id=24276
        Dropdown / select boxes do not consider the windows task bar in Chromium.

        * platform/chromium/PopupMenuChromium.cpp:
        (WebCore::PopupContainer::showPopup):

2009-03-09  Dan Bernstein  <mitz@apple.com>

        Reviewed by Adele Peterson and Dave Hyatt.

        - fix <rdar://problem/6654344> REGRESSION (r41041): Zillow.com has
          misaligned edit fields

        Test: fast/forms/legend-display-none.html

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::adjustRenderStyle): Change the display
        property of legend elements to 'block' unless it is 'none'.
        * css/html4.css: Do not force the display property of legend elements to
        'block' using CSS, because that prevents style rules from setting it to
        'none'.

2009-03-09  Alpha Lam  <hclam@chromium.org>

        Reviewed by Dave Hyatt.

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

        Fix an incorrect criteria in the if statement that leaves references to
        deleted floating objects in RenderBlock.

        Test: fast/block/float/crash-on-absolute-positioning.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::markAllDescendantsWithFloatsForLayout):

2009-03-09  Mike Belshe  <mike@belshe.com>

        Reviewed by Eric Seidel.

        Unify JSC/V8 idl file.
        https://bugs.webkit.org/show_bug.cgi?id=24424

        * page/Location.idl:

2009-03-09  Mike Belshe  <mike@belshe.com>

        Reviewed by Eric Seidel.

        Unify JSC/V8 for History.idl.

        * page/History.idl:

2009-03-09  Mike Belshe  <mike@belshe.com>

        Reviewed by Eric Seidel.

        Unify JSC/V8 implementations of DOMWindow.idl.

        * page/DOMWindow.idl:

2009-03-09  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dave Hyatt

        https://bugs.webkit.org/show_bug.cgi?id=24163
        
        Implement mapping of FloatQuads through 3D transforms.
        
        Removed the redundant localToContainerQuad() methods, which can now 
        shared code with the old mapLocalToAbsolutePoint(), which was
        renamed to mapLocalToContainer(). This can now convert a point,
        and optionally a FloatQuad, which are carried along in the TransformState.
        
        Optimized TransformState to reduce to simple FloatPoint.move()
        if there are no transforms, and to heap-allocate a transform only if
        necessary to accumulate transforms (when using preserve-3d).
        
        Tested by 3d point mapping tests, and the inspector highlight (which now shows
        the correct quads for 3d-transformed elements).

        * platform/graphics/transforms/TransformationMatrix.cpp:
        (WebCore::TransformationMatrix::projectQuad):
        (WebCore::TransformationMatrix::translateRight):
        (WebCore::TransformationMatrix::translateRight3d):
        * platform/graphics/transforms/TransformationMatrix.h:
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::mapLocalToContainer):
        (WebCore::RenderBox::mapAbsoluteToLocalPoint):
        * rendering/RenderBox.h:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::localToAbsolute):
        (WebCore::RenderObject::absoluteToLocal):
        (WebCore::RenderObject::mapLocalToContainer):
        (WebCore::RenderObject::localToContainerQuad):
        * rendering/RenderObject.h:
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::mapLocalToContainer):
        * rendering/RenderTableCell.h:
        * rendering/RenderView.cpp:
        (WebCore::RenderView::mapLocalToContainer):
        * rendering/RenderView.h:
        * rendering/TransformState.cpp:
        (WebCore::TransformState::move):
        (WebCore::TransformState::applyTransform):
        (WebCore::TransformState::flatten):
        (WebCore::TransformState::mappedPoint):
        (WebCore::TransformState::mappedQuad):
        (WebCore::TransformState::flattenWithTransform):
        (WebCore::HitTestingTransformState::mappedQuad):
        * rendering/TransformState.h:
        (WebCore::TransformState::TransformState):
        (WebCore::TransformState::move):
        (WebCore::TransformState::lastPlanarPoint):
        (WebCore::TransformState::lastPlanarQuad):
        * rendering/style/RenderStyle.h:
        (WebCore::InheritedFlags::preserves3D):

2009-03-09  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dave Hyatt

        https://bugs.webkit.org/show_bug.cgi?id=24433
        
        During hit testing with transforms, if a layer has backface-visibility: hidden,
        we need to check for it whether or not the layer has a transform, because it
        might be an ancestor that is transformed.

        Test: transforms/3d/hit-testing/backface-no-transform-hit-test.html

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

2009-03-09  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by George Staikos.

        https://bugs.webkit.org/show_bug.cgi?id=24353
        Allow to overrule default build options for Qt build.

        * WebCore.pro: Allow to overrule ENABLE_VIDEO and ENABLE_NETSCAPE_PLUGIN_API

2009-03-09  Adam Treat  <adam.treat@torchmobile.com>

        Reviewed by George Staikos.

        https://bugs.webkit.org/show_bug.cgi?id=24463
        WebCore::qstring is detaching and copying twice for every single
        WebCore::TextRun that is processed and drawn.  This elevates this method
        to one of the top-ten most expensive methods in all of QtWebKit according
        to profiling.  This changes the method so that QString only detaches
        when absolutely necessary.

        * platform/graphics/qt/FontQt.cpp:
        (WebCore::qstring):
        (WebCore::fixSpacing):
        (WebCore::Font::drawComplexText):
        (WebCore::Font::floatWidthForComplexText):
        (WebCore::Font::offsetForPositionForComplexText):
        (WebCore::Font::selectionRectForComplexText):

2009-03-08  Mark Rowe  <mrowe@apple.com>

        Reviewed by Oliver Hunt.

        Split ScrollAlignment and ScrollBehavior out of RenderLayer.h so that
        Frame.h no longer needs to include it.  This cuts the size of the symbols
        for a debug build by around 3%.

        * dom/Element.cpp:
        (WebCore::Element::scrollIntoView):
        (WebCore::Element::scrollIntoViewIfNeeded):
        * editing/Editor.cpp:
        (WebCore::Editor::insertTextWithoutSendingTextEvent):
        (WebCore::Editor::revealSelectionAfterEditingOperation):
        * editing/SelectionController.cpp:
        (WebCore::SelectionController::setSelection):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::gotoAnchor):
        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::contextMenuItemSelected):
        * page/Frame.cpp:
        (WebCore::Frame::revealSelection):
        (WebCore::Frame::revealCaret):
        * page/Frame.h:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::getRectToExpose):
        (WebCore::RenderLayer::autoscroll):
        * rendering/RenderLayer.h:
        * rendering/ScrollBehavior.cpp: Added.
        (WebCore::):
        * rendering/ScrollBehavior.h: Added.
        (WebCore::):
        (WebCore::ScrollAlignment::getVisibleBehavior):
        (WebCore::ScrollAlignment::getPartialBehavior):
        (WebCore::ScrollAlignment::getHiddenBehavior):

        Add the new files to the build systems:
        * GNUmakefile.am:
        * WebCore.base.exp:
        * WebCore.pro:
        * WebCore.scons:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:

        Add includes that were previously pulled in by way of RenderLayer.h from Frame.h:
        * dom/Clipboard.cpp:
        * editing/EditorCommand.cpp:
        * editing/InsertLineBreakCommand.cpp:
        * editing/TypingCommand.cpp:
        * html/HTMLFormControlElement.cpp:
        * loader/archive/cf/LegacyWebArchive.cpp:
        * loader/icon/IconLoader.cpp:
        * page/animation/AnimationController.cpp:
        * rendering/RenderSlider.cpp:
        * rendering/RenderTextControl.cpp:


2009-03-08  Mark Rowe  <mrowe@apple.com>

        Reviewed Dan Bernstein.

        Push the include of Frame.h out of RenderView.h and down to those files
        that need it.  This cuts the size of symbols for RenderFoo object files
        by around 15% in a debug build.

        * bindings/objc/DOM.mm:
        * rendering/RenderFileUploadControl.cpp:
        * rendering/RenderInline.cpp:
        * rendering/RenderObject.cpp:
        * rendering/RenderReplaced.cpp:
        * rendering/RenderText.cpp:
        * rendering/RenderView.cpp:
        (WebCore::RenderView::zoomFactor):
        * rendering/RenderView.h:

2009-03-08  Mark Rowe  <mrowe@apple.com>

        Rubber-stamped by Dan Bernstein.

        Remove some unnecessary or redundant includes from files related to the JS bindings.
        This cuts the size of the symbols for a debug build by around 3%.

        * bindings/js/JSCustomPositionCallback.cpp:
        * bindings/js/JSCustomPositionErrorCallback.cpp:
        * bindings/js/JSCustomSQLStatementCallback.cpp:
        * bindings/js/JSCustomSQLStatementErrorCallback.cpp:
        * bindings/js/JSCustomSQLTransactionCallback.cpp:
        * bindings/js/JSCustomSQLTransactionErrorCallback.cpp:
        * bindings/js/JSCustomVoidCallback.cpp:
        * bindings/js/JSCustomXPathNSResolver.cpp:
        * bindings/js/JSDocumentCustom.cpp:
        * bindings/js/JSPluginElementFunctions.cpp:
        * bindings/js/JSSVGPODTypeWrapper.h:

2009-03-08  Cameron Zwarich  <cwzwarich@uwaterloo.ca>

        Reviewed by Oliver Hunt.

        Remove the unused methods previousHistoryItem(), setPreviousHistoryItem()
        and provisionalHistoryItem() from FrameLoader.

        * WebCore.base.exp:
        * WebCore.order:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::frameLoadCompleted):
        (WebCore::FrameLoader::loadItem):
        * loader/FrameLoader.h:

2009-03-08  Gustavo Noronha Silva  <gns@gnome.org>

        Reviewed by Holger Freyther.

        Implement proper logging for the GTK+ port, inspired by the one in
        Qt. We use the WEBKIT_DEBUG environment variable which was already
        being used to decide whether to setup a logger for soup or not.

        * platform/gtk/LoggingGtk.cpp:
        (WebCore::getChannelFromName):
        (WebCore::InitializeLoggingChannelsIfNecessary):
        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::ensureSessionIsInitialized):

2009-03-07  Dan Bernstein  <mitz@apple.com>

        Reviewed by Mark Rowe.

        - WebCore part of removing build-time and run-time support for legacy
          versions of CFNetwork and Core Graphics

        * platform/graphics/win/FontCGWin.cpp:
        (WebCore::Font::drawGlyphs):
        * platform/graphics/win/FontCustomPlatformData.cpp:
        (WebCore::FontCustomPlatformData::fontPlatformData):
        * platform/graphics/win/FontPlatformDataCGWin.cpp:
        (WebCore::FontPlatformData::platformDataInit):
        * platform/network/cf/FormDataStreamCFNet.cpp:
        (WebCore::setHTTPBody):
        (WebCore::httpBodyFromRequest):
        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::didSendBodyData):
        (WebCore::shouldUseCredentialStorageCallback):
        (WebCore::ResourceHandle::start):
        * platform/network/win/CookieJarCFNetWin.cpp:
        (WebCore::filterCookies):

2009-03-07  Adele Peterson  <adele@apple.com>

        Reviewed by Dan Bernstein.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=24444
        No multiple JS property for <input type="file" multiple />

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::multiple):
        (WebCore::HTMLInputElement::setMultiple):
        * html/HTMLInputElement.h:
        * html/HTMLInputElement.idl:

2009-03-07  Xan Lopez  <xan@gnome.org>

        Reviewed by Holger Freyther.

        https://bugs.webkit.org/show_bug.cgi?id=24358
        [GTK] Scrollbars not clipped correctly

        ScrollView scrollbars in subframes are *not* native, so take that
        into account again.

        * platform/gtk/ScrollbarGtk.cpp:
        (ScrollbarGtk::getLocationInParentWindow):
        (ScrollbarGtk::frameRectsChanged):
        (ScrollbarGtk::paint):
        * platform/gtk/ScrollbarGtk.h:

2009-03-06  Peter Kasting  <pkasting@google.com>

        Reviewed by Darin Fisher.

        https://bugs.webkit.org/show_bug.cgi?id=24405
        Horizontal scrolling on Windows was reversed from Mac (and intuition).

        * platform/gtk/WheelEventGtk.cpp:
        (WebCore::PlatformWheelEvent::PlatformWheelEvent):
        * platform/win/WheelEventWin.cpp:
        (WebCore::PlatformWheelEvent::PlatformWheelEvent):

2009-03-06  Peter Kasting  <pkasting@google.com>

        Reviewed by Sam Weinig.

        Convert some C-style casts to static_cast<>()s.

        * platform/gtk/WheelEventGtk.cpp:
        (WebCore::PlatformWheelEvent::PlatformWheelEvent):
        * platform/mac/WheelEventMac.mm:
        (WebCore::PlatformWheelEvent::PlatformWheelEvent):
        * platform/win/WheelEventWin.cpp:
        (WebCore::PlatformWheelEvent::PlatformWheelEvent):
        * platform/wx/MouseWheelEventWx.cpp:
        (WebCore::PlatformWheelEvent::PlatformWheelEvent):

2009-03-06  Adele Peterson  <adele@apple.com>

        Reviewed by Oliver Hunt.

        Fix for <rdar://problem/6607524> REGRESSION (Safari 3-4): I can't tab back to the URL field in an empty window (key loop is broken)

        I haven't been able to make a test for this since the problem is not reproducible within an empty iframe.

        * page/EventHandler.cpp: (WebCore::eventTargetNodeForDocument): We used to ensure that every html document had a body element.
          That is no longer true, so we should return the document element for a truly empty document.

2009-03-06  Jay Campan  <jcampan@google.com>

        Reviewed by Darin Fisher.

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

        Adding a flag to ResourceRequestBase to indicate whether or not upload
        progress notifications are needed for a resource. This is useful to
        avoid sending these notifications when there are no consumers
        (especially in the Chromium case where IPC is involved). 

        * platform/network/ResourceRequestBase.h:
        (WebCore::ResourceRequestBase::reportUploadProgress):
        (WebCore::ResourceRequestBase::setReportUploadProgress):
        (WebCore::ResourceRequestBase::ResourceRequestBase):
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::loadRequestAsynchronously):

2009-03-06  Dmitry Titov  <dimich@chromium.org>

        Reviewed by Alexey Proskuryakov.

        https://bugs.webkit.org/show_bug.cgi?id=24150
        Add virtual ScriptExecutionContext::encoding()

        Test: http/tests/workers/text-encoding.html

        * dom/Document.cpp:
        (WebCore::Document::encoding):
        * dom/Document.h:
        (WebCore::Document::inputEncoding):
        (WebCore::Document::charset):
        (WebCore::Document::characterSet):
        Add new virtual method and route DOM synonym functions on Document through it.

        * dom/ScriptExecutionContext.h:
        * workers/Worker.cpp:
        (WebCore::Worker::Worker):
        (WebCore::Worker::notifyFinished):
        * workers/WorkerContext.cpp:
        (WebCore::WorkerContext::WorkerContext):
        (WebCore::WorkerContext::encoding):
        (WebCore::WorkerContext::completeURL): Added comment on why this is different from Document::completeURL
        * workers/WorkerContext.h:
        (WebCore::WorkerContext::create):
        * workers/WorkerContextProxy.h:
        * workers/WorkerMessagingProxy.cpp:
        (WebCore::WorkerMessagingProxy::startWorkerContext):
        * workers/WorkerMessagingProxy.h:
        * workers/WorkerThread.cpp:
        (WebCore::WorkerThreadStartupData::create):
        (WebCore::WorkerThreadStartupData::WorkerThreadStartupData):
        (WebCore::WorkerThread::create):
        (WebCore::WorkerThread::WorkerThread):
        (WebCore::WorkerThread::workerThread):
        * workers/WorkerThread.h:
        All of the above route the 'encoding' parameter of parent context to the new
        instance of WorkerContext - from Worker::notifyFinished() via WorkerMessagingProxy
        through WorkerThread through WorkerThreadStartupData and into constructor of WorkerContext.

2009-03-06  Peter Kasting  <pkasting@google.com>

        Build bustage fix.

        * dom/Node.cpp:
        (WebCore::Node::dispatchWheelEvent):

2009-03-06  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Antti Koivisto.

        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivate::createQTMovieView):  Delay callback while setting up movieview.

2009-03-06  Douglas R. Davidson  <ddavidso@apple.com>

        Reviewed by Justin Garcia.
        
        https://bugs.webkit.org/show_bug.cgi?id=24108

        Update spelling and grammar checking to use the new combined text 
        checking (with automatic language identification) on Snow Leopard. 
        Tested manually in Mail and Safari; automated tests to come later. 
        
        * editing/Editor.cpp:
        (WebCore::findFirstMisspellingOrBadGrammarInRange):
        (WebCore::Editor::advanceToNextMisspelling):
        (WebCore::guessesForMisspelledOrUngrammaticalRange):
        (WebCore::Editor::guessesForMisspelledOrUngrammaticalSelection):
        (WebCore::Editor::markMisspellingsAfterTypingToPosition):
        (WebCore::markAllMisspellingsAndBadGrammarInRanges):
        (WebCore::Editor::markMisspellingsAndBadGrammar):
        * editing/Editor.h:
        * loader/EmptyClients.h:
        (WebCore::EmptyEditorClient::checkSpellingAndGrammarOfParagraph):
        * page/EditorClient.h:
        * page/Frame.cpp:
        (WebCore::Frame::respondToChangedSelection):
        * platform/ContextMenu.cpp:
        (WebCore::ContextMenu::populate):

2009-03-06  Peter Kasting  <pkasting@google.com>

        Reviewed by Darin Fisher.

        https://bugs.webkit.org/show_bug.cgi?id=24407
        Windows scroll amount was too small, and wheel scroll distance
        conversion code was overly complex.

        * page/EventHandler.cpp:
        (WebCore::scrollAndAcceptEvent):
        * platform/PlatformWheelEvent.h:
        (WebCore::):
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::wheelEvent):
        * platform/Scrollbar.h:
        * platform/gtk/WheelEventGtk.cpp:
        (WebCore::PlatformWheelEvent::PlatformWheelEvent):
        * platform/mac/WheelEventMac.mm:
        (WebCore::PlatformWheelEvent::PlatformWheelEvent):
        * platform/qt/WheelEventQt.cpp:
        * platform/win/WheelEventWin.cpp:
        (WebCore::horizontalScrollChars):
        (WebCore::verticalScrollLines):
        (WebCore::PlatformWheelEvent::PlatformWheelEvent):
        * platform/wx/MouseWheelEventWx.cpp:
        (WebCore::PlatformWheelEvent::PlatformWheelEvent):

2009-03-06  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Adam Roben.

        Generate valid bindings with HTML5 database support disabled. 

        * inspector/InspectorController.idl: Added feature guard around 
        databaseTableNames definition.

2009-03-04  Xan Lopez  <xan@gnome.org>

        Reviewed by Holger Freyther.

        https://bugs.webkit.org/show_bug.cgi?id=24358
        [GTK] Scrollbars not clipped correctly

        Do not take into account the case of being a ScrollView scrollbar,
        since those are native in our case.

        * platform/gtk/ScrollbarGtk.cpp:
        (ScrollbarGtk::frameRectsChanged):

2009-03-04  Xan Lopez  <xan@gnome.org>

        Reviewed by Holger Freyther.

        https://bugs.webkit.org/show_bug.cgi?id=24358
        [GTK] Scrollbars not clipped correctly

        Move Widget::paint to ScrollbarGtk::paint, since it's scrollbar
        specific and it's our only Widget anyway.

        * platform/gtk/ScrollbarGtk.cpp:
        (ScrollbarGtk::paint):
        * platform/gtk/ScrollbarGtk.h:
        * platform/gtk/WidgetGtk.cpp:

2009-03-04  Xan Lopez  <xan@gnome.org>

        Reviewed by Holger Freyther.

        https://bugs.webkit.org/show_bug.cgi?id=24358
        [GTK] Scrollbars not clipped correctly

        Use correct clip rectangle and apply coordinate translation needed
        for non-ScrollView scrollbars.

        We were ignoring the clip rectangle passed as parameter, which is
        wrong in the case of non coalesced expose events. This, in turn,
        uncovers the fact that we were not applying coordinate translation
        to our position.

        * platform/gtk/WidgetGtk.cpp:
        (WebCore::Widget::paint):

2009-03-06  Eric Carlson  <eric.carlson@apple.com>

        Build fix, no review

        * platform/graphics/chromium/MediaPlayerPrivateChromium.h: fix setSize declaration

2009-03-06  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Simon Fraser.

        https://bugs.webkit.org/show_bug.cgi?id=22790
        Bug 22790: [Transforms] MediaPlayer::setRect() makes no sense with transforms
        Replace media engine setRect with setSize since they don't use about the 
        position anyway.

        * platform/graphics/MediaPlayer.cpp:
        (WebCore::NullMediaPlayerPrivate::setSize): Changed from setRect.
        (WebCore::MediaPlayer::setSize): Ditto.
        * platform/graphics/MediaPlayer.h:
        (WebCore::MediaPlayer::size): Changed from rect().

        * platform/graphics/MediaPlayerPrivate.h: Changed setRect to setSize.

        * platform/graphics/chromium/MediaPlayerPrivateChromium.h: Ditto.

        * platform/graphics/gtk/MediaPlayerPrivateGStreamer.cpp: 
        (WebCore::MediaPlayerPrivate::MediaPlayerPrivate): Initialize m_size instead of m_rect
        (WebCore::MediaPlayerPrivate::setSize): Changed from setRect
        (WebCore::MediaPlayerPrivate::paint): update comment
        * platform/graphics/gtk/MediaPlayerPrivateGStreamer.h: m_rect -> m_size.

        * platform/graphics/mac/MediaPlayerPrivateQTKit.h:  m_rect
        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivate::MediaPlayerPrivate): Initialize m_rect.
        (WebCore::MediaPlayerPrivate::createQTMovieView): setRect-> setSize.
        (WebCore::MediaPlayerPrivate::setSize): Changed from setRect
        (WebCore::MediaPlayerPrivate::paint): Call view:setFrame: when in a media document so 
        the movie is drawn in the correct location.

        * platform/graphics/qt/MediaPlayerPrivatePhonon.cpp:
        (WebCore::MediaPlayerPrivate::setSize):  Changed from setRect
        * platform/graphics/qt/MediaPlayerPrivatePhonon.h:

        * platform/graphics/win/MediaPlayerPrivateQuickTimeWin.cpp:
        (WebCore::MediaPlayerPrivate::setSize):  Changed from setRect
        * platform/graphics/win/MediaPlayerPrivateQuickTimeWin.h:

        * rendering/RenderVideo.cpp:
        (WebCore::RenderVideo::updatePlayer): Call setSize instead of setRect.

2009-03-06  Darin Adler  <darin@apple.com>

        Reviewed by Darin Fisher.

        Bug 24422: REGRESSION: null-URL crash in FrameLoader setting location.hash on new window
        https://bugs.webkit.org/show_bug.cgi?id=24422
        rdar://problem/6402208

        Test: fast/dom/location-new-window-no-crash.html

        The issue here is empty (or null) URLs. I picked the "schedule navigation" bottleneck
        to add some checks for empty URLs. We could also put the empty URL checks at some
        other bottleneck level and add more assertions over time. I tried adding a few more
        assertions to functions like loadURL and hit them while running the regression tests,
        so it's probably going to be a bit tricky to clean this up throughout the loader.

        * loader/FrameLoader.cpp:
        (WebCore::ScheduledRedirection::ScheduledRedirection): Explicitly marked this struct
        immutable by making all its members const. Added assertions about the arguments,
        including that the URL is not empty. Initialized one uninitialized member in one of
        the constructors.
        (WebCore::FrameLoader::scheduleHTTPRedirection): Added an early exit to make this
        a no-op if passed an empty URL.
        (WebCore::FrameLoader::scheduleLocationChange): Ditto.
        (WebCore::FrameLoader::scheduleRefresh): Ditto.

2009-03-06  Gustavo Noronha Silva  <gns@gnome.org>

        Reviewed by Holger Freyther.

        https://bugs.webkit.org/show_bug.cgi?id=24423
        Use new soup_message_body_set_accumulate API in soup backend

        Disable accumulating chunks for request_body on file uploads,
        using the new soup API.

        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::ResourceHandle::startHttp):

2009-03-06  Gustavo Noronha Silva  <gns@gnome.org>

        Reviewed by Holger Freyther.

        Replace use of deprecated SOUP_MESSAGE_OVERWRITE_CHUNKS flag with
        the new soup_message_body_set_accumulate API in soup.

        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::gotHeadersCallback):
        (WebCore::ResourceHandle::startHttp):

2009-03-06  Gustavo Noronha Silva  <gns@gnome.org>

        Reviewed by Holger Freyther.

        https://bugs.webkit.org/show_bug.cgi?id=24051
        Soup backend needs content sniffing capabilities

        Perform content sniffing when using soup, so that we have a chance
        of figuring out the Content-Type of the file if it's not sent by
        the server.

        * platform/network/ResourceHandleInternal.h:
        (WebCore::ResourceHandleInternal::ResourceHandleInternal):
        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::gotHeadersCallback):
        (WebCore::gotChunkCallback):

2009-03-06  Hironori Bono  <hbono@chromium.org>

        Reviewed by Alexey Proskuryakov.

        https://bugs.webkit.org/show_bug.cgi?id=24342
        Cannot insert a Thai character after a Thai prepend character when using ICU 4.0

        This change creates a new break iterator "cursorMovementIterator" for
        moving cursors and use it when moving an input cursor.
        In "TextBreakIteratorICU.cpp", this break iterator uses custom ruleset
        based on the one of ICU 3.8.
        On the other hand, in "TextBreakIteratorQt.cpp", this break iterator
        just calls the characterBreakIterator() function.

        Test: editing/inserting/insert-thai-characters-001.html

        * platform/text/TextBreakIterator.h: Added a new function cursorMovementIterator().
        * platform/text/TextBreakIteratorICU.cpp: Implemented the cursorMovementIterator() function for ICU.
        (WebCore::setUpIteratorWithRules): Ditto.
        (WebCore::cursorMovementIterator): Ditto.
        * platform/text/qt/TextBreakIteratorQt.cpp: Implemented the cursorMovementIterator() function for Qt.
        (WebCore::cursorMovementIterator): Ditto.
        * rendering/RenderText.cpp: Call the cursorMovementIterator() function when moving an input cursor.
        (WebCore::RenderText::previousOffset): Ditto.
        (WebCore::RenderText::nextOffset): Ditto.

2009-03-05  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Oliver Hunt.

        <rdar://problem/6621701> Safari 4 Beta Breaks XMLHttpRequest Response Text With Special
        Characters (a compatibility issue with widgets).

        Test: http/tests/xmlhttprequest/broken-xml-encoding.html

        Revert part of an Acid 3 fix - now we are no longer strict when decoding XMLHttpRequest XML
        responses.

        * loader/TextResourceDecoder.cpp:
        (WebCore::TextResourceDecoder::TextResourceDecoder):
        (WebCore::TextResourceDecoder::decode):
        (WebCore::TextResourceDecoder::flush):
        * loader/TextResourceDecoder.h:
        (WebCore::TextResourceDecoder::useLenientXMLDecoding):
        Don't stop on XML decoding errors if useLenientXMLDecoding() was called.

        * xml/XMLHttpRequest.cpp: (WebCore::XMLHttpRequest::didReceiveData): Don't stop on XML
        decoding errors. This behavior is now limited to other kinds of XML content.

2009-03-05  Simone Fiorentino  <simone.fiorentino@consulenti.fastweb.it>

        Bug 24382: request to add SH4 platform

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

        Reviewed by David Kilzer.

        * platform/text/AtomicString.cpp:
        (WebCore::equal): Aligned memory access on SH4 platform.

2009-03-05  Jeremy Moskovich  <jeremy@chromium.org>

        Reviewed by Simon Fraser.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=24215

        Gears expects an object tag with display:none to instantiate the plugin,
        so we add a workaround to make this work and fix Gears on WebKit trunk.

        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::rendererIsNeeded):

2009-03-05  Avi Drissman  <avi@chromium.org>

        Reviewed by Darin Fisher.

        Need to have Chromium Mac match Safari Mac's accesskey handling
        https://bugs.webkit.org/show_bug.cgi?id=24404

        * page/chromium/EventHandlerChromium.cpp:
        (WebCore::EventHandler::accessKeyModifiers): Share access key modifiers with Mac Safari when building for the Mac.

2009-03-05  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dave Hyatt

        https://bugs.webkit.org/show_bug.cgi?id=24412
        
        Fix crash when hit-testing elements with -webkit-transform-style: preserve-3d
        but no transform. We need to make localTransformState if we see preserve-3d.
        Also need to call update3DTransformedDescendantStatus() before we test
        m_has3DTransformedDescendant.

        Test: transforms/3d/hit-testing/hit-preserves-3d.html

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

2009-03-05  Eric Seidel  <eric@webkit.org>

        Reviewed by David Hyatt.

        Changes to RenderLayer destruction to hopefully help catch an elusive crasher
        https://bugs.webkit.org/show_bug.cgi?id=24409
        
        Added a new RenderBoxModelObject::destroyLayer() call which is
        now the only way which RenderLayers should ever be destroyed.
        This ensures that the pointer to the layer is cleared in the
        RenderObject after destruction, allowing us to ASSERT in the
        RenderBoxModelObject destructor.

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::calcAbsoluteHorizontalReplaced):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::~RenderBoxModelObject):
        (WebCore::RenderBoxModelObject::destroyLayer):
        (WebCore::RenderBoxModelObject::destroy):
        (WebCore::RenderBoxModelObject::styleDidChange):
        * rendering/RenderBoxModelObject.h:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::stackingContext):
        (WebCore::RenderLayer::destroy):
        (WebCore::RenderLayer::removeOnlyThisLayer):
        * rendering/RenderLayer.h:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::destroy):
        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::destroy):

2009-03-05  Eric Seidel  <eric@webkit.org>

        Reviewed by David Hyatt.

        Remove old, unused IE 5.5 scrollbar-* CSS properties.
        Sort the unimplemented getComputedStyle properties so it's
        easier to see which ones actually need implementation.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        * css/CSSPropertyNames.in:
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):

2009-03-05  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by Darin Adler.
        
        WebViewDidChangeSelectionNotifications weren't being sent for commands that change the selection's position
        within the document without changing its position in the DOM.  For example, pressing return in (caret marked by ^):
        <div contentEditable="true"><div>^Hello</div></div>
        Undo was being enabled, shouldDeleteDOMRange called, etc. when doing no-op deletes (a delete in an empty document 
        for example). 

        Changes to layout tests demonstrate fix.
        
        * editing/EditCommand.cpp:
        (WebCore::EditCommand::apply): Don't call applyEditing for a TypingCommand.  The TypingCommand knows whether or
        not it did work that needs to be applied.
        * editing/Editor.cpp:
        (WebCore::Editor::appliedEditing): Moved code (but did not alter) to changeSelectionAfterCommand.
        (WebCore::Editor::unappliedEditing): Ditto.
        (WebCore::Editor::reappliedEditing): Ditto.
        (WebCore::Editor::changeSelectionAfterCommand): Moved code from *appliedEditing into here.  Also call out to
        EditorClient::respondToChangedSelection() for commands that changed the selection's position in the document
        even if they did not change it's position in the DOM.  Any TypingCommand that gets this far changed it's position
        in the document.
        * editing/Editor.h:
        * editing/TypingCommand.cpp:
        (WebCore::TypingCommand::TypingCommand): Removed unused m_appliedEditing.
        (WebCore::TypingCommand::typingAddedToOpenCommand): Always apply editing.  We won't get this far if we don't need to.
        (WebCore::TypingCommand::deleteKeyPressed): Don't do any of the things that only make sense for Range selections, like
        adding to the killring and responding to a change in selections if the delete was a no-op.
        (WebCore::TypingCommand::forwardDeleteKeyPressed): Ditto.
        * editing/TypingCommand.h:

2009-03-05  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Adam Roben.

        Eliminate a ref-counting leak in InspectorController.

        * inspector/InspectorController.h: Made constructor private, added static create method.
        * page/Page.cpp:
        (WebCore::Page::Page): Change initializer to use static create method.

2009-03-05  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Timothy Hatcher.

        https://bugs.webkit.org/show_bug.cgi?id=24355
        Add InspectorController.idl and convert InspectorController.cpp to use
        JSC bindings.

        * DerivedSources.make: Added InspectorController.idl
        * WebCore.xcodeproj/project.pbxproj: Added idl, bindings files.
        * bindings/js/JSInspectorControllerCustom.cpp: Added.
        * bindings/scripts/CodeGeneratorJS.pm: Added Array to no-header types.
        * inspector/InspectorController.cpp: Removed hand-rolled bindings.
        * inspector/InspectorController.h: Added platform and addSourceToFrame methods.
        * inspector/InspectorController.idl: Added.
        * page/Page.h: Changed member to RefPtr since InspectorController is now ref-counted.

2009-03-05  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Simon Fraser.

        https://bugs.webkit.org/show_bug.cgi?id=24400
        Bug 24400: Remove "start", "end", "loopStart", "loopEnd", "currentLoop", and "playCount" 
        media element attributes

        Test: media/video-loop.html

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::HTMLMediaElement):
        (WebCore::HTMLMediaElement::loadInternal):
        (WebCore::HTMLMediaElement::setNetworkState):
        (WebCore::HTMLMediaElement::seek):
        (WebCore::HTMLMediaElement::playInternal):
        (WebCore::HTMLMediaElement::loop):
        (WebCore::HTMLMediaElement::setLoop):
        (WebCore::HTMLMediaElement::mediaPlayerTimeChanged):
        (WebCore::HTMLMediaElement::endedPlayback):
        (WebCore::HTMLMediaElement::updatePlayState):
        * html/HTMLMediaElement.h:
        * html/HTMLMediaElement.idl:

2009-03-05  Steve Falkenburg  <sfalken@apple.com>

        <rdar://problem/6651112> Safari asks about re-posting a form even when page is cached
        
        Reviewed by Ada Chan.

        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::ResourceHandle::willLoadFromCache): Ported from Mac version.

2009-03-05  David Hyatt  <hyatt@apple.com>

        Reviewed by Eric Seidel

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

        Make sure painting of overflow controls checks that visibility:visible is set on the block before
        painting.  Pixel tests caught this regression.

        Make sure resizer painting pushes a clip of the corner rect.  It was relying on the clip layers happened
        to do to their bounds (which had nothing to do with overflow).

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::paint):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paintResizer):

2009-03-05  Yong Li  <yong.li@torchmobile.com>

        Reviewed by Simon Fraser.

        https://bugs.webkit.org/show_bug.cgi?id=24386
        A faster implementation of extractMIMETypeFromMediaType.

        * platform/network/HTTPParsers.cpp:
        (WebCore::extractMIMETypeFromMediaType):

2009-03-05  Yong Li  <yong.li@torchmobile.com>

        Reviewed by Antti Koivisto.

        https://bugs.webkit.org/show_bug.cgi?id=24392
        Do not get the current time for unless we're doing PRELOAD_DEBUG as this
        can be unnecessarily expensive.

        * html/PreloadScanner.cpp:
        (WebCore::PreloadScanner::write):

2009-03-04  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dave Hyatt

        https://bugs.webkit.org/show_bug.cgi?id=24327
        
        When mapping points and hit testing through transforms, work
        correctly when acclerated animations of transforms are running.
        
        Tested by LayoutTests/animations/animation-hit-test-transform.html,
        which only failed when ACCELERATED_COMPOSITING was turned on.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::currentTransform):
        * rendering/RenderLayer.h:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::transformFromContainer):

2009-03-05  Mike Belshe  <mike@belshe.com>

        Reviewed by Darin Fisher.

        https://bugs.webkit.org/show_bug.cgi?id=24391
        Frame.cpp uses JSC specific includes

        * page/Frame.cpp:

2009-03-05  Gustavo Noronha Silva  <gns@gnome.org>

        Reviewed by Alexey Proskuryakov.

        https://bugs.webkit.org/show_bug.cgi?id=24389
        WebKitGTK+ crashes when cancelling plugin loads

        Remove bogus calls to the client's didFinishLoading method from
        our ResourceHandle::cancel implementation. Calling
        didFinishLoading here is mostly inoffensive for most loads, but
        causes crashes when plugin loads are cancelled.

        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::ResourceHandle::cancel):

2009-03-05  Steve Falkenburg  <sfalken@apple.com>

        Windows build fix.
        
        * WebCore.vcproj/QTMovieWin.vcproj:

2009-03-05  Adam Treat  <adam.treat@torchmobile.com>

        Build fix for when ENABLE_NETSCAPE_PLUGIN_API = 0.  The method
        ScriptController::jsObjectForPluginElement(HTMLPlugInElement*); is not
        protected by an #if and uses HTMLPlugInElement so it must be included.

        * bindings/js/ScriptController.cpp:

2009-03-05  Dimitri Glazkov  <dglazkov@chromium.org>

        GTK Build fix.

        * inspector/ConsoleMessage.h: Use proper header.

2009-03-05  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Timothy Hatcher.

        https://bugs.webkit.org/show_bug.cgi?id=24376
        Split InspectorController.cpp file into separate classes.

        * GNUmakefile.am: Modified to include new files.
        * WebCore.pro: Ditto.
        * WebCore.scons: Ditto.
        * WebCore.vcproj/WebCore.vcproj: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * WebCoreSources.bkl: Ditto.
        * inspector/ConsoleMessage.cpp: Added.
        * inspector/ConsoleMessage.h: Added.
        * inspector/InspectorController.cpp:
        * inspector/InspectorDOMStorageResource.cpp: Added.
        * inspector/InspectorDOMStorageResource.h: Added.
        * inspector/InspectorDatabaseResource.cpp: Added.
        * inspector/InspectorDatabaseResource.h: Added.
        * inspector/InspectorResource.cpp: Added.
        * inspector/InspectorResource.h: Added.

2009-03-05  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Darin Adler

        https://bugs.webkit.org/show_bug.cgi?id=24387
        Remove media element bufferingRate attribute. No test necessary as there
        were none for this attribute.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::HTMLMediaElement): Don't initialize m_bufferingRate.
        (WebCore::HTMLMediaElement::loadInternal): Ditto.
        (WebCore::HTMLMediaElement::setNetworkState): Ditto.
        (WebCore::HTMLMediaElement::progressEventTimerFired): Don't calculate m_bufferingRate.
        * html/HTMLMediaElement.h: Remove m_bufferingRate.
        * html/HTMLMediaElement.idl: Ditto.

2009-03-05  Xan Lopez  <xan@gnome.org>

        Reviewed by Mark Rowe.

        https://bugs.webkit.org/show_bug.cgi?id=24377
        [GTK] Comply better with coding style guidelines in ResourceHandleSoup

        Use C++ booleans, 0 instead of NULL, prefix boolean variables with
        'is', do not use 'else if' if the previous if had a return, delete
        trailing whitespace, etc.

        * platform/network/ResourceHandleInternal.h:
        (WebCore::ResourceHandleInternal::ResourceHandleInternal):
        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::WebCoreSynchronousLoader::WebCoreSynchronousLoader):
        (WebCore::fillResponseFromMessage):
        (WebCore::restartedCallback):
        (WebCore::finishedCallback):
        (WebCore::parseDataUrl):
        (WebCore::ensureSessionIsInitialized):
        (WebCore::ResourceHandle::startHttp):
        (WebCore::reportUnknownProtocolError):
        (WebCore::ResourceHandle::start):
        (WebCore::cleanupGioOperation):
        (WebCore::closeCallback):
        (WebCore::readCallback):
        (WebCore::openCallback):
        (WebCore::queryInfoCallback):
        (WebCore::ResourceHandle::startGio):

2009-03-04  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Eric Seidel

        https://bugs.webkit.org/show_bug.cgi?id=24328
        
        If an element has backface-visibility: hidden, hit testing should not
        hit the back sides of elements. Test for that by inverting the accumulated
        transform and looking at the z vector.

        Tested by transforms/3d/hit-testing/backface-hit-test.html
        
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::hitTestLayer):

2009-03-04  Adam Langley  <agl@google.com>

        Reviewed by Darin Fisher.

        r41362 mistakenly added functions "RenderThemeWin::" into
        RenderThemeChromiumGtk.cpp. When correcting this, I somehow changed
        them to void return types. This patch switches them back to ints.

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

        * rendering/RenderThemeChromiumLinux.cpp:
        (WebCore::RenderThemeChromiumLinux::buttonInternalPaddingLeft):
        (WebCore::RenderThemeChromiumLinux::buttonInternalPaddingRight):
        (WebCore::RenderThemeChromiumLinux::buttonInternalPaddingTop):
        (WebCore::RenderThemeChromiumLinux::buttonInternalPaddingBottom):

2009-03-04  Adam Langley  <agl@google.com>

        Reviewed by Darin Fisher.

        Chromium Linux: change some metrics to better match Windows after
        r41416. Aesthetically this may be worse, but web-compat is king.

        Also, the previous code had an off by one error when drawing
        scrollbars which caused the scrollbar to overflow it's bounds by 1px
        at the right and bottom edges.

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

        * rendering/RenderThemeChromiumLinux.cpp:
        (WebCore::):
        (WebCore::RenderThemeChromiumLinux::systemFont):
        * platform/chromium/ScrollbarThemeChromiumLinux.cpp:
        (WebCore::ScrollbarThemeChromium::paintTrackPiece):

2009-03-04  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Roben.

        Add an ASSERT to better demonstrate the cause of the crash in
        https://bugs.webkit.org/show_bug.cgi?id=23736

        * loader/DocLoader.cpp:
        (WebCore::DocLoader::~DocLoader):

2009-03-04  David Levin  <levin@chromium.org>

        Reviewed by Alexey Proskuryakov.

        Bug 24337: Assert when doing sync XHR in a worker for a cacheable response.
        <https://bugs.webkit.org/show_bug.cgi?id=24337>

        Tests: http/tests/xmlhttprequest/access-control-basic-denied-preflight-cache.html
               http/tests/xmlhttprequest/workers/xmlhttprequest-file-not-found.html

        * loader/mac/ResourceLoaderMac.mm:
        (WebCore::ResourceLoader::willCacheResponse):
        An identifier is only asssigned if resource load callbacks are done.  So don't send
        willCacheResponse which uses identifier if resource load callbacks aren't being sent.

2009-03-04  David Levin  <levin@chromium.org>

        Reviewed by Alexey Proskuryakov.

        Bug 24330: Sync xhr in workers should send an abort exception when the worker is terminated.
        <https://bugs.webkit.org/show_bug.cgi?id=24330>

        Test: http/tests/xmlhttprequest/workers/abort-exception-assert.html

        * dom/ExceptionCode.cpp:
        (WebCore::xmlHttpRequestExceptionNames):
        Added missing ABORT_ERR whose absence caused an assert.

        * loader/WorkerThreadableLoader.cpp:
        (WebCore::WorkerThreadableLoader::loadResourceSynchronously):
        (WebCore::WorkerThreadableLoader::MainThreadBridge::cancel):
        Add more logic to handle the termination case for sync xhr.

2009-03-04  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Antti Koivisto.

        https://bugs.webkit.org/show_bug.cgi?id=24364
        Add support for HTMLMediaElement canPlayType method. Make
        MediaPlayer::supportsType take a ContentType instead of a
        separate mime type and codecs parameter.

        Test: media/video-can-play-type.html

        * dom/DOMImplementation.cpp:
        (WebCore::DOMImplementation::createDocument):
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::canPlayType): Add canPlayType method.
        (WebCore::HTMLMediaElement::loadInternal): selectMediaURL returns a ContentType.
        (WebCore::HTMLMediaElement::selectMediaURL): Return a ContentType instead of raw MIME type.
        (WebCore::HTMLMediaElement::initialURL): selectMediaURL returns a ContentType.
        * html/HTMLMediaElement.h: Add prototype.
        * html/HTMLMediaElement.idl: Ditto.
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::load): Take a ContentType instead of raw MIME type.
        (WebCore::MediaPlayer::supportsType): Ditto.
        * platform/graphics/MediaPlayer.h:

2009-03-04  Antti Koivisto  <antti@apple.com>

        Reviewed by Dave Hyatt.

        https://bugs.webkit.org/show_bug.cgi?id=24359
        Repaint throttling mechanism
        
        Excessive repainting can slow down page loadind. This implements a timer
        based throttling mechanism. It is behind ENABLE(REPAINT_THROTTLING) and not 
        enabled by default.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::checkCompleted):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::dispatchDragEvent):
        (WebCore::EventHandler::dispatchMouseEvent):
        (WebCore::EventHandler::keyEvent):
        (WebCore::EventHandler::handleTextInputEvent):
        * page/FrameView.cpp:
        (WebCore::FrameView::FrameView):
        (WebCore::FrameView::reset):
        (WebCore::FrameView::repaintContentRectangle):
        (WebCore::FrameView::beginDeferredRepaints):
        (WebCore::FrameView::endDeferredRepaints):
        (WebCore::FrameView::checkStopDelayingDeferredRepaints):
        (WebCore::FrameView::doDeferredRepaints):
        (WebCore::FrameView::updateDeferredRepaintDelay):
        (WebCore::FrameView::resetDeferredRepaintDelay):
        (WebCore::FrameView::adjustedDeferredRepaintDelay):
        (WebCore::FrameView::deferredRepaintTimerFired):
        (WebCore::FrameView::paintContents):
        * page/FrameView.h:

2009-03-04  Sam Weinig  <sam@webkit.org>

        Rubber-stamped by Antti Koivisto.

        Remove LOW_BANDWIDTH_DISPLAY as it is not being used by any platforms.

        * dom/Document.cpp:
        (WebCore::Document::Document):
        * dom/Document.h:
        (WebCore::Document::haveStylesheetsLoaded):
        * html/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::scriptHandler):
        * loader/Cache.cpp:
        (WebCore::Cache::requestResource):
        * loader/CachedCSSStyleSheet.cpp:
        (WebCore::CachedCSSStyleSheet::checkNotify):
        * loader/DocLoader.h:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::FrameLoader):
        (WebCore::FrameLoader::requestFrame):
        (WebCore::FrameLoader::stopLoading):
        (WebCore::FrameLoader::begin):
        (WebCore::FrameLoader::write):
        (WebCore::FrameLoader::endIfNotLoadingMainResource):
        (WebCore::FrameLoader::checkCompleted):
        (WebCore::FrameLoader::requestObject):
        (WebCore::FrameLoader::loadItem):
        * loader/FrameLoader.h:

2009-03-02  Xan Lopez  <xan@gnome.org>

        Reviewed by Mark Rowe.

        https://bugs.webkit.org/show_bug.cgi?id=24287
        [GTK] Move auth dialog feature to WebKit/

        Remove WebKitSoupAuthDialog files from build and stop using it.

        * GNUmakefile.am:
        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::ensureSessionIsInitialized):
        * platform/network/soup/webkit-soup-auth-dialog.c: Removed.
        * platform/network/soup/webkit-soup-auth-dialog.h: Removed.

2009-03-04  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dave Hyatt
        
        https://bugs.webkit.org/show_bug.cgi?id=24361
        
        Reinstate code that sets result.innerNode when hitTest() returns true,
        but never filled in the innerNode. Fixes hit testing of generated content.

        Test: fast/css-generated-content/hit-test-generated-content.html

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

2009-03-04  Adam Barth  <abath@webkit.org>

        Reviewed by Alexey Proskuryakov.

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

        Fix WebKit style for allowUniversalAccessFromFileURLs.

        * WebCore.base.exp:
        * dom/Document.cpp:
        (WebCore::Document::initSecurityContext):
        * page/Settings.cpp:
        (WebCore::Settings::Settings):
        (WebCore::Settings::setAllowUniversalAccessFromFileURLs):
        * page/Settings.h:
        (WebCore::Settings::allowUniversalAccessFromFileURLs):

2009-03-04  Brady Eidson  <beidson@apple.com>

        Reviewed by Darin Adler

        <rdar://problem/6619630> Quick Look of vCards stuck on image of first card opened.

        I narrowed this down to http://trac.webkit.org/changeset/39304 which, among other things,
        consolidated some of the various decision making pieces of the Cache into the new method
        FrameLoader::cachePolicy().

        Before 39304, when deciding whether to use an existing CachedResource, we checked if the FrameLoader 
        is reloading.  If it is, we'd evict any existing resource then recreate it.  Quick looks uses the
        same URL for this image every time and expects it to be reloaded with each new card.

        The FrameLoader::isReloading() check did one thing - Ask the DocumentLoader if it's cache policy
        is "ReloadIgnoringCacheData".  This check was lost in the consolidation to the new method.  

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::cachePolicy): Restore the DocumentLoader's cachePolicy check as a possible
          condition for returning CachePolicyReload.

2009-03-04  Timothy Hatcher  <timothy@apple.com>

        * English.lproj/localizedStrings.js: Update strings to include "DATABASES",
        "LOCAL STORAGE" and "SESSION STORAGE".

2009-03-04  Timothy Hatcher  <timothy@apple.com>

        Fix a regression where the Web Inspector console would not animate
        in or out correctly.

        Reviewed by Anders Carlsson.

        * inspector/front-end/inspector.css: Move a z-index to a child element
        to get the correct stacking order during the animation.

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

        https://bugs.webkit.org/show_bug.cgi?id=24201, pathologically bad block layout.

        Make sure to factor clear deltas into y position estimates.  Also avoid doing the comparison of
        the final position against the y position estimate until after the clear has happened.  This gets rid
        of some duplicated cut/pasted code and also ensures a layout delta only has to be put in once.

        Reviewed by Dan Bernstein

        Added fast/block/float/nested-clearance.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::collapseMargins):
        (WebCore::RenderBlock::clearFloatsIfNeeded):
        (WebCore::RenderBlock::estimateVerticalPosition):
        (WebCore::RenderBlock::layoutBlockChildren):
        (WebCore::RenderBlock::getClearDelta):
        * rendering/RenderBlock.h:

2009-03-02  Kim Grönholm  <kim.gronholm@nomovok.com>

        Reviewed by Simon Hausmann.

        Improvement to 3d transformations rendering in QtWebKit. QTransform is used
        instead of QMatrix. This allows perspective transformations since QTransform is
        a true 3x3 matrix.

        * platform/graphics/qt/GraphicsContextQt.cpp: Use QTransform instead of QMatrix everywhere.
        (WebCore::GraphicsContext::getCTM):
        (WebCore::GraphicsContext::restorePlatformState):
        (WebCore::GraphicsContext::fillPath):
        (WebCore::GraphicsContext::strokePath):
        (WebCore::GraphicsContext::fillRect):
        (WebCore::GraphicsContext::translate):
        (WebCore::GraphicsContext::rotate):
        (WebCore::GraphicsContext::scale):
        (WebCore::GraphicsContext::concatCTM):
        * platform/graphics/qt/ImageQt.cpp:
        (WebCore::Image::drawPattern):
        * platform/graphics/qt/PathQt.cpp:
        (WebCore::Path::translate):
        (WebCore::Path::transform):
        * platform/graphics/qt/PatternQt.cpp:
        (WebCore::Pattern::createPlatformPattern):
        * platform/graphics/qt/TransformationMatrixQt.cpp:
        (WebCore::TransformationMatrix::operator QTransform): Replace the conversion operator
        to QMatrix with one to QTransform.
        * platform/graphics/transforms/TransformationMatrix.h:
        * platform/graphics/qt/FontQt.cpp:

2009-02-24  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Simon Hausmann.

        https://bugs.webkit.org/show_bug.cgi?id=24151
        Fix Qt/S60 build break

        * platform/FileSystem.h: Create a default case for non-win and non-mac Qt builds
        * platform/qt/FileSystemQt.cpp: Ditto
        (WebCore::unloadModule):

2009-03-03  Mike Belshe  <mike@belshe.com>

        Reviewed by Alexey Proskuryakov.

        https://bugs.webkit.org/show_bug.cgi?id=21939
        Uninitialized ExceptionCode in DOMWindow::postMessage

        * dom/MessagePort.cpp:
        (WebCore::MessagePort::postMessage):

2009-03-03  David Kilzer  <ddkilzer@apple.com>

        <rdar://problem/6581203> WebCore and WebKit should install the same set of headers during installhdrs phase as build phase

        Reviewed by Mark Rowe.

        The fix is to add INSTALLHDRS_COPY_PHASE = YES and
        INSTALLHDRS_SCRIPT_PHASE = YES to WebCore.xcconfig, then to make
        sure various build phase scripts work with the installhdrs build
        phase.

        * Configurations/Base.xcconfig: Defined REAL_PLATFORM_NAME
        based on PLATFORM_NAME to work around the missing definition on
        Tiger.
        * Configurations/WebCore.xcconfig: Added
        JAVASCRIPTCORE_PRIVATE_HEADERS_DIR variable to simplify logic in
        the "Generate Derived Sources" script.  Added
        INSTALLHDRS_COPY_PHASE = YES and INSTALLHDRS_SCRIPT_PHASE = YES.

        * WebCore.xcodeproj/project.pbxproj:
        - Added shell code to prevent running "Check For Global
          Initializers", "Check For Exit Time Destructors" and "Check
          For Weak VTables" scripts during the installhdrs build phase.
        - Made "Generate Derived Sources" work for the installhdrs build
          phase.  Also simplified setting of CREATE_HASH_TABLE by using
          JAVASCRIPTCORE_PRIVATE_HEADERS_DIR.

2009-03-02  Adam Langley  <agl@google.com>

        Reviewed by Darin Fisher.

        Chromium Linux: Switch to using Skia to render widgets.

        In order to sandbox the Chromium renderer on Linux we need to remove
        the X connection. GTK cannot render without an X connection so, for
        now, we render widgets ourselves.

        Previously didn't use anti-alias fonts in order to match Windows font
        rendering exactly. This was helpful when bootstrapping our layout
        tests. Now, however, we are ready to enable it.

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

        * platform/chromium/ScrollbarThemeChromium.cpp:
        (WebCore::ScrollbarThemeChromium::buttonSize):
        * platform/chromium/ScrollbarThemeChromiumLinux.cpp:
        (WebCore::ScrollbarThemeChromium::scrollbarThickness):
        (WebCore::ScrollbarThemeChromium::paintTrackPiece):
        (WebCore::ScrollbarThemeChromium::paintButton):
        (WebCore::ScrollbarThemeChromium::paintThumb):
        * platform/graphics/chromium/FontPlatformDataLinux.cpp:
        (WebCore::FontPlatformData::setupPaint):
        * platform/graphics/skia/PlatformContextSkia.cpp:
        (PlatformContextSkia::PlatformContextSkia):
        (PlatformContextSkia::~PlatformContextSkia):
        * platform/graphics/skia/PlatformContextSkia.h:
        * rendering/RenderThemeChromiumGtk.cpp: Removed.
        * rendering/RenderThemeChromiumGtk.h: Removed.
        * rendering/RenderThemeChromiumLinux.cpp: Added.
        * rendering/RenderThemeChromiumLinux.h: Added.

2009-03-03  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Darin Fisher.

        https://bugs.webkit.org/show_bug.cgi?id=24261
        Fix return types.

        Test: LayoutTests/dom/svg/level3/xpath/XPathEvaluator_evaluate_TYPE_ERR.svg

        * bindings/v8/V8Binding.h:
        (WebCore::toInt32): change return type to int
        (WebCore::toFloat): change return type to float.

2009-03-03  Anders Carlsson  <andersca@apple.com>

        Reviewed by John Sullivan.

        https://bugs.webkit.org/show_bug.cgi?id=22884
        <rdar://problem/6449783>
        modified layout test crashes Safari

        Null check NPStream before dereferencing it.
        
        * plugins/PluginView.cpp:
        (WebCore::PluginView::destroyStream):

2009-03-03  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Simon Fraser.

        Fix for <rdar://problem/6641045>
        Don't call QTKit to get movie properties until movie metadata has been loaded.

        * platform/graphics/mac/MediaPlayerPrivateQTKit.h:
        (WebCore::MediaPlayerPrivate::metaDataAvailable): defined
        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivate::createQTTime): return default if !metaDataAvailable.
        (WebCore::MediaPlayerPrivate::play): Ditto.
        (WebCore::MediaPlayerPrivate::pause): Ditto.
        (WebCore::MediaPlayerPrivate::duration): Ditto.
        (WebCore::MediaPlayerPrivate::currentTime): Ditto.
        (WebCore::MediaPlayerPrivate::seek): Ditto.
        (WebCore::MediaPlayerPrivate::seekTimerFired): Ditto.
        (WebCore::MediaPlayerPrivate::paused): Ditto.
        (WebCore::MediaPlayerPrivate::seeking): Ditto.
        (WebCore::MediaPlayerPrivate::naturalSize): Ditto.
        (WebCore::MediaPlayerPrivate::hasVideo): Ditto.
        (WebCore::MediaPlayerPrivate::setVolume): Ditto.
        (WebCore::MediaPlayerPrivate::setRate): Ditto.
        (WebCore::MediaPlayerPrivate::dataRate): Ditto.
        (WebCore::MediaPlayerPrivate::maxTimeLoaded): Ditto.
        (WebCore::MediaPlayerPrivate::totalBytes): Ditto.

2009-03-03  Kevin McCullough  <kmccullough@apple.com>

        - Spelling fix.

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

2009-03-03  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Darin Fisher.

        https://bugs.webkit.org/show_bug.cgi?id=23657
        Remove Database API callback IDLs from the project. 
        They were removed in r40633.

        * WebCore.xcodeproj/project.pbxproj: Removed IDL files from the project.

2009-03-03  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Oliver Hunt.

        <rdar://problem/6639110> console.profile() doesn't work without a title

        * page/Console.cpp:
        (WebCore::Console::profile): If there is no title assume this is a user
        initiated profile and give it the next incremented title name.

2009-03-03  Timothy Hatcher  <timothy@apple.com>

        Fix a regression that broke dirxml and caused an ASSERT in debug builds. Also simplified
        the console code and refactored things to have fewer code paths and duplication.

        rdar://problem/6367127
        https://bugs.webkit.org/show_bug.cgi?id=24329

        Reviewed by Kevin McCullough.

        Test: manual-tests/inspector/console-dir.html

        * bindings/js/JSInspectedObjectWrapper.cpp:
        (WebCore::JSInspectedObjectWrapper::wrap): Use the lexicalGlobalObject instead of dynamicGlobalObject
        to fix an ASSERT about using a wrapper from the wrong ExecState.
        * bindings/js/JSQuarantinedObjectWrapper.cpp:
        (WebCore::JSQuarantinedObjectWrapper::JSQuarantinedObjectWrapper): Ditto.
        (WebCore::JSQuarantinedObjectWrapper::allowsUnwrappedAccessFrom): Ditto.
        * inspector/front-end/Console.js:
        (WebInspector.Console.prototype._format): Remove the inline argument and add forceObjectFormat.
        When forceObjectFormat is true, the only formatter used is _formatobject.
        (WebInspector.Console.prototype._formatvalue): Remove the inline argument.
        (WebInspector.Console.prototype._formatstring): Ditto.
        (WebInspector.Console.prototype._formatregexp): Ditto.
        (WebInspector.Console.prototype._formatarray): Ditto.
        (WebInspector.Console.prototype._formatnode): Remove the inline argument and make a DOM tree instead of an anchor.
        (WebInspector.Console.prototype._formatobject): Remove the inline argument and always make a property graph.
        (WebInspector.Console.prototype._formaterror): Remove the inline argument.
        (WebInspector.ConsoleMessage): Remove the case for MessageLevel.Node and
        simplify the case for MessageLevel.Object to use the normal _format code path with the %O formatter.
        (WebInspector.ConsoleMessage.prototype._format.formatForConsole): Don't pass an additional true argument for inline.
        (WebInspector.ConsoleMessage.prototype._format.formatAsObjectForConsole): Added. Pass a true argument for forceObjectFormat.
        (WebInspector.ConsoleMessage.prototype._format): Added support for the %O formatter. Use formatForConsole for all arguments.
        (WebInspector.ConsoleMessage.prototype.toString): Add the other message levels.
        * inspector/front-end/inspector.css: Tweak styles to look and work correctly.
        * inspector/front-end/utilities.js:
        (Object.type): Return "node" for Node objects.
        (Object.describe): Handle the "node" type.
        * page/Console.cpp:
        (WebCore::printMessageSourceAndLevelPrefix): Fix an assert by adding the other message level types.
        (WebCore::Console::dirxml): Use the standard log fuction since it prints a DOM tree for nodes by default.
        * page/Console.h:
        (WebCore::enum MessageLevel): Removed NodeMessageLevel. Added a FIXME.

2009-03-03  Scott Violet  <sky@google.com>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=24325
        Crash on replacing document contents during drop.

        Makes sure a node is in the document during a move before using it.

        Test: fast/events/crash-on-mutate-during-drop.html

        * editing/MoveSelectionCommand.cpp:
        (WebCore::MoveSelectionCommand::doApply):

2009-03-03  Jungshik Shin <jshin@chromium.org>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=23028
        Enable dynamic web font support to Chromium on Windows.
        Files that were omitted by mistake in the latest patch
        that was landed.

        * loader/CachedFont.cpp:
        (WebCore::CachedFont::~CachedFont):
        (WebCore::CachedFont::ensureCustomFontData):
        (WebCore::CachedFont::platformDataFromCustomData):
        (WebCore::CachedFont::allClientsRemoved):
        * platform/graphics/chromium/FontCustomPlatformData.cpp:
        (WebCore::EOTStream::EOTStream):
        (WebCore::createFontCustomPlatformData):
        * platform/graphics/win/FontCustomPlatformData.cpp:
        (WebCore::EOTStream::EOTStream):
        (WebCore::createFontCustomPlatformData):

2009-03-03  Gustavo Noronha Silva  <gns@gnome.org>

        Reviewed by Alexey Proskuryakov.

        https://bugs.webkit.org/show_bug.cgi?id=16826
        [Gtk] Implement WebKitDownload

        Make the Soup backend able to handle requests without a frame,
        since we may have such things now that we support downloads.

        * platform/network/ResourceHandleInternal.h:
        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::ResourceHandle::start):

2009-03-03  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=24331
        Add custom V8 bindings for Element, Attr, HTMLFrame, and HTMLIFrame.

        * bindings/v8/custom/V8AttrCustom.cpp: Added.
        * bindings/v8/custom/V8CustomBinding.cpp: Added.
        * bindings/v8/custom/V8CustomBinding.h: Added attribute-checking helpers.
        * bindings/v8/custom/V8ElementCustom.cpp: Added.
        * bindings/v8/custom/V8HTMLFrameElementCustom.cpp: Added.
        * bindings/v8/custom/V8HTMLIFrameElementCustom.cpp: Added.

2009-03-03  Brady Eidson  <beidson@apple.com>

        Reviewed by Darin Adler

        <rdar://problem/6616664> - Quick looks of various file types is broken

        In http://trac.webkit.org/changeset/40553 there was an attempt to prevent NSURLRequest churn
        for non-HTTP loads when the underlying ResourceRequest changed.  Unfortunately it was a little
        overzealous as the mainDocumentURL is relevant for all loads, not only HTTP/HTTPS loads.

        Partially reverted behavior to always set the mainDocumentURL in situations when we would've
        before that patch.

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

        * platform/network/ResourceRequestBase.cpp:
        (WebCore::ResourceRequestBase::setMainDocumentURL):

2009-03-03  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Simon Fraser.

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

        Added a WebCoreForceSoftwareAnimation flag.

        * platform/graphics/mac/GraphicsLayerCA.mm:
        (WebCore::forceSoftwareAnimation):
        (WebCore::GraphicsLayerCA::setOpacity):
        (WebCore::GraphicsLayerCA::animateTransform):
        (WebCore::GraphicsLayerCA::animateFloat):

2009-03-02  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Sam Weinig.

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

        Added prototype properties for several classes with constructors that
        were missing them, including the one mentioned in the bug.

        Test: fast/dom/Window/custom-constructors.html

        * bindings/js/JSAudioConstructor.cpp:
        (WebCore::JSAudioConstructor::JSAudioConstructor):
        * bindings/js/JSDOMWindowBase.cpp:
        (jsDOMWindowBaseWebKitCSSMatrix):
        * bindings/js/JSImageConstructor.cpp:
        (WebCore::JSImageConstructor::JSImageConstructor):
        * bindings/js/JSOptionConstructor.cpp:
        (WebCore::JSOptionConstructor::JSOptionConstructor):
        * bindings/js/JSWebKitCSSMatrixConstructor.cpp:
        (WebCore::JSWebKitCSSMatrixConstructor::JSWebKitCSSMatrixConstructor):
        * bindings/js/JSWebKitCSSMatrixConstructor.h:
        * bindings/js/JSWebKitPointConstructor.cpp:
        (WebCore::JSWebKitPointConstructor::JSWebKitPointConstructor):
        * bindings/js/JSWorkerConstructor.cpp:
        (WebCore::JSWorkerConstructor::JSWorkerConstructor):

2009-03-03  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Darin Fisher.

        https://bugs.webkit.org/show_bug.cgi?id=24321
        Add V8 bindings headers.

        * bindings/v8/V8Binding.h: Added.
        * bindings/v8/V8Proxy.h: Added.
        * bindings/v8/custom/V8CustomBinding.h: Added.
        * bindings/v8/custom/V8CustomEventListener.h: Added.

2009-03-03  Jungshik Shin <jshin@chromium.org>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=23803
        Fix an 'off-by-1' error in ChromiumWin's font fallback.

        * platform/graphics/chromium/FontCacheChromiumWin.cpp:
        (WebCore::FontCache::getFontDataForCharacters):

2009-03-03  Jungshik Shin  <jshin@chromium.org>

        Reviewed by Eric Seidel.

        http://bugs.webkit.org/show_bug.cgi?id=23028
        Enable dynamic web font support to Chromium on Windows: Part 1
        - Move OpenTypeUtilities.{cpp,h} to platform/graphics/opentype
          from platform/graphics/win because both Windows port and Chromium Windows
          port will use them.
        - Adjust WebCore.vcproj accordingly.

        * WebCore.vcproj/WebCore.vcproj:
        * platform/graphics/opentype: Added.
        * platform/graphics/opentype/OpenTypeUtilities.cpp: Copied from WebCore/platform/graphics/win/OpenTypeUtilities.cpp.
        * platform/graphics/opentype/OpenTypeUtilities.h: Copied from WebCore/platform/graphics/win/OpenTypeUtilities.h.
        * platform/graphics/win/OpenTypeUtilities.cpp: Removed.
        * platform/graphics/win/OpenTypeUtilities.h: Removed.

2009-03-03  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dave Hyatt

        https://bugs.webkit.org/show_bug.cgi?id=24312
        
        Take 3D transforms into account when hit testing:
        
        1. Maintain a bit on each RenderLayer that is set when the layer
           has 3d descendants, so that we know when to fall into the slow
           hit testing path.
           
        2. Make a ref-counted HitTestingTransformState, which is used to store
           an accumulated transform, and the hit test point, and hitTestRect
           in the plane of the ancestor non-3d ('flattening') layer.
           
           It's ref-counted so we can heap allocate it (to avoid stack bloat),
           and avoid copying when hitTestLayer calls itself after applying the transform.
           
        3. Add logic to hitTestLayer to depth-test just direct descendants, if any have
           3D transforms, or to do deep depth-testing when traversing a preserves-3d
           hierarchy. When hit, layers compute a z-offset from the ancestor flattening
           layer, which allows for correct depth testing.
           
           The existing early-return codepath is unaffected when there are no 3d transforms
           and no preserve-3d.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::RenderLayer):
        (WebCore::RenderLayer::updateTransform):
        (WebCore::RenderLayer::dirty3DTransformedDescendantStatus):
        (WebCore::RenderLayer::update3DTransformedDescendantStatus):
        (WebCore::RenderLayer::hitTest):
        (WebCore::computeZOffset):
        (WebCore::RenderLayer::createLocalTransformState):
        (WebCore::RenderLayer::hitTestLayer):
        (WebCore::RenderLayer::hitTestContents):
        * rendering/RenderLayer.h:
        (WebCore::RenderLayer::preserves3D):
        (WebCore::RenderLayer::has3DTransform):
        (WebCore::RenderLayer::setHas3DTransformedDescendant):
        (WebCore::RenderLayer::has3DTransformedDescendant):
        * rendering/RenderLayerBacking.cpp:
        * rendering/TransformState.cpp:
        (WebCore::TransformState::flatten):
        (WebCore::TransformState::mappedPoint):
        (WebCore::HitTestingTransformState::move):
        (WebCore::HitTestingTransformState::applyTransform):
        (WebCore::HitTestingTransformState::flatten):
        (WebCore::HitTestingTransformState::mappedPoint):
        (WebCore::HitTestingTransformState::mappedQuad):
        * rendering/TransformState.h:
        (WebCore::TransformState::TransformState):
        (WebCore::HitTestingTransformState::create):
        (WebCore::HitTestingTransformState::move):
        (WebCore::HitTestingTransformState::HitTestingTransformState):

2009-03-03  Brett Wilson  <brettw@chromium.org>

        Fix uninitialized memory reads in the Chromium Windows transparency
        code that were identified by Purify,

        Reviewed by Darin Fisher.

        * platform/graphics/chromium/TransparencyWin.cpp:
        (WebCore::TransparencyWin::OwnedBuffers::OwnedBuffers):
        (WebCore::TransparencyWin::initializeNewContext):

2009-03-03  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dave Hyatt

        https://bugs.webkit.org/show_bug.cgi?id=24312
        
        Factor the code that compute a transform relative to the container
        into RenderObject::transformFromContainer().
        
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::mapLocalToAbsolutePoint):
        (WebCore::RenderBox::mapAbsoluteToLocalPoint):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::transformFromContainer):
        * rendering/RenderObject.h:

2009-03-03  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dave Hyatt

        https://bugs.webkit.org/show_bug.cgi?id=24317
        
        Always return |true| from RenderTextControlMultiLine::nodeAtPoint() if
        the superclass found a node, otherwise we set the innerNode of the
        HitTestResult, but don't actually report that we found a hit.

        * rendering/RenderTextControlMultiLine.cpp:
        (WebCore::RenderTextControlMultiLine::nodeAtPoint):

2009-03-03  Onne Gorter  <onne.gorter@avinity.net>

        Reviewed by Anders Carlsson.

        https://bugs.webkit.org/show_bug.cgi?id=23707
        resizing plugins does not work, because the plugin never gets informed

        Make gtk plugins resize correctly, by sending them the setwindow event
        correctly. Also ensure that all plugin eventing is done with correct
        locking/calling. Mostly copied from mac implementation.

        manual test: manual-tests/gtk/plugin-resize-scroll.html

        * plugins/PluginView.h:
        * plugins/gtk/PluginViewGtk.cpp:
        (WebCore::PluginView::dispatchNPEvent):
        ensure locking/calling for NPEvents
        (WebCore::PluginView::updatePluginWidget):
        if something changed, let setNPWindowIfNeeded handle it
        (WebCore::PluginView::paint):
        (WebCore::PluginView::handleKeyboardEvent):
        (WebCore::PluginView::handleMouseEvent):
        ensure calling conventions
        (WebCore::PluginView::setNPWindowRect):
        just pass control to setNPWindowIfNeeded
        (WebCore::PluginView::setNPWindowIfNeeded):
        event the plugin correctly of new window
        (WebCore::PluginView::init):
        init through the new setup

2009-03-03  Mike Belshe  <mike@belshe.com>

        Reviewed by Darin Fisher.

        https://bugs.webkit.org/show_bug.cgi?id=24311
        Make IDL returning DOMObject use [V8Custom]

        * dom/Document.idl:
        * html/HTMLCanvasElement.idl:

2009-03-02  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Adele Peterson

        https://bugs.webkit.org/show_bug.cgi?id=24313
        
        If RenderTextControlSingleLine::nodeAtPoint() pokes a node into the
        HitTestResult, then it had better well return |true|. And m_innerBlock
        could never have been set as the hit node by the superclass, because
        the superclass knows nothing about m_innerBlock.
        
        Test: fast/forms/input-hit-test-border.html

        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::nodeAtPoint):

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

        Reviewed by Mark Rowe.

        Enable Geolocation (except on Tiger and Leopard).

        * Configurations/WebCore.xcconfig:

2009-03-02  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Adele Peterson.

        Fix https://bugs.webkit.org/show_bug.cgi?id=24307
        Null out m_highlightedNode on hideHighlight().
        Ran WebCore/manual-tests/inspector/highlight-nodes.html.

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::hideHighlight):

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

        Reviewed by Geoffrey Garen.

        Fix for <rdar://problem/6507404> Add Geolocation support.

        This is not yet turned on for any Mac platform.

        * WebCore.xcodeproj/project.pbxproj:
        * page/Chrome.cpp:
        (WebCore::Chrome::shouldAllowGeolocationForFrame):
        * page/Chrome.h:
        * page/ChromeClient.h:
        (WebCore::ChromeClient::shouldAllowGeolocationForFrame):
        * page/Geolocation.cpp:
        (WebCore::Geolocation::Geolocation):
        (WebCore::Geolocation::disconnectFrame): Remove call to setUsingGeolocation as the document
        will not be alive at this point.
        (WebCore::Geolocation::getCurrentPosition): Check if the embedding app allows geolocation and
        return a PERMISSION_DENIED if not.
        (WebCore::Geolocation::watchPosition): Ditto.
        (WebCore::Geolocation::shouldAllowGeolocation): Perform request to embedding layer of whether
        to allow geolocation and cache the result. 
        * page/Geolocation.h:
        (WebCore::Geolocation::):
        * platform/GeolocationService.cpp:
        * platform/GeolocationService.h:
        (WebCore::GeolocationService::~GeolocationService):
        (WebCore::GeolocationService::stopUpdating):
        * platform/mac/GeolocationServiceMac.h: Added.
        (WebCore::GeolocationServiceMac::lastPosition):
        (WebCore::GeolocationServiceMac::lastError):
        * platform/mac/GeolocationServiceMac.mm: Added.
        (WebCore::GeolocationService::create):
        (WebCore::GeolocationServiceMac::GeolocationServiceMac):
        (WebCore::GeolocationServiceMac::~GeolocationServiceMac):
        (WebCore::GeolocationServiceMac::startUpdating):
        (WebCore::GeolocationServiceMac::stopUpdating):
        (WebCore::GeolocationServiceMac::suspend):
        (WebCore::GeolocationServiceMac::resume):
        (WebCore::GeolocationServiceMac::positionChanged):
        (WebCore::GeolocationServiceMac::errorOccurred):
        (-[WebCoreCoreLocationObserver initWithCallback:]):
        (-[WebCoreCoreLocationObserver locationManager:didUpdateToLocation:fromLocation:]):
        (-[WebCoreCoreLocationObserver locationManager:didFailWithError:]):

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

        Build fixes for wxWidgets Mac trunk build.

        * platform/wx/wxcode/mac/carbon/fontprops.cpp:
        (wxFontProperties::wxFontProperties):
        (GetTextExtent):
        * webcore-wx.bkl:

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

        wxGTK missing header build fix.

        * platform/wx/wxcode/gtk/fontprops.cpp:

2009-03-02  Dan Bernstein  <mitz@apple.com>

        Reviewed by Adam Roben.

        - fix https://bugs.webkit.org/show_bug.cgi?id=21811
          REGRESSION: Windows Build Not Selecting Proper Font

        * platform/graphics/win/FontCacheWin.cpp:
        (WebCore::createGDIFont): Added back code to verify that the created
        HFONT has the requested face name.

2009-03-02  Timothy Hatcher  <timothy@apple.com>

        Fixes a regression caused by splitting the input and output of console commands.

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

        Reviewed by Kevin McCullough.

        * inspector/front-end/Console.js:
        (WebInspector.Console.prototype.addMessage): Don't treat ConsoleCommandResult as a
        normal ConsoleMessage when appending. This prevents resetting repeatCounts incorrectly.

2009-03-02  Timothy Hatcher  <timothy@apple.com>

        Make exception messages and logged Error objects display consistently.

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

        Reviewed by Adam Roben.

        * English.lproj/localizedStrings.js: Remove a string for line numbers.
        * inspector/front-end/Console.js:
        (WebInspector.Console.prototype._enterKeyPressed): Pass the exception
        boolean to the ConsoleCommandResult constructor and don't pass level.
        (WebInspector.Console.prototype._formatnode): Fix a className typo.
        (WebInspector.Console.prototype._formaterror): Add an error-message
        classed span around the message to show in red and remove the
        console-message-url class from the link so it doesn't float right.
        Instead enclose the link in parentheses and use displayNameForURL
        to shorten the URL in the link.
        (WebInspector.ConsoleMessage.prototype.toMessageElement): Simplify
        how line numbers are shown since link underlining a string with
        parentheses looks bad.
        (WebInspector.ConsoleCommandResult): Take an exception boolean flag
        instead of a level and get line and URL based on that flag.
        * inspector/front-end/inspector.css: Tweaks to the styles.

2009-03-02  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Adele Peterson.

        Bug 24048: extra windows button padding doesn't apply when there's no appearance
        <https://bugs.webkit.org/show_bug.cgi?id=24048>

        Replace adjustButtonInnerStyle with buttonInternalPaddingLeft/Right/Top/Bottom.

        No tests added as existing tests already cover this behavior.

        * rendering/RenderButton.cpp:
        (WebCore::RenderButton::setupInnerStyle):
        * rendering/RenderTheme.cpp:
        * rendering/RenderTheme.h:
        (WebCore::RenderTheme::buttonInternalPaddingLeft):
        (WebCore::RenderTheme::buttonInternalPaddingRight):
        (WebCore::RenderTheme::buttonInternalPaddingTop):
        * rendering/RenderThemeChromiumGtk.cpp:
        (WebCore::RenderThemeWin::buttonInternalPaddingLeft):
        (WebCore::RenderThemeWin::buttonInternalPaddingRight):
        (WebCore::RenderThemeWin::buttonInternalPaddingTop):
        (WebCore::RenderThemeWin::buttonInternalPaddingBottom):
        * rendering/RenderThemeChromiumGtk.h:
        * rendering/RenderThemeChromiumWin.cpp:
        (WebCore::RenderThemeChromiumWin::buttonInternalPaddingLeft):
        (WebCore::RenderThemeChromiumWin::buttonInternalPaddingRight):
        (WebCore::RenderThemeChromiumWin::buttonInternalPaddingTop):
        (WebCore::RenderThemeChromiumWin::buttonInternalPaddingBottom):
        * rendering/RenderThemeChromiumWin.h:
        * rendering/RenderThemeWin.cpp:
        (WebCore::RenderThemeWin::buttonInternalPaddingLeft):
        (WebCore::RenderThemeWin::buttonInternalPaddingRight):
        (WebCore::RenderThemeWin::buttonInternalPaddingTop):
        (WebCore::RenderThemeWin::buttonInternalPaddingBottom):
        * rendering/RenderThemeWin.h:

2009-03-02  Adam Treat  <adam.treat@torchmobile.com>

        Build fix for Qt port.  Remove unnecessary assert.

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

2009-03-02  Adam Treat  <adam.treat@torchmobile.com>

        Reviewed by Adam Roben and previously by Eric Seidel and Simon Fraser.

        https://bugs.webkit.org/show_bug.cgi?id=24227
        Ensure that the checkForSolidColor() optimization is correctly triggered
        for all cases of drawPattern.  Currently, the optimization was not triggered
        when the check had not been previously performed via a request for the
        image's NativeImagePtr.

        Implement the Qt version of the checkForSolidColor() method.  Combined with
        the bug fix this reduces the time it takes to draw a repeating background
        of a 1x1 image from ~50msecs to ~0msecs on my machine.

        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::BitmapImage):
        * platform/graphics/BitmapImage.h:
        (WebCore::BitmapImage::mayFillWithSolidColor):
        * platform/graphics/Image.h:
        (WebCore::Image::mayFillWithSolidColor):
        * platform/graphics/cairo/ImageCairo.cpp:
        (WebCore::BitmapImage::BitmapImage):
        (WebCore::BitmapImage::checkForSolidColor):
        * platform/graphics/cg/ImageCG.cpp:
        (WebCore::BitmapImage::BitmapImage):
        (WebCore::BitmapImage::checkForSolidColor):
        * platform/graphics/qt/ImageQt.cpp:
        (WebCore::BitmapImage::checkForSolidColor):
        * platform/graphics/skia/ImageSkia.cpp:
        (WebCore::BitmapImage::checkForSolidColor):
        * platform/graphics/wx/ImageWx.cpp:
        (WebCore::BitmapImage::checkForSolidColor):

2009-03-02  Gustavo Noronha Silva  <gns@gnome.org>

        Unreviewed build fix; adding missing files to EXTRA_DIST, so that
        they show up in the tarball.

        * GNUmakefile.am:

2009-03-02  Dirk Schulze  <krit@webkit.org>

        Reviewed by Holger Freyther.

        Added putImageData to Qt. Discussed with Ariya Hidayat.

        [Qt] lacks putImageData support in Canvas
        https://bugs.webkit.org/show_bug.cgi?id=22186

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

2009-03-02  Timothy Hatcher  <timothy@apple.com>

        Show exception messages again when evaluating bad expressions in the
        Web Inspector's console.

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

        Reviewed by Oliver Hunt.

        * bindings/js/JSQuarantinedObjectWrapper.cpp:
        (WebCore::JSQuarantinedObjectWrapper::transferExceptionToExecState):
        Fix the order in which the exception is set and cleared now that the
        exception is stored in the shared GlobalData, not per ExecState.

2009-02-28  Timothy Hatcher  <timothy@apple.com>

        Make input in the Web Inspector console print before any output
        that might be added by the called function.

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

        Reviewed by Oliver Hunt.

        * inspector/front-end/Console.js:
        (WebInspector.Console.prototype._enterKeyPressed): Add the command
        message before evaluating the result. Associate the originating
        command to the result, so if they are adjacent there is no divider.
        (WebInspector.ConsoleCommand): No longer take a result.
        (WebInspector.ConsoleCommand.prototype.toMessageElement): Result
        code removed since it isn't used now.
        (WebInspector.ConsoleCommandResult): Subclass ConsoleMessage.
        (WebInspector.ConsoleCommandResult.prototype.toMessageElement):
        Call the ConsoleMessage toMessageElement and add a style class.
        * inspector/front-end/inspector.css: Add a new style class for
        adjacent results to hide the divider. Also tweak the position of
        the disclosure triangle for objects to not use the left margin.

2009-03-01  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Oliver Hunt.

        Bug 24282: AX Palindrome error when asking for a specific index of the AXChildren array
        <https://bugs.webkit.org/show_bug.cgi?id=24282>

        When fetching an array of elements with a range, attachment views need to be returned
        instead of the actual attachment.

        * page/mac/AccessibilityObjectWrapper.mm:
        (-[AccessibilityObjectWrapper accessibilityIndexOfChild:]):
        (-[AccessibilityObjectWrapper accessibilityArrayAttributeValues:index:maxCount:]):

2009-03-01  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Eric Seidel.

        Bug 24251: Cleanup: replace positionForCoordinates with positionForPoint
        <https://bugs.webkit.org/show_bug.cgi?id=24251>
        
        Make RenderObject::positionForCoordinate non-virtual and
        RenderObject::positionForPoint virtual in preparation for
        removing positionFor* from RenderObject/RenderText.

        * page/Frame.cpp:
        (WebCore::Frame::visiblePositionForPoint):
        * rendering/RenderBR.cpp:
        (WebCore::RenderBR::positionForPoint):
        * rendering/RenderBR.h:
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::positionForPoint):
        * rendering/RenderBlock.h:
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::positionForPoint):
        * rendering/RenderBox.h:
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::positionForPoint):
        * rendering/RenderInline.h:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::positionForCoordinates):
        (WebCore::RenderObject::positionForPoint):
        * rendering/RenderObject.h:
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::positionForPoint):
        * rendering/RenderReplaced.h:
        * rendering/RenderSVGInlineText.cpp:
        (WebCore::RenderSVGInlineText::positionForPoint):
        * rendering/RenderSVGInlineText.h:
        * rendering/RenderText.cpp:
        (WebCore::RenderText::positionForPoint):
        * rendering/RenderText.h:

2009-03-01  Larry Ewing  <lewing@novell.com>

        Reviewed by Alexey Proskuryakov.

        https://bugs.webkit.org/show_bug.cgi?id=24080
        NPN_GetValue casting to the wrong type and writing outside bounds

        Make sure to cast the value to the correct type so that only
        memory owned by the value is written to.

        * plugins/gtk/PluginViewGtk.cpp (PluginView::getValueStatic): 
        * plugins/qt/PluginViewQt.cpp (PluginView::getValueStatic):
        * plugins/mac/PluginViewMac.cpp (PluginView::getValueStatic): 
        (PluginView::getValue):

2009-03-01  Jeremy Moskovich  <jeremy@chromium.org>

        Reviewed by Simon Fraser.

        https://bugs.webkit.org/show_bug.cgi?id=24197 and
        https://bugs.webkit.org/show_bug.cgi?id=23512

        The Windows version of cgColor() is conditionally compiled using
        !PLATFORM(MAC) change this to PLATFORM(WIN_OS) so that Chrome
        can use the OS X version instead of the Windows version.

        Also rename cgColor() -> createCGColor()

        No observable change in behavior, so no test.

        * platform/graphics/Color.h:
        * platform/graphics/cg/ColorCG.cpp:
        (WebCore::createCGColor):
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::setPlatformShadow):
        * platform/graphics/mac/ColorMac.mm:
        (WebCore::createCGColor):
        * platform/graphics/mac/GraphicsContextMac.mm:
        (WebCore::GraphicsContext::drawFocusRing):
        * platform/graphics/mac/GraphicsLayerCA.mm:
        (WebCore::setLayerBorderColor):
        (WebCore::setLayerBackgroundColor):
        (WebCore::GraphicsLayerCA::setBackgroundColor):
        * platform/graphics/win/GraphicsContextCGWin.cpp:
        (WebCore::GraphicsContext::drawFocusRing):
        * svg/graphics/filters/cg/SVGFEHelpersCg.mm:
        (WebCore::ciColor):

2009-03-01  David Levin  <levin@chromium.org>

        Reviewed by Alexey Proskuryakov.

        Bug 24271: XMLHttpRequest needs js bindings for Workers.
        <https://bugs.webkit.org/show_bug.cgi?id=24271>

        Tests: http/tests/xmlhttprequest/workers/methods-async.html
               http/tests/xmlhttprequest/workers/methods.html

        * bindings/js/JSWorkerContextBase.cpp:
        (WebCore::JSWorkerContextBase::getOwnPropertySlot):
        (jsWorkerContextBaseXMLHttpRequest):
        (setJSWorkerContextBaseXMLHttpRequest):
        Expose XMLHttpRequest to Workers.

        * bindings/js/JSWorkerContextBase.h:

        * bindings/js/JSXMLHttpRequestConstructor.cpp:
        (WebCore::JSXMLHttpRequestConstructor::JSXMLHttpRequestConstructor):
        (WebCore::constructXMLHttpRequest):
        (WebCore::JSXMLHttpRequestConstructor::mark):
        Removed the dependencies on Document.

        * bindings/js/JSXMLHttpRequestConstructor.h:
        (WebCore::JSXMLHttpRequestConstructor::scriptExecutionContext):
        * dom/EventException.idl:
        * dom/EventListener.idl:
        Change to have the NoStaticTables attribute since they are used from XHR.

        * loader/WorkerThreadableLoader.cpp:
        (WebCore::workerContextDidFinishLoading):
        (WebCore::WorkerThreadableLoader::MainThreadBridge::didFinishLoading):
        Fixed identifier to be unsigned long.

        * loader/WorkerThreadableLoader.h:
        * workers/WorkerThread.cpp:
        (WebCore::WorkerThread::workerThread):
        Stop active objects when the thread is getting shutdown so that xhr gets properly shutdown.

        * xml/XMLHttpRequestUpload.cpp:

        * xml/XMLHttpRequest.idl:
        * xml/XMLHttpRequestException.idl:
        * xml/XMLHttpRequestProgressEvent.idl:
        * xml/XMLHttpRequestUpload.idl:
        Change to have the NoStaticTables attribute since they are used from XHR.

2009-03-01  Horia Olaru  <olaru@adobe.com>

        Adding manual debugger test cases for bug.

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

        Reviewed by Kevin McCullough.

        * manual-tests/inspector/debugger-step-on-do-while-statements.html: Added.
        * manual-tests/inspector/debugger-step-on-for-in-statements.html: Added.
        * manual-tests/inspector/debugger-step-on-for-statements.html: Added.
        * manual-tests/inspector/debugger-step-on-while-statements.html: Added.
        * manual-tests/inspector/resources/loop-statements.js: Added.

2009-03-01  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        - fix <rdar://problem/6634768> Reproducible crash in RenderLayer::updateScrollCornerStyle() using full-page zoom at MobileMe Contacts

        Test: fast/events/scroll-during-zoom-change.html

        * dom/Document.cpp:
        (WebCore::Document::recalcStyle): Pause scheduled events during style
        reclaculation. Changes to the zoom property result in scroll events
        being generated during style recalc, and those events need to be
        deferred until the render tree is consistent.
        * page/FrameView.cpp:
        (WebCore::FrameView::layout): Changed to account for a case in which the
        post-layout tasks trigger a nested layout, which reactivates the
        post-layout task timer.

2009-03-01  Ross Boucher  <rboucher@gmail.com>

        Alphabetically sort scripts in the Script's panel file popup menu.

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

        Reviewed by Timothy Hatcher.

        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype._addScriptToFilesMenu):
        * inspector/front-end/utilities.js:
        (insertionIndexForObjectInListSortedByFunction):
        (indexOfObjectInListSortedByFunction):

2009-03-01  Yael Aharon  <yael.aharon@nokia.com>

        Pass securityOrigin->host() instead of securityOrigin->domain() to WebInspector
        when creating databases, localStorage or sessionStorage. Changing document.domain
        should have no affect on databases, localStorage and sessionStorage in Web Inspector.

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

        Reviewed by Timothy Hatcher.

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::addDOMStorageScriptResource):
        (WebCore::InspectorController::didUseDOMStorage):
        * storage/Database.cpp:
        (WebCore::Database::openDatabase):

2009-03-01  Gustavo Noronha Silva  <gns@gnome.org>

        Reviewed by Holger Freyther.

        Avoid leaking errors when reporting GIO errors.

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

2009-03-01  Gustavo Noronha Silva  <gns@gnome.org>

        Reviewed by Holger Freyther.

        Fixes crash when the GIO backend is given the URI for a directory.

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

2009-02-28  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Darin Fisher.

        https://bugs.webkit.org/show_bug.cgi?id=24261
        Fix V8 custom binding scrubbing error.

        Test: fast/dom/TreeWalker/TreeWalker-currentNode.html
        Test: traversal/exception-forwarding.html
        TesT: traversal/stay-within-root.html

        * bindings/v8/custom/V8CSSStyleDeclarationCustom.cpp:
        * bindings/v8/custom/V8NodeIteratorCustom.cpp:
        (WebCore::toV8): Replace v8::Undefined() return value with v8::Null().
        * bindings/v8/custom/V8TreeWalkerCustom.cpp:
        (WebCore::toV8): Ditto.

2009-02-28  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Darin Fisher.

        https://bugs.webkit.org/show_bug.cgi?id=24261
        Fix V8 custom binding scrubbing error.

        Test: fast/dom/CSSStyleDeclaration/css-properties-case-sensitive.html

        * WebCore.xcodeproj/project.pbxproj:
        * bindings/v8/custom/V8CSSStyleDeclarationCustom.cpp:
        (WebCore::cssPropertyName):  Remove dubious checks, left over from
            incomplete conversion of parameter from pointer to pass-by-ref.
        (WebCore::NAMED_PROPERTY_GETTER): Initialize parameter.
        (WebCore::NAMED_PROPERTY_SETTER): Ditto.

2009-02-28  Xan Lopez  <xan@gnome.org>

        Reviewed by Holger Freyther.

        https://bugs.webkit.org/show_bug.cgi?id=24263
        [GTK] ref ResourceHandle until we are finished with it

        Add a ref to the ResourceHandle in startHttp so we can keep it
        alive untill all callbacks have been executed, and unref it when
        soup tells us it's done with the SoupMessage (in
        finishedCallback). Fixes a number of crashes when calling
        didReceiveData whould crash because of the handle dying.

        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::finishedCallback):
        (WebCore::ResourceHandle::startHttp):

2009-02-28  Adam Bergkvist <adam.bergkvist@ericsson.com>

        Reviewed by Alexey Proskuryakov.

        https://bugs.webkit.org/show_bug.cgi?id=24226
        [SOUP] HTTP status text is never set

        Set HTTP status text to SoupMessage reason_phrase.

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

2009-02-28  Dan Bernstein  <mitz@apple.com>

        - fix malformed project file

        * WebCore.xcodeproj/project.pbxproj:

2009-02-28  Dan Bernstein  <mitz@apple.com>

        Reviewed by Oliver Hunt.

        - fix https://bugs.webkit.org/show_bug.cgi?id=23848
          <rdar://problem/6573250> REGRESSION: Crash when mouse cursor moves over a link on www.opportuno.de

        Test: fast/layers/inline-dirty-z-order-lists.html

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::styleWillChange): Moved the code that dirties a
        layer's and its stacking context's z-order lists when the layer's
        z-index or visibility change from here...
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::styleWillChange): ...to here, so that
        it will apply to RenderInline too.

2009-02-27  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by David Hyatt.

        Don't include TextResourceDecoder.h in Document.h

        This undoes inlining of Document::displayStringModifiedByEncoding() to avoid world rebuilds
        when TextResourceDecoder.h is modified. Performance impact is expected to be negligible.

        * dom/Document.cpp:
        (WebCore::Document::displayStringModifiedByEncoding):
        (WebCore::Document::displayBufferModifiedByEncoding):
        * dom/Document.h:
        * WebCore.base.exp:

2009-02-27  Matt Pennig  <pennig@apple.com>

        Reviewed by David Hyatt.

        Resolves: https://bugs.webkit.org/show_bug.cgi?id=24107
        "Fixed elements have 0 as an offsetLeft property"
        
        Code also brings offsetLeft/Top in full conformance with the spec.
        Added two tests, one for fixed-position elements, and one for <html>.
        
        Tests: fast/dom/Element/fixed-position-offset-parent.html
               fast/dom/Element/offsetLeft-offsetTop-html.html

        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::offsetLeft):
        (WebCore::RenderBoxModelObject::offsetTop):

2009-02-27  Dean Jackson  <dino@apple.com>

        Reviewed by Simon Fraser.

        renderer()->hasTransform() returns true for elements
        with perspective, but no transform, so test for transform
        when hit testing. This fixes ASSERT from
        https://bugs.webkit.org/show_bug.cgi?id=24252

        Test: transforms/no_transform_hit_testing.html

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

2009-02-27  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Darin Fisher.

        Fix scrubbing error -- a reversed condition.

        * bindings/v8/ScriptValue.h:
        (WebCore::ScriptValue::clear): Change early exit for empty value, not the opposite.

2009-02-27  Jian Li  <jianli@chromium.org>

        Reviewed by Alexey Proskuryakov.

        Add confirmMessageFromWorkerObject to WorkerObjectProxy.
        https://bugs.webkit.org/show_bug.cgi?id=24152

        * workers/WorkerMessagingProxy.cpp:
        (WebCore::MessageWorkerContextTask::performTask):
        (WebCore::WorkerMessagingProxy::confirmMessageFromWorkerObject):
        * workers/WorkerMessagingProxy.h:
        * workers/WorkerObjectProxy.h:

2009-02-27  Anders Carlsson  <andersca@apple.com>

        Reviewed by David Hyatt.

        Revert r41295, the fix for https://bugs.webkit.org/show_bug.cgi?id=24227 
        because it leads to assertion failures in the Mac port.
        
        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::BitmapImage):
        * platform/graphics/BitmapImage.h:
        (WebCore::BitmapImage::mayFillWithSolidColor):
        * platform/graphics/Image.h:
        (WebCore::Image::mayFillWithSolidColor):
        * platform/graphics/cairo/ImageCairo.cpp:
        (WebCore::BitmapImage::BitmapImage):
        * platform/graphics/cg/ImageCG.cpp:
        (WebCore::BitmapImage::BitmapImage):
        (WebCore::BitmapImage::checkForSolidColor):
        * platform/graphics/qt/ImageQt.cpp:
        (WebCore::BitmapImage::checkForSolidColor):
        * platform/graphics/skia/ImageSkia.cpp:
        (WebCore::BitmapImage::checkForSolidColor):
        * platform/graphics/wx/ImageWx.cpp:
        (WebCore::BitmapImage::checkForSolidColor):

2009-02-27  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

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

        Add a preference to allow universal access from local URLs to mitigate
        some attacks.  Some clients still want to allow this access, so we
        expose this as a preference.

        * WebCore.base.exp:
        * dom/Document.cpp:
        (WebCore::Document::initSecurityContext):
        * page/SecurityOrigin.cpp:
        (WebCore::SecurityOrigin::SecurityOrigin):
        * page/Settings.cpp:
        (WebCore::Settings::Settings):
        (WebCore::Settings::setAllowUniversalAccessFromFileUrls):
        * page/Settings.h:
        (WebCore::Settings::allowUniversalAccessFromFileUrls):

2009-02-27  Adam Treat  <adam.treat@torchmobile.com>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=24229
        If an image has no alpha channel there is no reason to use SourceOver.

        * platform/graphics/qt/ImageQt.cpp:
        (WebCore::Image::drawPattern):
        (WebCore::BitmapImage::draw):

2009-02-27  Adam Treat  <adam.treat@torchmobile.com>

        Reviewed by Eric Seidel and Simon Fraser.

        https://bugs.webkit.org/show_bug.cgi?id=24227
        Ensure that the checkForSolidColor() optimization is correctly triggered
        for all cases of drawPattern.  Currently, the optimization was not triggered
        when the check had not been previously performed via a request for the
        image's NativeImagePtr.

        Implement the Qt version of the checkForSolidColor() method.  Combined with
        the bug fix this reduces the time it takes to draw a repeating background
        of a 1x1 image from ~50msecs to ~0msecs on my machine.

        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::BitmapImage):
        * platform/graphics/BitmapImage.h:
        (WebCore::BitmapImage::mayFillWithSolidColor):
        * platform/graphics/Image.h:
        (WebCore::Image::mayFillWithSolidColor):
        * platform/graphics/cairo/ImageCairo.cpp:
        (WebCore::BitmapImage::BitmapImage):
        * platform/graphics/cg/ImageCG.cpp:
        (WebCore::BitmapImage::BitmapImage):
        (WebCore::BitmapImage::checkForSolidColor):
        * platform/graphics/qt/ImageQt.cpp:
        (WebCore::BitmapImage::checkForSolidColor):
        * platform/graphics/skia/ImageSkia.cpp:
        (WebCore::BitmapImage::checkForSolidColor):
        * platform/graphics/wx/ImageWx.cpp:
        (WebCore::BitmapImage::checkForSolidColor):

2009-02-27  Dirk Schulze  <krit@webkit.org>

        Reviewed by Zack Rusin.

        Added support for gradients and pattern on Fonts for Qt.

        [Qt] gradients and patterns for FontQt
        https://bugs.webkit.org/show_bug.cgi?id=24243

        * platform/graphics/qt/FontQt.cpp:
        (WebCore::Font::drawComplexText):

2009-02-27  Jian Li  <jianli@chromium.org>

        Reviewed by Alexey Proskuryakov.

        WorkerContextProxy::create in WorkerMessagingProxy.cpp should only be provided for non-Chromium platform.
        https://bugs.webkit.org/show_bug.cgi?id=24113

        * workers/WorkerMessagingProxy.cpp:

2009-02-27  Yael Aharon  <yael.aharon@nokia.com>

        Added a refresh button to storage views.

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

        Reviewed by Timothy Hatcher.

        * inspector/front-end/DOMStorageItemsView.js:
        (WebInspector.DOMStorageItemsView):
        (WebInspector.DOMStorageItemsView.prototype.get statusBarItems):
        (WebInspector.DOMStorageItemsView.prototype.update):
        (WebInspector.DOMStorageItemsView.prototype._refreshButtonClicked):
        * inspector/front-end/DatabaseTableView.js:
        (WebInspector.DatabaseTableView):
        (WebInspector.DatabaseTableView.prototype.get statusBarItems):
        (WebInspector.DatabaseTableView.prototype._refreshButtonClicked):
        * inspector/front-end/DatabasesPanel.js:
        (WebInspector.DatabasesPanel):
        (WebInspector.DatabasesPanel.prototype.get statusBarItems):
        (WebInspector.DatabasesPanel.prototype.reset):
        (WebInspector.DatabasesPanel.prototype.showDatabase):
        (WebInspector.DatabasesPanel.prototype.showDOMStorage):
        (WebInspector.DatabasesPanel.prototype._updateSidebarWidth):
        * inspector/front-end/inspector.css:

2009-02-27  Yael Aharon  <yael.aharon@nokia.com>

        Added support for editing/deleting localStorage and sessionStorage items
        directly from Web Inspector.

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

        Reviewed by Timothy Hatcher.

        * WebCore.vcproj/WebCore.vcproj:
        * inspector/front-end/DOMStorageDataGrid.js: Added.
        (WebInspector.DOMStorageDataGrid):
        (WebInspector.DOMStorageDataGrid.prototype._ondblclick):
        (WebInspector.DOMStorageDataGrid.prototype._startEditing):
        (WebInspector.DOMStorageDataGrid.prototype._editingCommitted):
        (WebInspector.DOMStorageDataGrid.prototype._editingCancelled):
        (WebInspector.DOMStorageDataGrid.prototype.deleteSelectedRow):
        * inspector/front-end/DOMStorageItemsView.js:
        (WebInspector.DOMStorageItemsView):
        (WebInspector.DOMStorageItemsView.prototype.get statusBarItems):
        (WebInspector.DOMStorageItemsView.prototype.hide):
        (WebInspector.DOMStorageItemsView.prototype.update):
        (WebInspector.DOMStorageItemsView.prototype._deleteButtonClicked):
        * inspector/front-end/DatabasesPanel.js:
        (WebInspector.DatabasesPanel):
        (WebInspector.DatabasesPanel.prototype.get statusBarItems):
        (WebInspector.DatabasesPanel.prototype.reset):
        (WebInspector.DatabasesPanel.prototype.showDOMStorage):
        (WebInspector.DatabasesPanel.prototype.dataGridForDOMStorage):
        (WebInspector.DatabasesPanel.prototype._updateSidebarWidth):
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.css:
        * inspector/front-end/inspector.html:

2009-02-26  Brett Wilson  <brettw@chromium.org>

        Fix Windows transparency for the Chromium port. Implement a helper
        class for handling transparency on Windows. It allows semitransparent
        ClearType and semitransparent form controls by making new layers in the
        background.

        It also replaces the "ThemeHelper" which allows better
        scaling and transforms on Windows form controls. In addition to the
        functionality that the ThemeHelper did, but additionally handles the
        antialiasing properly so that the form controls aren't composited on a
        white square.

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

        Reviewed by Eric Seidel.

        * platform/graphics/chromium/FontChromiumWin.cpp:
        (WebCore::):
        (WebCore::TransparencyAwareFontPainter::TransparencyAwareFontPainter::TransparencyAwareFontPainter):
        (WebCore::TransparencyAwareFontPainter::TransparencyAwareFontPainter::initializeForGDI):
        (WebCore::TransparencyAwareFontPainter::TransparencyAwareFontPainter::~TransparencyAwareFontPainter):
        (WebCore::TransparencyAwareFontPainter::TransparencyAwareFontPainter::drawGlyphs):
        (WebCore::Font::drawGlyphs):
        * platform/graphics/chromium/ThemeHelperChromiumWin.cpp:
        * platform/graphics/chromium/ThemeHelperChromiumWin.h:
        * platform/graphics/chromium/TransparencyWin.cpp: Added.
        (WebCore::):
        (WebCore::TransparencyWin::OwnedBuffers::OwnedBuffers):
        (WebCore::TransparencyWin::OwnedBuffers::destBitmap):
        (WebCore::TransparencyWin::OwnedBuffers::referenceBitmap):
        (WebCore::TransparencyWin::OwnedBuffers::canHandleSize):
        (WebCore::TransparencyWin::TransparencyWin):
        (WebCore::TransparencyWin::~TransparencyWin):
        (WebCore::TransparencyWin::init):
        (WebCore::TransparencyWin::computeLayerSize):
        (WebCore::TransparencyWin::setupLayer):
        (WebCore::TransparencyWin::setupLayerForNoLayer):
        (WebCore::TransparencyWin::setupLayerForOpaqueCompositeLayer):
        (WebCore::TransparencyWin::setupLayerForTextComposite):
        (WebCore::TransparencyWin::setupLayerForWhiteLayer):
        (WebCore::TransparencyWin::setupTransform):
        (WebCore::TransparencyWin::setupTransformForKeepTransform):
        (WebCore::TransparencyWin::setupTransformForUntransform):
        (WebCore::TransparencyWin::setupTransformForScaleTransform):
        (WebCore::TransparencyWin::setTextCompositeColor):
        (WebCore::TransparencyWin::initializeNewContext):
        (WebCore::TransparencyWin::compositeOpaqueComposite):
        (WebCore::TransparencyWin::compositeTextComposite):
        (WebCore::TransparencyWin::makeLayerOpaque):
        * platform/graphics/chromium/TransparencyWin.h: Added.
        (WebCore::TransparencyWin::):
        (WebCore::TransparencyWin::context):
        (WebCore::TransparencyWin::platformContext):
        (WebCore::TransparencyWin::drawRect):
        * platform/graphics/skia/GraphicsContextSkia.cpp:
        (WebCore::GraphicsContext::endTransparencyLayer):
        * platform/graphics/skia/ImageSkia.cpp:
        (WebCore::paintSkBitmap):
        * rendering/RenderThemeChromiumWin.cpp:
        (WebCore::):
        (WebCore::RenderThemeChromiumWin::paintButton):
        (WebCore::RenderThemeChromiumWin::paintMenuList):
        (WebCore::RenderThemeChromiumWin::paintTextFieldInternal):

2009-02-27  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=24211
        Add ScheduledAction for V8.

        * bindings/v8/ScheduledAction.cpp: Added.
        (WebCore::ScheduledAction::ScheduledAction):
        (WebCore::ScheduledAction::~ScheduledAction):
        (WebCore::ScheduledAction::execute):
        * bindings/v8/ScheduledAction.h: Added.
        (WebCore::ScheduledAction::ScheduledAction):

2009-02-27  Zack Rusin  <zack@kde.org>

        Reviewed by Nikolas Zimmermann.

        Qt: be more reasonable about scrolled lines

        cMouseWheelPixelsPerLineStep is currently a constant set to 13.3. it doesn't
        match our metrics meaning that Qt scrolls by ~2 lines by default which is quite
        irritating. so lets scroll vertically by the Qt set number of lines * Qt default
        single step scroll

        * platform/qt/WheelEventQt.cpp:

2009-02-27  Xan Lopez  <xan@gnome.org>

        Rubber-stamped by Alexey Proskuryakov.

        https://bugs.webkit.org/show_bug.cgi?id=24222
        [GTK] Remove checks for old glib versions

        libsoup, which is a hard dependency, needs at least glib 2.15.3,
        so remove all glib checks for versions older than that.

        * platform/gtk/ContextMenuGtk.cpp:
        (WebCore::ContextMenu::ContextMenu):
        * platform/gtk/ContextMenuItemGtk.cpp:
        (WebCore::ContextMenuItem::setSubMenu):
        * platform/gtk/PopupMenuGtk.cpp:
        (WebCore::PopupMenu::show):
        * platform/gtk/WidgetGtk.cpp:
        (WebCore::Widget::retainPlatformWidget):
        * platform/network/soup/ResourceHandleSoup.cpp:

2009-02-26  Dirk Schulze  <krit@webkit.org>

        Reviewed by Oliver Hunt.

        Added support for Gradients and Patterns on filled or stroked Fonts
        in Cairo. I also added support for globalAlpha on FontCairo.

        [CAIRO] SVG/Canvas fonts miss gradients/pattern support
        https://bugs.webkit.org/show_bug.cgi?id=18617

        * html/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::drawTextInternal):
        * platform/graphics/cairo/FontCairo.cpp:
        (WebCore::Font::drawGlyphs):

2009-02-26  Stephen White  <senorblanco@chromium.org>

        Reviewed by Eric Seidel.

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

        Fix for SVG gradient and pattern text for Chromium/skia. 
        Added accessors for the fill and stroke gradients to
        GraphicsContext.  Changed the paintSkiaText function to take a
        GraphicsContext, so we can check for gradients/patterns. 
        Changed the skiaDrawText function to set the SkPaint shader
        correctly, and to scale up the gradient shader matrix to
        encompass the entire text string.  Also offset each glyph
        separately, rather than transforming the canvas, so that the
        gradient/pattern stays fixed relative to the text origin.

        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::getFillGradient):
        (WebCore::GraphicsContext::getStrokeGradient):
        (WebCore::GraphicsContext::getFillPattern):
        (WebCore::GraphicsContext::getStrokePattern):
        * platform/graphics/GraphicsContext.h:
        * platform/graphics/chromium/FontChromiumWin.cpp:
        (WebCore::Font::drawGlyphs):
        * platform/graphics/chromium/UniscribeHelper.cpp:
        (WebCore::UniscribeHelper::draw):
        * platform/graphics/skia/SkiaFontWin.cpp:
        (WebCore::windowsCanHandleTextDrawing):
        (WebCore::skiaDrawText):
        (WebCore::paintSkiaText):
        * platform/graphics/skia/SkiaFontWin.h:

2009-02-26  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=24208
        Add custom V8 bindings for Navigator, Clipboard, Document, and Node.

        * bindings/v8/custom/V8ClipboardCustom.cpp: Added.
        (WebCore::ACCESSOR_GETTER):
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8DocumentCustom.cpp: Added.
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8NavigatorCustom.cpp: Added.
        (WebCore::ACCESSOR_GETTER):
        * bindings/v8/custom/V8NodeCustom.cpp: Added.
        (WebCore::CALLBACK_FUNC_DECL):

2009-02-26  Gustavo Noronha Silva  <gns@gnome.org>

        Unreviewed build fix for building with GNOME Keyring enabled.

        * platform/network/soup/webkit-soup-auth-dialog.c:
        (show_auth_dialog):

2009-02-26  Xan Lopez  <xan@gnome.org>

        Reviewed by Holger Freyther.

        https://bugs.webkit.org/show_bug.cgi?id=16947
        [GTK] Missing HTTP Auth challenge

        Add HTTP authentication dialog with optional GNOME Keyring
        storage.

        * GNUmakefile.am:
        * platform/network/ResourceHandleInternal.h:
        (WebCore::ResourceHandleInternal::ResourceHandleInternal):
        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::currentToplevelCallback):
        (WebCore::ResourceHandle::startHttp):
        (WebCore::ResourceHandle::start):
        * platform/network/soup/webkit-soup-auth-dialog.c: Added.
        (webkit_soup_auth_dialog_class_init):
        (webkit_soup_auth_dialog_init):
        (webkit_soup_auth_dialog_session_feature_init):
        (free_authData):
        (set_password_callback):
        (response_callback):
        (show_auth_dialog):
        (find_password_callback):
        (session_authenticate):
        (attach):
        * platform/network/soup/webkit-soup-auth-dialog.h: Added.

2009-02-25  Ojan Vafai  <ojan@chromium.org> and Eric Seidel <eric@webkit.org>

        Reviewed by Dave Hyatt.

        After Ojan's positionForCoordinates fix http://trac.webkit.org/changeset/41191
        svg/custom/pointer-events-image.svg and svg/custom/pointer-events-text.svg
        started failing because Ojan's new code was now *correctly* calling through to
        SVG asking for the closest text offset in the last line box, instead of
        just returning the offset at the end of the last line box when clicking below a box.

        But!  The SVG code was wrong, in that it returned the character offset of the last
        character when you asked for a character offset after the end of the box, instead
        it should return the offset *after* the last character.  This patch fixes
        that behavior by reordering the last two clauses in svgCharacterHitsPosition.

        The SVG positionForCoordinates function is still wrong, and I've added some FIXMEs
        to document what's wrong.  I've also cleaned up the code a bit so it's clearer
        what it is doing (which also makes more obvious what's wrong with it).

        * rendering/RenderSVGInlineText.cpp:
        (WebCore::RenderSVGInlineText::positionForCoordinates):
        * rendering/SVGInlineTextBox.cpp:
        (WebCore::SVGInlineTextBoxClosestCharacterToPositionWalker::SVGInlineTextBoxClosestCharacterToPositionWalker):
        (WebCore::SVGInlineTextBoxClosestCharacterToPositionWalker::chunkPortionCallback):
        (WebCore::SVGInlineTextBoxClosestCharacterToPositionWalker::offsetOfHitCharacter):
        (WebCore::SVGInlineTextBox::closestCharacterToPosition):
        (WebCore::SVGInlineTextBox::svgCharacterHitsPosition):

2009-02-26  Darin Fisher  <darin@chromium.org>

        Reviewed by Eric Seidel.

        Minor cleanup of ChromiumBridge:
        Removing unused matchesMIMEType method and s/Javascript/JavaScript/

        * platform/chromium/ChromiumBridge.h:
        * platform/chromium/MimeTypeRegistryChromium.cpp:
        (WebCore::MIMETypeRegistry::isSupportedImageMIMEType):
        (WebCore::MIMETypeRegistry::isSupportedJavaScriptMIMEType):
        (WebCore::MIMETypeRegistry::isSupportedNonImageMIMEType):

2009-02-26  David Hyatt  <hyatt@apple.com>

        Reviewed by Sam Weinig

        Fix text-bottom vertical alignment.  It was incorrectly aligning the bottom of the descent instead of including
        the line-height below the descent.

        Added fast/inline/vertical-align-text-bottom.html

        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::verticalPosition):

2009-02-26  Dirk Schulze  <krit@webkit.org>

        Reviewed by Eric Seidel.

        Make SVG Masking platform independet with the use of ImageBuffer::getImageData(),
        ImageBuffer::putImageData() and GraphicsContext::clipToImageBuffer(). Every platform has
        just to implement this three methods to support SVG Masking now.
 
        Make SVG Masking platform aware
        https://bugs.webkit.org/show_bug.cgi?id=19243

        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * svg/graphics/SVGResourceMasker.cpp:
        (WebCore::SVGResourceMasker::applyMask):
        * svg/graphics/cairo/SVGResourceMaskerCairo.cpp: Removed.
        * svg/graphics/cg/SVGResourceMaskerCg.cpp: Removed.
        * svg/graphics/cg/SVGResourceMaskerCg.mm: Removed.
        * svg/graphics/qt/SVGResourceMaskerQt.cpp: Removed.
        * svg/graphics/skia/SVGResourceMaskerSkia.cpp: Removed.

2009-02-26  Yong Li  <yong.li@torchmobile.com>

        Reviewed by Darin Adler, Antti Koivisto and Alexey Proskuryakov.

        Test: http/tests/misc/slow-preload-cancel.html

        https://bugs.webkit.org/show_bug.cgi?id=24133
        Clear all pending preloads in the DocLoader object when we decide to
        cancel its all requests.

        * loader/DocLoader.cpp:
        (WebCore::DocLoader::clearPendingPreloads):
        * loader/DocLoader.h:
        * loader/loader.cpp:
        (WebCore::Loader::cancelRequests):

2009-02-26  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=24182
        Add NodeFilter, NodeIterator, and TreeWalker custom V8 bindings.

        * bindings/v8/custom/V8NodeFilterCustom.cpp: Added.
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8NodeIteratorCustom.cpp: Added.
        (WebCore::toV8):
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8TreeWalkerCustom.cpp: Added.
        (WebCore::toV8):
        (WebCore::CALLBACK_FUNC_DECL):

2009-02-26  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=23500
        KURL::parse() incorrectly compares its result to original string

        * platform/KURL.cpp: (WebCore::KURL::parse): Take string length into account.

2009-02-26  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Kevin McCullough.

        Manual test for inspector node highlighting.

        * manual-tests/inspector/highlight-nodes.html: Added.

2009-02-16  Anantanarayanan Iyengar  <ananta@chromium.org>

        Reviewed by Darin Fisher.

        https://bugs.webkit.org/show_bug.cgi?id=23973
        ScrollView::scrollContents can be invoked during view shutdown.  In
        this scenario the FrameView::hostWindow method can return NULL, which
        indicates that the frame/page is being destroyed. This causes a crash
        when we try to dereference a NULL hostWindow pointer.  Fix is to add a
        NULL check for this.  

        * platform/ScrollView.cpp:
        (WebCore::ScrollView::scrollContents):

2009-02-26  Rahul Kuchhal  <kuchhal@chromium.org>

        Reviewed by Dave Hyatt.

        https://bugs.webkit.org/show_bug.cgi?id=24003
        Fix a crash caused by unsafe type conversion.

        Test: fast/block/positioning/absolute-in-inline-rtl-4.html

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::calcAbsoluteHorizontalValues):

2009-02-26  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Adam Roben.

        https://bugs.webkit.org/show_bug.cgi?id=24202
        Have drawNodeHighlight clip instead of clearing. This makes it work for
        both Safari and Chromium since Chromium draws the inspector highlighting
        in the same buffer as the page.

        * inspector/InspectorController.cpp:
        (WebCore::quadToPath):
        (WebCore::drawOutlinedQuad):
        (WebCore::drawOutlinedQuadWithClip):
        (WebCore::drawHighlightForBox):

2009-02-26  David Hyatt  <hyatt@apple.com>

        Reviewed by Dan Bernstein & Darin Adler

        Make sure the border/padding are properly omitted at the start of an inline that is a continuation.
        
        Added fast/inline/inline-continuation-borders.html

        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::determineSpacingForFlowBoxes):

2009-02-26  Simon Fraser  <simon.fraser@apple.com>

        Build fix, no review.
        
        Try to fix the wx build after r41218.

        * WebCoreSources.bkl:

2009-02-26  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=19527
        ASSERTION FAILED: containerA && containerB

        Test: fast/dom/Range/bug-19527.html

        * dom/Range.cpp:
        (WebCore::Range::isPointInRange):
        (WebCore::Range::comparePoint):
        Bring the behavior in line with current Firefox, making it impossible for these methods
        to pass a null container to compareBoundaryPoints().

2009-02-26  Jonathon Jongsma  <jonathon@quotidian.org>

        Reviewed by Holger Freyther.

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

        * platform/graphics/gtk/SimpleFontDataGtk.cpp:
        (WebCore::SimpleFontData::smallCapsFontData): the small-caps font data
        should set the computed size rather than the specified size, otherwise
        the caps just get rendered normal size.

2009-02-26  Benjamin Meyer  <benjamin.meyer@torchmobile.com>

        Reviewed by George Staikos.

        https://bugs.webkit.org/show_bug.cgi?id=24062
        QNetworkCookieJar expects the url and not the policy url.  Sending the
        policy url will cause QNetworkCookieJar to behave incorrectly.  One
        example would be a cookie that does not have a path or domain.
        QNetworkCookieJar will use the url it is given to fill in default values.
        This allows setting cookies on the url of the main frame from an iFrame
        when the cookie should be set on the url of the iFrame.

        Originally noticed on http://writer.zoho.com/jsp/home.jsp?serviceurl=/index.do

        * platform/qt/CookieJarQt.cpp:
        (WebCore::setCookies):

2009-02-26  Charles Wei  <charles.wei@torchmobile.com.cn>

        Reviewed by George Staikos.

        make WebKit/Qt compile with SVG disabled

        * WebCore.pro:
        * platform/graphics/qt/FontPlatformDataQt.cpp:

2009-02-25  Gustavo Noronha Silva  <gns@gnome.org>

        Unreviewed build fix. Add WebCore/workers to the list of paths
        searched by the bindings generator perl script.

        * GNUmakefile.am:

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

        Reviewed by Geoffrey Garen.

        Add canvas to the list of RenderObjects that can mark a page as
        visually not empty.

        * rendering/RenderHTMLCanvas.cpp:
        (WebCore::RenderHTMLCanvas::RenderHTMLCanvas):

2009-02-25  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Dave Hyatt.

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::nodeAtPoint): Remove assertion fired when child has layer
        as RenderMedia with controls always has a layer.

2009-02-25  Dan Bernstein  <mitz@apple.com>

        Reviewed by Simon Fraser.

        - fix https://bugs.webkit.org/show_bug.cgi?id=24130
          <rdar://problem/6618196> Paint very slow when horizontally resizing

        Test: fast/gradients/background-clipped.html

        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintFillLayerExtended): Intersect the
        destination rectangle passed to drawTiledImage() with the dirty
        rectangle. This makes it more likely for the destination rect to be
        contained in a single tile rect, which results in a faster code path
        being taken down the road (just drawing a single tile instead of
        tiling).

2009-02-25  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Eric Seidel.

        Fix test regressions from positionForCoordinates patch.
        https://bugs.webkit.org/show_bug.cgi?id=24148

        * rendering/RenderBlock.cpp:
        (WebCore::positionForPointWithInlineChildren):
        Remove ASSERT that placeholder text codepath is hitting.

2009-02-25  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Beth Dakin.

        Bug 24143: Crash occurs at WebCore::AccessibilityTable::isTableExposableThroughAccessibility() when applying a link in GMail
        https://bugs.webkit.org/show_bug.cgi?id=24143

        When an AX object is marked dirty, do not create AX elements while going up the parent chain.
        Do not allow AXRenderObjects to remove their own IDs from the cache, all the cache to do that work
        Make sure the AXObjectWrapper's have an object before calling them
        In AXObjectCache, change get -> getOrCreate. Use get() to only retrieve an element if it exists

        Test: platform/mac-snowleopard/accessibility/table-updating.html

        * WebCore.base.exp:
        * page/AXObjectCache.cpp:
        (WebCore::AXObjectCache::~AXObjectCache):
        (WebCore::AXObjectCache::get):
        (WebCore::AXObjectCache::getOrCreate):
        (WebCore::AXObjectCache::removeAXID):
        (WebCore::AXObjectCache::handleActiveDescendantChanged):
        (WebCore::AXObjectCache::handleAriaRoleChanged):
        * page/AXObjectCache.h:
        * page/AccessibilityImageMapLink.cpp:
        (WebCore::AccessibilityImageMapLink::parentObject):
        * page/AccessibilityListBox.cpp:
        (WebCore::AccessibilityListBox::listBoxOptionAccessibilityObject):
        (WebCore::AccessibilityListBox::doAccessibilityHitTest):
        * page/AccessibilityListBoxOption.cpp:
        (WebCore::AccessibilityListBoxOption::elementRect):
        (WebCore::AccessibilityListBoxOption::parentObject):
        * page/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::detach):
        (WebCore::AccessibilityObject::parentObjectIfExists):
        (WebCore::replacedNodeNeedsCharacter):
        (WebCore::AccessibilityObject::accessibilityObjectForPosition):
        * page/AccessibilityObject.h:
        * page/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::firstChild):
        (WebCore::AccessibilityRenderObject::lastChild):
        (WebCore::AccessibilityRenderObject::previousSibling):
        (WebCore::AccessibilityRenderObject::nextSibling):
        (WebCore::AccessibilityRenderObject::parentObjectIfExists):
        (WebCore::AccessibilityRenderObject::parentObject):
        (WebCore::AccessibilityRenderObject::isAttachment):
        (WebCore::AccessibilityRenderObject::headingLevel):
        (WebCore::AccessibilityRenderObject::anchorElement):
        (WebCore::AccessibilityRenderObject::menuForMenuButton):
        (WebCore::AccessibilityRenderObject::menuButtonForMenu):
        (WebCore::AccessibilityRenderObject::checkboxOrRadioRect):
        (WebCore::AccessibilityRenderObject::internalLinkElement):
        (WebCore::AccessibilityRenderObject::addRadioButtonGroupMembers):
        (WebCore::AccessibilityRenderObject::titleUIElement):
        (WebCore::AccessibilityRenderObject::accessibilityIsIgnored):
        (WebCore::AccessibilityRenderObject::accessibilityParentForImageMap):
        (WebCore::AccessibilityRenderObject::getDocumentLinks):
        (WebCore::AccessibilityRenderObject::doAccessibilityHitTest):
        (WebCore::AccessibilityRenderObject::focusedUIElement):
        (WebCore::AccessibilityRenderObject::activeDescendant):
        (WebCore::AccessibilityRenderObject::observableObject):
        (WebCore::AccessibilityRenderObject::childrenChanged):
        (WebCore::AccessibilityRenderObject::addChildren):
        * page/AccessibilityRenderObject.h:
        (WebCore::AccessibilityRenderObject::setRenderObject):
        * page/AccessibilityTable.cpp:
        (WebCore::AccessibilityTable::addChildren):
        (WebCore::AccessibilityTable::headerContainer):
        (WebCore::AccessibilityTable::cellForColumnAndRow):
        * page/AccessibilityTableCell.cpp:
        (WebCore::AccessibilityTableCell::isTableCell):
        (WebCore::AccessibilityTableCell::titleUIElement):
        * page/AccessibilityTableColumn.cpp:
        (WebCore::AccessibilityTableColumn::headerObjectForSection):
        * page/AccessibilityTableRow.cpp:
        (WebCore::AccessibilityTableRow::isTableRow):
        * page/gtk/AccessibilityObjectWrapperAtk.cpp:
        * page/mac/AXObjectCacheMac.mm:
        (WebCore::AXObjectCache::postNotification):
        (WebCore::AXObjectCache::postNotificationToElement):
        * page/mac/AccessibilityObjectWrapper.mm:
        (textMarkerForVisiblePosition):
        (AXLinkElementForNode):
        (nsStringForReplacedNode):
        (-[AccessibilityObjectWrapper doAXAttributedStringForTextMarkerRange:]):
        (-[AccessibilityObjectWrapper accessibilityActionNames]):
        (-[AccessibilityObjectWrapper accessibilityAttributeNames]):
        (-[AccessibilityObjectWrapper accessibilityFocusedUIElement]):
        (-[AccessibilityObjectWrapper accessibilityHitTest:]):
        (-[AccessibilityObjectWrapper accessibilityIsAttributeSettable:]):
        (-[AccessibilityObjectWrapper accessibilityIsIgnored]):
        (-[AccessibilityObjectWrapper accessibilityParameterizedAttributeNames]):
        (-[AccessibilityObjectWrapper accessibilityPerformPressAction]):
        (-[AccessibilityObjectWrapper accessibilityPerformAction:]):
        (-[AccessibilityObjectWrapper accessibilitySetValue:forAttribute:]):
        (-[AccessibilityObjectWrapper _accessibilityParentForSubview:]):
        (-[AccessibilityObjectWrapper accessibilityIndexOfChild:]):
        (-[AccessibilityObjectWrapper accessibilityArrayAttributeCount:]):
        (-[AccessibilityObjectWrapper accessibilityArrayAttributeValues:index:maxCount:]):

2009-02-25  Beth Dakin  <bdakin@apple.com>

        Reviewed by Geoff Garen.

        Re-working of <rdar://problem/6487249> repro crash in 
        WebCore::CSSParser::parseFillImage copying entire contents of this 
        page
        -and corresponding: https://bugs.webkit.org/show_bug.cgi?id=24172

        Fixes a bunch of layout test failures I caused!

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::parseContent):
        (WebCore::CSSParser::parseFillImage):
        (WebCore::CSSParser::parseFontFaceSrc):
        (WebCore::CSSParser::parseBorderImage):

2009-02-25  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=24174
        Add more V8 custom bindings.

        * bindings/v8/custom/V8CSSStyleDeclarationCustom.cpp: Added.
        (WebCore::hasCSSPropertyNamePrefix):
        (WebCore::cssPropertyName):
        (WebCore::NAMED_PROPERTY_GETTER):
        (WebCore::NAMED_PROPERTY_SETTER):
        * bindings/v8/custom/V8DOMStringListCustom.cpp: Added.
        (WebCore::INDEXED_PROPERTY_GETTER):
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8EventCustom.cpp: Added.
        (WebCore::ACCESSOR_SETTER):
        (WebCore::ACCESSOR_GETTER):
        * bindings/v8/custom/V8HTMLDocumentCustom.cpp: Added.
        (WebCore::NAMED_PROPERTY_DELETER):
        (WebCore::NAMED_PROPERTY_SETTER):
        (WebCore::NAMED_PROPERTY_GETTER):
        * bindings/v8/custom/V8HTMLFrameSetElementCustom.cpp: Added.
        (WebCore::NAMED_PROPERTY_GETTER):
        * bindings/v8/custom/V8NamedNodeMapCustom.cpp: Added.
        (WebCore::INDEXED_PROPERTY_GETTER):
        (WebCore::NAMED_PROPERTY_GETTER):
        * bindings/v8/custom/V8NodeListCustom.cpp: Added.
        (WebCore::NAMED_PROPERTY_GETTER):
        * bindings/v8/custom/V8StyleSheetListCustom.cpp: Added.
        (WebCore::NAMED_PROPERTY_GETTER):

2009-02-25  Scott Violet  <sky@google.com>

        Reviewed by Dave Hyatt.

        https://bugs.webkit.org/show_bug.cgi?id=24171
        Provides a RenderTheme method for getting the scroll bar size and
        changes RenderListBox to use it. RenderTheme returns a size of regular,
        and Mac's override to return small. Changes ScrollbarThemeChromium to
        use the scrollbarsize of the scrollbar when getting the size
        instead of passing in no-args.

        * platform/chromium/ScrollbarThemeChromium.cpp:
        (WebCore::ScrollbarThemeChromium::trackRect):
        (WebCore::ScrollbarThemeChromium::buttonSize):
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::createScrollbar):
        * rendering/RenderTheme.h:
        (WebCore::RenderTheme::scrollbarControlSizeForPart):
        * rendering/RenderThemeChromiumMac.h:
        (WebCore::RenderThemeChromiumMac::scrollbarControlSizeForPart):
        * rendering/RenderThemeMac.h:
        (WebCore::RenderThemeMac::scrollbarControlSizeForPart):

2009-02-25  Beth Dakin  <bdakin@apple.com>

        Reviewed by Darin Adler.

        Fix for <rdar://problem/6487249> repro crash in 
        WebCore::CSSParser::parseFillImage copying entire contents of this 
        page
        -and corresponding: https://bugs.webkit.org/show_bug.cgi?id=24172

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue): Null-check m_styleSheet

2009-02-25  Adam Treat  <adam.treat@torchmobile.com>

        Fix the Qt build.

        * WebCore.pro:

2009-02-25  Jan Michael Alonzo  <jmalonzo@webkit.org>

        Gtk build fix. Not reviewed.

        Add files to the build per r41218.
        Rename WebkitPoint.h to WebKitPoint.h in DOMWindow.cpp

        * GNUmakefile.am:
        * page/DOMWindow.cpp:

2009-02-25  Zan Dobersek  <zandobersek@gmail.com>

        Reviewed by Alexey Proskuryakov.

        https://bugs.webkit.org/show_bug.cgi?id=24043
        When faced with URLs with unsupported protocol on Gtk port,
        report the error through an idle function and return true, so
        a proper resource handle is created.

        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::reportUnknownProtocolError):
        (WebCore::ResourceHandle::start):

2009-02-25  Steve Falkenburg  <sfalken@apple.com>

        Windows build fix.
        Use struct to forward declare ResourceRequest.

        * history/HistoryItem.h:
        * inspector/InspectorController.h:
        * loader/DocumentThreadableLoader.h:
        * loader/FrameLoaderClient.h:
        * loader/MainResourceLoader.h:
        * loader/SubresourceLoader.h:
        * loader/SubresourceLoaderClient.h:
        * loader/ThreadableLoader.h:
        * loader/WorkerThreadableLoader.h:
        * platform/CrossThreadCopier.h:
        * platform/network/ResourceHandle.h:
        * platform/network/ResourceHandleClient.h:
        * platform/network/ResourceRequestBase.h:
        * platform/network/cf/ResourceRequestCFNet.h:
        * xml/XMLHttpRequest.h:

2009-02-25  Steve Falkenburg  <sfalken@apple.com>

        Partial Windows build fix.
        
        * DerivedSources.cpp:
        * WebCore.vcproj/WebCore.vcproj:

2009-02-25  Dirk Schulze  <krit@webkit.org>

        Reviewed by Oliver Hunt.

        Ported arcTo to Qt. Qt has no native support for arcTo. This changes
        calculate the behavior of arcTo and draws it with lineTo and arc.

        [QT] implement Canvas arcTo
        https://bugs.webkit.org/show_bug.cgi?id=23873

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

2009-02-25  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein

        Remove idl files from Resources, and sort.
        
        * WebCore.xcodeproj/project.pbxproj:

2009-02-25  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Simon Fraser.

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

        Added webkitConvertPointFromNodeToPage and webkitConvertPointFromPageToNode on
        the window object. Also added WebKitPoint object, which is passed in and out
        of these functions.

        Test: fast/dom/Window/webkitConvertPoint.html

        * DerivedSources.make:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * bindings/js/JSDOMWindowBase.cpp:
        (jsDOMWindowBaseWebKitPoint):
        (setJSDOMWindowBaseWebKitPoint):
        * bindings/js/JSWebKitPointConstructor.cpp: Added.
        (WebCore::):
        (WebCore::JSWebKitPointConstructor::JSWebKitPointConstructor):
        (WebCore::constructWebKitPoint):
        (WebCore::JSWebKitPointConstructor::getConstructData):
        * bindings/js/JSWebKitPointConstructor.h: Added.
        (WebCore::JSWebKitPointConstructor::classInfo):
        * dom/Node.cpp:
        (WebCore::Node::convertToPage):
        (WebCore::Node::convertFromPage):
        * dom/Node.h:
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::webkitConvertPointFromNodeToPage):
        (WebCore::DOMWindow::webkitConvertPointFromPageToNode):
        * page/DOMWindow.h:
        * page/DOMWindow.idl:
        * page/WebKitPoint.h: Added.
        (WebCore::WebKitPoint::create):
        (WebCore::WebKitPoint::x):
        (WebCore::WebKitPoint::y):
        (WebCore::WebKitPoint::setX):
        (WebCore::WebKitPoint::setY):
        (WebCore::WebKitPoint::WebKitPoint):
        * page/WebKitPoint.idl: Added.

2009-02-25  Jian Li  <jianli@chromium.org>

        Reviewed by Alexey Proskuryakov.

        Remove "#if ENABLE(WORKERS)" wrap from CrossThreadCopier files.
        https://bugs.webkit.org/show_bug.cgi?id=24145

        * platform/CrossThreadCopier.cpp:
        * platform/CrossThreadCopier.h:

2009-02-25  David Levin  <levin@chromium.org>

        Reviewed by Alexey Proskuryakov.

        Bug 23688: ThreadableLoader needs a sync implementation for Workers.
        <https://bugs.webkit.org/show_bug.cgi?id=23688>

        No observable change in behavior, so no test.

        * loader/ThreadableLoader.cpp:
        (WebCore::ThreadableLoader::loadResourceSynchronously):
        * loader/ThreadableLoaderClientWrapper.h:
        (WebCore::ThreadableLoaderClientWrapper::clearClient):
        (WebCore::ThreadableLoaderClientWrapper::done):
        (WebCore::ThreadableLoaderClientWrapper::didFinishLoading):
        (WebCore::ThreadableLoaderClientWrapper::didFail):
        (WebCore::ThreadableLoaderClientWrapper::didFailRedirectCheck):
        (WebCore::ThreadableLoaderClientWrapper::ThreadableLoaderClientWrapper):
        Expose whether the loader is done (based on what callbacks were done).

        * loader/WorkerThreadableLoader.cpp:
        (WebCore::WorkerThreadableLoader::WorkerThreadableLoader):
        (WebCore::WorkerThreadableLoader::loadResourceSynchronously):
        Each loader is given its own mode so that only its callbacks get through the run loop.

        The xhr spec says that the readystatechange events are synchronous, so in the case of a
        nested sync xhr no readystatechange events should be fired for the outer xhr.

        (WebCore::WorkerThreadableLoader::MainThreadBridge::MainThreadBridge):

        * loader/WorkerThreadableLoader.h:
        (WebCore::WorkerThreadableLoader::create):
        (WebCore::WorkerThreadableLoader::done):

        * workers/WorkerRunLoop.cpp:
        (WebCore::WorkerRunLoop::WorkerRunLoop):
        * workers/WorkerRunLoop.h:
        (WebCore::WorkerRunLoop::createUniqueId):
        Simple method to create a uniqueId on demand with respect to the run loop.

        * workers/WorkerThread.h:

2009-02-25  David Levin  <levin@chromium.org>

        Reviewed by Alexey Proskuryakov.

        Bug 24089: ThreadableLoader::loadResourceSynchronously should do callbacks like the async code.
        <https://bugs.webkit.org/show_bug.cgi?id=24089>

        Make threadable loader callbacks to happen during the sync load call.

        Changes the behavior of sync xhr for insecure redirects in two ways:
        + Sends an error event instead of an abort event (which is the same as async xhr's behavior).
        + Throws a network exception which is what other browsers do and what the spec
        says to do (http://www.w3.org/TR/XMLHttpRequest/).

        * loader/DocumentThreadableLoader.cpp:
        (WebCore::DocumentThreadableLoader::loadResourceSynchronously):
        * loader/DocumentThreadableLoader.h:
        * loader/ThreadableLoader.cpp:
        (WebCore::ThreadableLoader::loadResourceSynchronously):
        * loader/ThreadableLoader.h:
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::XMLHttpRequest):
        (WebCore::XMLHttpRequest::loadRequestSynchronously):
        (WebCore::XMLHttpRequest::loadRequestAsynchronously):
        (WebCore::XMLHttpRequest::didFail):
        (WebCore::XMLHttpRequest::didFailRedirectCheck):
        * xml/XMLHttpRequest.h:

2009-02-24  Chris Marrin  <cmarrin@apple.com>

        Reviewed by David Hyatt.

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

        Added logic to correctly hit test accelerated layers.

        Tests: animations/animation-hit-test-transform.html
               animations/animation-hit-test.html
               transitions/transition-hit-test-transform.html
               transitions/transition-hit-test.html

        * page/animation/KeyframeAnimation.cpp:
        (WebCore::KeyframeAnimation::animate):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::hitTestLayer):
        (WebCore::RenderLayer::updateClipRects):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateGraphicsLayerGeometry):

2009-02-25  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=24067
        REGRESSION: Crash in WebCore::Document::initSecurityContext

        The crash started to happen when we removed a check for frame->document() being null.
        However, the original document shouldn't be null here, because it is needed to alias
        security origins. So, this patch fixes the crash by correcting security origin behavior.

        Test: http/tests/security/aboutBlank/window-open-self-about-blank.html
        This tests for not crashing, and for inheriting the domain from the document being replaced.
        Preserving the aliasing cannot be tested for automatically, because we'd need a non-trivial
        domain to remove a prefix from.

        * loader/FrameLoader.cpp: (WebCore::FrameLoader::begin): Create a new document before
        clearing the frame, so that Document::initSecurityContext() could access the old one.

2009-02-25  Jay Campan  <jcampan@google.com>

        Reviewed by Darin Fisher.

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

        Items in drop-downs were not painted correctly.  Makes sure the
        PopupListBox invalidates in the coordinates of the window as this is
        FramelessScrollView::invalidateRect paints to.

        * platform/chromium/PopupMenuChromium.cpp:
        (WebCore::PopupListBox::invalidateRow):

2009-02-24  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Anders Carlsson

        https://bugs.webkit.org/show_bug.cgi?id=15081
        
        Make display:none work for applet, emebed and object elements
        by calling rendererIsNeeded() on superclasses.

        Tests: fast/replaced/applet-display-none.html
               fast/replaced/embed-display-none.html
               fast/replaced/object-display-none.html

        * html/HTMLAppletElement.cpp:
        (WebCore::HTMLAppletElement::rendererIsNeeded):
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::rendererIsNeeded):
        * html/HTMLEmbedElement.cpp:
        (WebCore::HTMLEmbedElement::rendererIsNeeded):
        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::rendererIsNeeded):

2009-02-24  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dave Hyatt

        https://bugs.webkit.org/show_bug.cgi?id=24137
        
        Fix localToAbsolute() and absoluteToLocal() to map points through 3d transforms,
        taking perspective and transform-style: preserve-3d into account.
        
        In order to support transform-style: preserve-3d, which keeps elements in a
        3d space, we have to carry along an accumulated matrix in TransformState.
        We also need to apply the perspective from the parent, if any, with the
        appropriate origin.

        * GNUmakefile.am:
        * WebCore.base.exp:
        * WebCore.pro:
        * WebCore.scons:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * platform/graphics/transforms/TransformationMatrix.cpp:
        (WebCore::TransformationMatrix::translate):
        (WebCore::TransformationMatrix::translate3d):
        (WebCore::TransformationMatrix::translateRight3d):
        * platform/graphics/transforms/TransformationMatrix.h:
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::mapLocalToAbsolutePoint):
        (WebCore::RenderBox::mapAbsoluteToLocalPoint):
        * rendering/RenderBox.h:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateTransform):
        (WebCore::RenderLayer::perspectiveTransform):
        (WebCore::RenderLayer::perspectiveOrigin):
        * rendering/RenderLayer.h:
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateGraphicsLayerGeometry):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::requiresCompositingLayerForTransform):
        (WebCore::RenderLayerCompositor::layerHas3DContent):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::localToAbsolute):
        (WebCore::RenderObject::absoluteToLocal):
        (WebCore::RenderObject::mapLocalToAbsolutePoint):
        (WebCore::RenderObject::mapAbsoluteToLocalPoint):
        * rendering/RenderObject.h:
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::mapLocalToAbsolutePoint):
        (WebCore::RenderTableCell::mapAbsoluteToLocalPoint):
        * rendering/RenderTableCell.h:
        * rendering/RenderView.cpp:
        (WebCore::RenderView::mapLocalToAbsolutePoint):
        (WebCore::RenderView::mapAbsoluteToLocalPoint):
        * rendering/RenderView.h:
        * rendering/TransformState.cpp: Added.
        (WebCore::TransformState::move):
        (WebCore::TransformState::applyTransform):
        (WebCore::TransformState::flatten):
        * rendering/TransformState.h: Added.
        (WebCore::TransformState::):
        (WebCore::TransformState::TransformState):
        (WebCore::TransformState::move):
        * rendering/style/RenderStyle.h:
        (WebCore::InheritedFlags::hasPerspective):

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

        Reviewed by David Hyatt.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=23990
        Regression (r40837): JavaScript image popup doesn't work

        Make the getClientRects and getBoundingClientRect methods return rects
        relative to the viewport.

        Test: fast/dom/getBoundingClientRect-getClientRects-relative-to-viewport.html

        * dom/Element.cpp:
        (WebCore::Element::getClientRects):
        (WebCore::Element::getBoundingClientRect):

2009-02-24  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Eric Seidel.

        SVG pages don't have a body or an html element! 
        Don't return early if there is no body.

        * editing/VisiblePosition.cpp:
        (WebCore::VisiblePosition::canonicalPosition):

2009-02-23  David Hyatt  <hyatt@apple.com>

        Reviewed by Eric Seidel

        https://bugs.webkit.org/show_bug.cgi?id=23740, painting order wrong for normal flow elements with overflow: hidden
        
        This patch reworks the painting of overflow.  There is now the concept of a "self-painting layer."  All
        layers are considered to be self-painting except for overflow layers that are normal flow (and that don't have
        reflections or masks).
        
        If an overflow layer is not self-painting, then it ends up painted by its parent just like any other normal flow object.
        The only difference is that the clip has to be pushed and popped when painting the object's children.
        
        The lightweight clipping scheme used for controls has been extended to cover overflow now in this simplified case.  With
        the code consolidated into reusable push/pop functions, all of the renderers that use overflow have been patched to
        use the new functions.
        
        Hit testing has also been patched to check the overflow clip rect first before recurring into children.
        
        Scrollbar paint has been moved into RenderBlock for now, since none of the table objects support scrollbars
        yet, and scrollbar hit testing was already there anyway.  Now the two code paths are more symmetrical.
        
        Masks are now treated like normal flow layers (just like reflections).

        A couple of test cases have been added to fast/overflow to test the stacking order. 

        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::nodeAtPoint):
        (WebCore::InlineFlowBox::paint):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::repaintOverhangingFloats):
        (WebCore::RenderBlock::paint):
        (WebCore::RenderBlock::paintChildren):
        (WebCore::RenderBlock::paintObject):
        (WebCore::RenderBlock::paintFloats):
        (WebCore::RenderBlock::insertFloatingObject):
        (WebCore::RenderBlock::floatRect):
        (WebCore::RenderBlock::lowestPosition):
        (WebCore::RenderBlock::rightmostPosition):
        (WebCore::RenderBlock::leftmostPosition):
        (WebCore::RenderBlock::addOverhangingFloats):
        (WebCore::RenderBlock::nodeAtPoint):
        (WebCore::RenderBlock::hitTestContents):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::nodeAtPoint):
        (WebCore::RenderBox::pushContentsClip):
        (WebCore::RenderBox::popContentsClip):
        * rendering/RenderBox.h:
        (WebCore::RenderBox::paintObject):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::hasSelfPaintingLayer):
        * rendering/RenderBoxModelObject.h:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paintLayer):
        (WebCore::RenderLayer::hitTestLayer):
        (WebCore::RenderLayer::shouldBeNormalFlowOnly):
        (WebCore::RenderLayer::isSelfPaintingLayer):
        * rendering/RenderLayer.h:
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::paint):
        (WebCore::RenderTable::paintObject):
        (WebCore::RenderTable::nodeAtPoint):
        * rendering/RenderTable.h:
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::paint):
        * rendering/RenderTableRow.cpp:
        (WebCore::RenderTableRow::nodeAtPoint):
        (WebCore::RenderTableRow::paint):
        * rendering/RenderTableRow.h:
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::paint):
        (WebCore::RenderTableSection::paintObject):
        (WebCore::RenderTableSection::nodeAtPoint):
        * rendering/RenderTableSection.h:
        * rendering/RenderTreeAsText.cpp:
        (WebCore::write):
        (WebCore::writeLayers):

2009-02-24  David Levin  <levin@chromium.org>

        Reviewed by NOBODY (build fix).

        Attempted build fix for wx-mac.

        * WebCoreSources.bkl:

2009-02-24  David Levin  <levin@chromium.org>

        Reviewed by NOBODY (build fix).

        Attempted build fixes for qt-linux and wx-mac.

        * WebCore.pro:
        * webcore-base.bkl:

2009-02-24  Ojan Vafai  <ojan@dhcp-172-31-134-214.sfo.corp.google.com>

        Reviewed by Sam Weinig.

        Fix null pointer error. If the node is the Document, then ownerDocument() 
        returns null, document() does not.

        * editing/VisiblePosition.cpp:
        (WebCore::VisiblePosition::canonicalPosition):

2009-02-24  Jian Li  <jianli@chromium.org>

        Reviewed by NOBODY (attempted build fixes).

        Fix build break for Windows and Linux.

        * GNUmakefile.am:
        * WebCore.vcproj/WebCore.vcproj:

2009-02-24  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=24131
        Fix-up COM/RefCounted dichotomy in Chromium port.

        * page/chromium/AccessibilityObjectWrapper.h:
        (WebCore::AccessibilityObjectWrapper::AccessibilityObjectWrapper): Added
        explicit setting of recount.

2009-02-24  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=24141
        Add clarity to V8 interceptor helper function.

        * bindings/v8/custom/V8HTMLPlugInElementCustom.cpp:
        (WebCore::NAMED_PROPERTY_GETTER): Renamed to notHandledByInterceptor.
        (WebCore::NAMED_PROPERTY_SETTER): Ditto.
        (WebCore::INDEXED_PROPERTY_GETTER): Ditto.
        (WebCore::INDEXED_PROPERTY_SETTER): Ditto.

2009-02-24  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Eric Seidel

        Minor numeric cleanup: convert float literals to doubles.
        
        * platform/graphics/transforms/RotateTransformOperation.cpp:
        (WebCore::RotateTransformOperation::blend):

2009-02-24  Mark Mentovai  <mark@chromium.org>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=24139
        Add missing include.

        * bindings/v8/ScriptInstance.h:

2009-02-24  Jian Li  <jianli@chromium.org>

        Reviewed by Alexey Proskuryakov.

        Move worker related files from dom directory to worker directory under WebCore.
        https://bugs.webkit.org/show_bug.cgi?id=24123

        * DerivedSources.make:
        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.scons:
        * WebCore.vcproj/MigrateIDLAndScripts:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/CrossThreadCopier.cpp: Renamed from WebCore/dom/CrossThreadCopier.cpp.
        * platform/CrossThreadCopier.h: Renamed from WebCore/dom/CrossThreadCopier.h.
        * workers/GenericWorkerTask.h: Renamed from WebCore/dom/GenericWorkerTask.h.
        * workers/Worker.cpp: Renamed from WebCore/dom/Worker.cpp.
        * workers/Worker.h: Renamed from WebCore/dom/Worker.h.
        * workers/Worker.idl: Renamed from WebCore/dom/Worker.idl.
        * workers/WorkerContext.cpp: Renamed from WebCore/dom/WorkerContext.cpp.
        * workers/WorkerContext.h: Renamed from WebCore/dom/WorkerContext.h.
        * workers/WorkerContext.idl: Renamed from WebCore/dom/WorkerContext.idl.
        * workers/WorkerContextProxy.h: Renamed from WebCore/dom/WorkerContextProxy.h.
        * workers/WorkerLocation.cpp: Renamed from WebCore/dom/WorkerLocation.cpp.
        * workers/WorkerLocation.h: Renamed from WebCore/dom/WorkerLocation.h.
        * workers/WorkerLocation.idl: Renamed from WebCore/dom/WorkerLocation.idl.
        * workers/WorkerMessagingProxy.cpp: Renamed from WebCore/dom/WorkerMessagingProxy.cpp.
        * workers/WorkerMessagingProxy.h: Renamed from WebCore/dom/WorkerMessagingProxy.h.
        * workers/WorkerObjectProxy.h: Renamed from WebCore/dom/WorkerObjectProxy.h.
        * workers/WorkerRunLoop.cpp: Renamed from WebCore/dom/WorkerRunLoop.cpp.
        * workers/WorkerRunLoop.h: Renamed from WebCore/dom/WorkerRunLoop.h.
        * workers/WorkerThread.cpp: Renamed from WebCore/dom/WorkerThread.cpp.
        * workers/WorkerThread.h: Renamed from WebCore/dom/WorkerThread.h.

2009-02-05  Ojan Vafai  <ojan@chromium.org> and Eric Seidel <eric@webkit.org>

        Reviewed by Dave Hyatt.

        Make cursor positions match IE6/IE7/FF3 when clicking in margins/padding
        around divs inside editable regions.
        https://bugs.webkit.org/show_bug.cgi?id=23605

        Fix clicks outside editable regions from focusing the editable region.
        https://bugs.webkit.org/show_bug.cgi?id=23607

        Removed editing/selection/contenteditable-click-outside.html as it's
        not as useful as our new tests.

        Clean up RenderBlock::positionForCoordinates to remove dead code,
        duplicate code, and generally make it more readable.

        Tests: editing/selection/click-in-margins-inside-editable-div.html
               editing/selection/click-in-padding-with-multiple-line-boxes.html
               editing/selection/click-outside-editable-div.html

        * editing/VisiblePosition.cpp:
        (WebCore::VisiblePosition::canonicalPosition):
        * rendering/RenderBlock.cpp:
        (WebCore::positionForPointRespectingEditingBoundaries):
        (WebCore::positionForPointWithInlineChildren):
        (WebCore::RenderBlock::positionForCoordinates):
        (WebCore::RenderBlock::updateFirstLetter):

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

        Reviewed by Geoffrey Garen.

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

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

2009-02-24  Simon Fraser  <simon.fraser@apple.com>

        Fix build when ACCELERATED_COMPOSITING is turned on
        (overflowList() -> normalFlowList()).
    
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::hasNonCompositingContent):
        (WebCore::RenderLayerBacking::paintIntoLayer):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::calculateCompositedBounds):
        (WebCore::RenderLayerCompositor::computeCompositingRequirements):
        (WebCore::RenderLayerCompositor::rebuildCompositingLayerTree):
        (WebCore::RenderLayerCompositor::recursiveRepaintLayerRect):
        (WebCore::RenderLayerCompositor::layerHas3DContent):

2009-02-24  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Darin Adler
        
        https://bugs.webkit.org/show_bug.cgi?id=24135
        
        Round the FloatPoint returned by absoluteToLocal(), rather than
        truncating it.

        * dom/MouseRelatedEvent.cpp:
        (WebCore::MouseRelatedEvent::receivedTarget):

2009-02-24  Beth Dakin  <bdakin@apple.com>

        Reviewed by Sam Weinig.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=24004 REGRESSION: 
        Ordered list item marker misaligned when line height is not 1.2 
        -and corresponding <rdar://problem/6602506>

        This is a regression from http://trac.webkit.org/changeset/40880 
        where createInlineBox was taken off of RenderObject and moved to 
        RenderBox. The problem was that the RenderBox version still needs 
        to be virtual because there is still an existing implementation in 
        RenderListMarker. 

        * rendering/RenderBox.h:
        * rendering/RenderListMarker.cpp:
        (WebCore::RenderListMarker::createInlineBox):
        * rendering/RenderListMarker.h:

2009-02-24  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=24128
        Upstream more V8 custom bindings: constructors, XSLTProcessor.

        * bindings/v8/custom/V8DOMParserConstructor.cpp: Added.
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8MessageChannelConstructor.cpp: Added.
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8WebKitCSSMatrixConstructor.cpp: Added.
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8XMLSerializerConstructor.cpp: Added.
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8XPathEvaluatorConstructor.cpp: Added.
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8XSLTProcessorCustom.cpp: Added.
        (WebCore::CALLBACK_FUNC_DECL):

2009-02-24  David Levin  <levin@chromium.org>

        Reviewed by Alexey Proskuryakov.

        Bug 24090: WorkerThreadableLoader needs to be able to post tasks for a mode.
        <https://bugs.webkit.org/show_bug.cgi?id=24090>

        No observable change in behavior, so no test.

        * dom/WorkerMessagingProxy.cpp:
        (WebCore::WorkerMessagingProxy::postMessageToWorkerContext):
        (WebCore::WorkerMessagingProxy::postTaskToWorkerContext):
        Fixed the bug that m_unconfirmedMessageCount was getting incremented for non-message tasks.

        (WebCore::WorkerMessagingProxy::postTaskForModeToWorkerContext):

        * dom/WorkerMessagingProxy.h:
        * loader/ThreadableLoader.cpp:
        (WebCore::ThreadableLoader::create):
        * loader/WorkerThreadableLoader.cpp:
        (WebCore::WorkerThreadableLoader::WorkerThreadableLoader):
        (WebCore::WorkerThreadableLoader::MainThreadBridge::MainThreadBridge):
        (WebCore::WorkerThreadableLoader::MainThreadBridge::didSendData):
        (WebCore::WorkerThreadableLoader::MainThreadBridge::didReceiveResponse):
        (WebCore::WorkerThreadableLoader::MainThreadBridge::didReceiveData):
        (WebCore::WorkerThreadableLoader::MainThreadBridge::didFinishLoading):
        (WebCore::WorkerThreadableLoader::MainThreadBridge::didFail):
        (WebCore::WorkerThreadableLoader::MainThreadBridge::didFailRedirectCheck):
        (WebCore::WorkerThreadableLoader::MainThreadBridge::didReceiveAuthenticationCancellation):
        Changed these methods to post task using a mode.

        * loader/WorkerThreadableLoader.h:
        (WebCore::WorkerThreadableLoader::create):

2009-02-24  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=24091
        <rdar://problem/6468660> Start of redirect chain ends up as master entry in Application Cache

        Test: http/tests/appcache/access-via-redirect.php

        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::ApplicationCacheGroup::finishedLoadingMainResource): Use the URL we ended up with,
        not the original one.

2009-02-24  Jian Li  <jianli@chromium.org>

        Reviewed by Alexey Proskuryakov.

        Change to include WorkerObjectProxy.h instead of WorkerMessagingProxy.h in WorkerContext.cpp and WorkerScriptController.cpp.
        https://bugs.webkit.org/show_bug.cgi?id=24112

        * bindings/js/WorkerScriptController.cpp:
        * dom/WorkerContext.cpp:

2009-02-23  Antti Koivisto  <antti@apple.com>

        Reviewed by Oliver Hunt.

        <rdar://problem/6613796> Extended text codecs registered on webview creation

        Comparing a text encoding with string "GBK" ended up constructing
        TextEncoding("GBK") which in turn initialized all extended
        text codecs.

        * platform/text/TextCodecICU.cpp:
        (WebCore::TextCodecICU::decode):

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

        Fix Qt build.

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

2009-02-23  Julien Chaffraix  <jchaffraix@webkit.org>

        Reviewed by Darin Adler.

        Bug 23956: Safari crashes when cloneNode fails (cloning a XML element with an invalid nodeName)

        The crash occurred because Document::cloneNode would call Document::createElementNS. Unfortunately
        element created with createElement could have a wrong nodeName (createElement sets the string as the
        localName without checking for a prefix).

        The fix is to call Document::createElement(const QualifiedName&, bool) that will not do any checks on the QualifiedName
        and will always succeed.
        Also rolled-out the HTMLElement specialisation of clonedNode as it was equivalent to what is done now (added an ASSERT
        to ensure that).

        Test: fast/dom/cloneNode.html

        * dom/Element.cpp:
        (WebCore::Element::cloneNode): Call createElement(const QualifiedName&, bool) instead of createElementNS as it will
        always return an element.

        * html/HTMLElement.cpp:
        * html/HTMLElement.h: Removed HTMLElement::clonedNode as it is equivalent to what is now done.

2009-02-23  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=24109
        Upstream V8 Script abstractions, all except ScriptController.

        * bindings/v8/ScriptCachedFrameData.h: Added.
        (WebCore::ScriptCachedFrameData::ScriptCachedFrameData):
        (WebCore::ScriptCachedFrameData::~ScriptCachedFrameData):
        (WebCore::ScriptCachedFrameData::restore):
        (WebCore::ScriptCachedFrameData::clear):
        (WebCore::ScriptCachedFrameData::domWindow):
        * bindings/v8/ScriptCallFrame.cpp: Added.
        (WebCore::ScriptCallFrame::ScriptCallFrame):
        (WebCore::ScriptCallFrame::~ScriptCallFrame):
        (WebCore::ScriptCallFrame::argumentAt):
        * bindings/v8/ScriptCallFrame.h: Added.
        (WebCore::ScriptCallFrame::functionName):
        (WebCore::ScriptCallFrame::sourceURL):
        (WebCore::ScriptCallFrame::lineNumber):
        (WebCore::ScriptCallFrame::argumentCount):
        * bindings/v8/ScriptCallStack.cpp: Added.
        (WebCore::ScriptCallStack::ScriptCallStack):
        (WebCore::ScriptCallStack::~ScriptCallStack):
        (WebCore::ScriptCallStack::at):
        * bindings/v8/ScriptCallStack.h: Added.
        (WebCore::ScriptCallStack::size):
        * bindings/v8/ScriptInstance.cpp: Added.
        (WebCore::V8ScriptInstance::V8ScriptInstance):
        (WebCore::V8ScriptInstance::~V8ScriptInstance):
        (WebCore::V8ScriptInstance::instance):
        (WebCore::V8ScriptInstance::clear):
        (WebCore::V8ScriptInstance::set):
        * bindings/v8/ScriptInstance.h: Added.
        (WebCore::V8ScriptInstance::create):
        * bindings/v8/ScriptSourceCode.h: Added.
        (WebCore::ScriptSourceCode::ScriptSourceCode):
        (WebCore::ScriptSourceCode::isEmpty):
        (WebCore::ScriptSourceCode::source):
        (WebCore::ScriptSourceCode::url):
        (WebCore::ScriptSourceCode::startLine):
        * bindings/v8/ScriptState.h: Added.
        (WebCore::ScriptState::hadException):
        (WebCore::ScriptState::setException):
        (WebCore::ScriptState::exception):
        * bindings/v8/ScriptString.h: Added.
        (WebCore::ScriptString::ScriptString):
        (WebCore::ScriptString::operator String):
        (WebCore::ScriptString::isNull):
        (WebCore::ScriptString::size):
        (WebCore::ScriptString::operator=):
        (WebCore::ScriptString::operator+=):
        * bindings/v8/ScriptValue.cpp: Added.
        (WebCore::ScriptValue::getString):
        * bindings/v8/ScriptValue.h: Added.
        (WebCore::ScriptValue::ScriptValue):
        (WebCore::ScriptValue::operator=):
        (WebCore::ScriptValue::operator==):
        (WebCore::ScriptValue::operator!=):
        (WebCore::ScriptValue::isNull):
        (WebCore::ScriptValue::isUndefined):
        (WebCore::ScriptValue::clear):
        (WebCore::ScriptValue::~ScriptValue):
        (WebCore::ScriptValue::v8Value):

2009-02-23  Adam Treat  <adam.treat@torchmobile.com>

        Reviewed by Timothy Hatcher.

        https://bugs.webkit.org/show_bug.cgi?id=24106
        The Qt port is crashing on exit because the tear down procedure involves
        the WebCore::InspectorController trying to access the JS execution context
        for a page that is being deleted.  This patch amends the inspector so
        that it does not try and access the execution context of the WebCore::Page
        in the midst of deletion.

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::inspectedPageDestroyed):
        (WebCore::InspectorController::stopUserInitiatedProfiling):

2009-02-23  David Levin  <levin@chromium.org>

        Reviewed by Alexey Proskuryakov.

        Bug 24088: ThreadableLoaderClient::didFailWillSendRequestCheck isn't wired up completely for workers and could use a better name.
        <https://bugs.webkit.org/show_bug.cgi?id=24088>

        No observable change in behavior, so no test.

        * loader/DocumentThreadableLoader.cpp:
        (WebCore::DocumentThreadableLoader::create):
        * loader/ThreadableLoaderClient.h:
        (WebCore::ThreadableLoaderClient::didFailRedirectCheck):
        * loader/ThreadableLoaderClientWrapper.h:
        (WebCore::ThreadableLoaderClientWrapper::didFailRedirectCheck):
        * loader/WorkerThreadableLoader.cpp:
        (WebCore::workerContextDidFailRedirectCheck):
        (WebCore::WorkerThreadableLoader::MainThreadBridge::didFailRedirectCheck):
        * loader/WorkerThreadableLoader.h:
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::didFinishLoading):
        * xml/XMLHttpRequest.h:

2009-02-23  David Levin  <levin@chromium.org>

        Reviewed by Alexey Proskuryakov.

        Bug 24047: Need to simplify nested if's in WorkerRunLoop::runInMode
        <https://bugs.webkit.org/show_bug.cgi?id=24047>

        Made a nested if inside of WorkerRunLoop::runInMode a lot simpler by
        using only MessageQueue::waitForMessageFilteredWithTimeout instead
        of three different MessageQueue methods.

        No observable change in behavior, so no test.

        * dom/WorkerRunLoop.cpp:
        (WebCore::ModePredicate::operator()):
        Minor clean-up to able to pass a const ref point for ModePredicate into runInMode.
        (WebCore::WorkerRunLoop::runInMode):
        * dom/WorkerRunLoop.h:

2009-02-23  David Hyatt  <hyatt@apple.com>

        In preparation for making layers for multicol objects (so that they can properly split child layers
        into multiple columns), rename all of the "overflowOnly" and "overflowList" members and functions
        of RenderLayer to use the term "normal flow" instead.

        Reviewed by Cameron Zwarich

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::RenderLayer):
        (WebCore::RenderLayer::~RenderLayer):
        (WebCore::RenderLayer::setHasVisibleContent):
        (WebCore::RenderLayer::enclosingCompositingLayer):
        (WebCore::RenderLayer::addChild):
        (WebCore::RenderLayer::removeChild):
        (WebCore::RenderLayer::paintLayer):
        (WebCore::RenderLayer::hitTestLayer):
        (WebCore::RenderLayer::dirtyNormalFlowList):
        (WebCore::RenderLayer::updateNormalFlowList):
        (WebCore::RenderLayer::collectLayers):
        (WebCore::RenderLayer::updateLayerListsIfNeeded):
        (WebCore::RenderLayer::shouldBeNormalFlowOnly):
        (WebCore::RenderLayer::styleChanged):
        * rendering/RenderLayer.h:
        (WebCore::RenderLayer::isNormalFlowOnly):
        (WebCore::RenderLayer::normalFlowList):
        * rendering/RenderTreeAsText.cpp:
        (WebCore::writeLayers):

2009-02-23  David Hyatt  <hyatt@apple.com>

        Fix the stacking order for column rules in multi-column layout.  Column rules should paint as part of the background of an element, just
        after all other components of the background have been painted.  This allows negative z-index children to still paint on top of the
        column rules (rather than ending up above the background of the box but behind the column rules).

        Reviewed by Eric Seidel

        Added fast/multicol/column-rules-stacking.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::paintColumnRules):
        (WebCore::RenderBlock::paintColumnContents):
        (WebCore::RenderBlock::paintObject):
        * rendering/RenderBlock.h:

2009-02-23  Adam Treat  <adam.treat@torchmobile.com>

        Reviewed by David Hyatt.

        No testcases have been added or modified since this patch should not result in
        a behavior change for ports that have layout tests enabled.

        Currently, the implementation of GraphicsContext::drawLineForText amongst
        the various ports differ in that some of them are honoring the context's
        strokeStyle when drawing a text-decoration and some of them are not.
        For instance, Apple's Mac port *does not* honor the context's strokeStyle(),
        but the Cairo implementation does and has an explicit workaround that
        sets the strokeStyle() temporarily.

        This patch fixes so that all ports are consistent by explicitly making sure
        to set the GraphicsContext strokeStyle to SolidStroke whenever
        painting the text-decoration of an InlineFlowBox or InlineTextBox as these
        should always use a solid stroke.

        This patch addresses these bugs:
        https://bugs.webkit.org/show_bug.cgi?id=19364
        https://bugs.webkit.org/show_bug.cgi?id=15659

        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::paintTextDecorations):
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paintDecoration):

2009-02-23  Scott Violet  <sky@google.com>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=24098
        Bugs in ClipboardChromium

        Fixes the following bugs in ClipboardChromium:
        * It's possible for the extension to be empty, resulting in a bad file
          name, for example, 'foo.' or just '.'.
        * We weren't restricting the size of the file to MAX_PATH.
        * We weren't removing characters that are invalid for file system names.

        * platform/chromium/ClipboardChromium.cpp:
        (WebCore::writeImageToDataObject):
        * platform/chromium/ClipboardChromium.h:
        * platform/chromium/ClipboardChromiumLinux.cpp: Added.
        (WebCore::ClipboardChromium::validateFileName):
        * platform/chromium/ClipboardChromiumMac.cpp: Added.
        (WebCore::ClipboardChromium::validateFileName):
        * platform/chromium/ClipboardChromiumWin.cpp: Added.
        (WebCore::isInvalidFileCharacter):
        (WebCore::ClipboardChromium::validateFileName):

2009-02-23  Thiago Macieira  <thiago.macieira@nokia.com>

        Reviewed by Simon Hausmann.

        Fix the Copyright notices in a few files

        * platform/qt/RenderThemeQt.h:

2009-02-23  Xan Lopez  <xan@gnome.org>

        Reviewed by Alexey Proskuryakov.

        https://bugs.webkit.org/show_bug.cgi?id=22624
        [SOUP][GTK] Need API to get SoupSession from WebKit.

        Allow to retrieve the Soup session and modify the code to take
        into account users changing features on it.

        * platform/network/ResourceHandle.h:
        * platform/network/soup/CookieJarSoup.cpp:
        (WebCore::defaultCookieJar):
        (WebCore::setDefaultCookieJar):
        * platform/network/soup/CookieJarSoup.h:
        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::createSoupSession):
        (WebCore::ensureSessionIsInitialized):
        (WebCore::ResourceHandle::startHttp):
        (WebCore::ResourceHandle::cancel):
        (WebCore::ResourceHandle::defaultSession):

2009-02-23  Xan Lopez  <xan@gnome.org>

        Reviewed by Alexey Proskuryakov.

        https://bugs.webkit.org/show_bug.cgi?id=22624
        [SOUP][GTK] Need API to get SoupSession from WebKit.

        Remove CURL support.

        * GNUmakefile.am:

2009-02-23  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Mark Rowe.

        Test: fast/dom/empty-hash-and-search.html

        https://bugs.webkit.org/show_bug.cgi?id=21147
        hash property returns incorrect value for links w/o hash

        Make hash() and search() behavior for empty and missing parts match IE and Firefox.

        * platform/KURL.cpp:
        (WebCore::KURL::query): Changed to return query without '?', as it is already done for ref().
        (WebCore::KURL::prettyURL): Append the query with the question mark.

        * page/Location.cpp:
        (WebCore::Location::search): Return an empty string if query is empty or missing.
        (WebCore::Location::hash): Return an empty string for empty hashes, not only missing ones.

        * dom/WorkerLocation.cpp:
        (WebCore::WorkerLocation::search):
        (WebCore::WorkerLocation::hash):
        Match document.location fixes above.

        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::hash):
        (WebCore::HTMLAnchorElement::search):
        Return an empty string for empty and missing parts.

2009-02-23  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=20184
        SELECT with no name generates invalid query string

        Test: fast/forms/select-no-name.html

        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::appendFormData): Added a check for empty name.

2009-02-23  Alexey Proskuryakov  <ap@webkit.org>

        Apply review comments for the previous check-in (forgot to save the file, oops).

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

2009-02-23  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=15707
        Crash when manipulating document from within an iframe onload function

        Test: fast/dom/onload-open.html

        * dom/ContainerNode.cpp: (WebCore::ContainerNode::removeChildren): Protect the container and
        the current node, because anything can happen when dispatching events.

2009-02-23  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=18970
        Numerically named input fields cause document.forms loop problems

        Test: fast/forms/numeric-input-name.html

        * bindings/scripts/CodeGeneratorJS.pm: Try index getter before name getter, even if the
        latter overrides properties.

2009-02-23  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=24059
        Tokenizer::write() return value is never used

        * dom/Tokenizer.h:
        * dom/XMLTokenizer.cpp:
        (WebCore::XMLTokenizer::write):
        * dom/XMLTokenizer.h:
        * html/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::write):
        * html/HTMLTokenizer.h:
        * loader/FTPDirectoryDocument.cpp:
        (WebCore::FTPDirectoryTokenizer::write):
        * loader/ImageDocument.cpp:
        (WebCore::ImageTokenizer::write):
        * loader/MediaDocument.cpp:
        (WebCore::MediaTokenizer::write):
        * loader/PluginDocument.cpp:
        (WebCore::PluginTokenizer::write):
        * loader/TextDocument.cpp:
        (WebCore::TextTokenizer::write):
        Made write() return void, not bool.

2009-02-20  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig.

        Updated for JavaScriptCore changes to timeout checking.

        * bindings/js/JSCustomPositionCallback.cpp:
        (WebCore::JSCustomPositionCallback::handleEvent):
        * bindings/js/JSCustomPositionErrorCallback.cpp:
        (WebCore::JSCustomPositionErrorCallback::handleEvent):
        * bindings/js/JSCustomSQLStatementCallback.cpp:
        (WebCore::JSCustomSQLStatementCallback::handleEvent):
        * bindings/js/JSCustomSQLStatementErrorCallback.cpp:
        (WebCore::JSCustomSQLStatementErrorCallback::handleEvent):
        * bindings/js/JSCustomSQLTransactionCallback.cpp:
        (WebCore::JSCustomSQLTransactionCallback::handleEvent):
        * bindings/js/JSCustomSQLTransactionErrorCallback.cpp:
        (WebCore::JSCustomSQLTransactionErrorCallback::handleEvent):
        * bindings/js/JSCustomVoidCallback.cpp:
        (WebCore::JSCustomVoidCallback::handleEvent):
        * bindings/js/JSCustomXPathNSResolver.cpp:
        (WebCore::JSCustomXPathNSResolver::lookupNamespaceURI):
        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::JSDOMWindowBase):
        (WebCore::JSDOMWindowBase::commonJSGlobalData):
        * bindings/js/JSEventListener.cpp:
        (WebCore::JSAbstractEventListener::handleEvent):
        * bindings/js/ScheduledAction.cpp:
        (WebCore::ScheduledAction::executeFunctionInContext):
        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::evaluate):
        * bindings/js/WorkerScriptController.cpp:
        (WebCore::WorkerScriptController::evaluate):
        (WebCore::WorkerScriptController::forbidExecution):
        * bindings/objc/WebScriptObject.mm:
        (-[WebScriptObject callWebScriptMethod:withArguments:]):
        (-[WebScriptObject evaluateWebScript:]):
        * bridge/NP_jsobject.cpp:
        (_NPN_InvokeDefault):
        (_NPN_Invoke):
        (_NPN_Evaluate):
        (_NPN_Construct):
        * bridge/jni/jni_jsobject.mm:
        (JavaJSObject::call):
        (JavaJSObject::eval):

2009-02-21  Hironori Bono  <hbono@chromium.org>

        Reviewed by Alexey Proskuryakov.

        https://bugs.webkit.org/show_bug.cgi?id=23786
        [Chromium] line-break characters in a complex text are treated as zero-width spaces

        This change prevents the UniscribeHelper class from treating the line-break characters
        as whitespaces.

        Tests: fast/text/international/bidi-linebreak-001.html
               fast/text/international/bidi-linebreak-002.html
               fast/text/international/bidi-linebreak-003.html

        * platform/graphics/chromium/UniscribeHelper.cpp:
        (WebCore::UniscribeHelper::adjustSpaceAdvances):
        Make the UniscribeHelper::adjustSpaceAdvances() function treat all characters in
        the treatAsSpace() function (e.g. U+0020, U+000A, U+000D, U+00A0) as whitespaces,
        so does when Chromium renders a simple text.

2009-02-20  Julien Chaffraix  <jchaffraix@webkit.org>

        Reviewed by Alexey Proskuryakov.

        Bug 23940: Use Document::createElement(const QualifiedName&, bool) when creating a known element inside WebCore

        Document::createElement(const QualifiedName&, bool) does not check for the prefix as opposed the the one taking an AtomicString
        or Document::createElementNS. This is perfectly fine internally because we know the type of element created and the check is
        unneeded.

        It also removes the use of an ExceptionCode argument which was here only to check that the prefix check was fine. Finally it
        enables us to use some generated QualifiedName.

        * bindings/js/JSOptionConstructor.cpp:
        (WebCore::constructHTMLOptionElement):
        * dom/Document.cpp:
        (WebCore::Document::setTitle):
        * dom/XMLTokenizer.cpp:
        (WebCore::createXHTMLParserErrorHeader):
        (WebCore::XMLTokenizer::insertErrorMessageBlock):
        * editing/CompositeEditCommand.cpp:
        (WebCore::createBlockPlaceholderElement):
        * editing/htmlediting.cpp:
        (WebCore::createTabSpanElement):
        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::setLength):
        * loader/FTPDirectoryDocument.cpp:
        (WebCore::FTPDirectoryTokenizer::appendEntry):
        (WebCore::FTPDirectoryTokenizer::createTDForFilename):
        (WebCore::FTPDirectoryTokenizer::loadDocumentTemplate):
        (WebCore::FTPDirectoryTokenizer::createBasicDocument):
        * loader/ImageDocument.cpp:
        (WebCore::ImageDocument::createDocumentStructure):
        * loader/MediaDocument.cpp:
        (WebCore::MediaTokenizer::createDocumentStructure):
        * loader/PluginDocument.cpp:
        (WebCore::PluginTokenizer::createDocumentStructure):
        * loader/TextDocument.cpp:
        (WebCore::TextTokenizer::write):
        * page/Frame.cpp:
        (WebCore::Frame::selectionComputedStyle):
        (WebCore::Frame::styleForSelectionStart):
        Document::createElement(const AtomicString&, ...) to Document::createElement(const QualifiedName&, ...) switch.

        * xml/XPathFunctions.cpp:
        (WebCore::XPath::FunLang::evaluate): Re-use langAttr instead of creating a new attribute.
        * page/DragController.cpp:
        (WebCore::documentFragmentFromDragData): Use the HTMLAnchorElement directly to get rid of the static cast.

2009-02-19  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=24060
        Fix up to accommodate for CanvasPixelArray return.

        * platform/graphics/skia/ImageBufferSkia.cpp:
        (WebCore::ImageBuffer::getImageData): Added an extra data() to call.
        (WebCore::ImageBuffer::putImageData): Ditto.

2009-02-20  Eric Carlson  <eric.carlson@apple.com>

        Simon Fraser

        https://bugs.webkit.org/show_bug.cgi?id=24042
        Bug 24042: MediaPlayer should cache plug-in proxy

        The changes in https://bugs.webkit.org/show_bug.cgi?id=23917 assume that
        MediaPlayer will always have created the private media player object before
        the plug-in is instantiated and calls back with the proxy object. This is not
        true on all platforms because of threading latency, so MediaPlayer should
        cache the plug-in proxy so it can pass it to the media engine at a later time.

        * platform/graphics/MediaPlayer.cpp:
        (WebCore::NullMediaPlayerPrivate::setPoster): Null media engine implementation of proxy methods.
        (WebCore::NullMediaPlayerPrivate::deliverNotification): Ditto.
        (WebCore::NullMediaPlayerPrivate::setMediaPlayerProxy): Ditto.
        (WebCore::MediaPlayer::MediaPlayer): Initialize m_playerProxy.
        (WebCore::MediaPlayer::load): Pass m_playerProxy to newly created engine.
        (WebCore::MediaPlayer::setMediaPlayerProxy): Cache m_playerProxy.
        * platform/graphics/MediaPlayer.h: Declare m_playerProxy.

2009-02-20  Eric Carlson  <eric.carlson@apple.com>

        Simon Fraser.

        https://bugs.webkit.org/show_bug.cgi?id=24063
        Make it possible for a port to require a user gesture to play/pause an <audio> or <video> element

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::HTMLMediaElement):  Rename m_loadRestrictions to m_Restrictions.
        Initialize m_internalCall.
        (WebCore::HTMLMediaElement::loadTimerFired): Increment m_internalCall around call to load().
        (WebCore::HTMLMediaElement::load): Call loadInternal if restrictions check out.
        (WebCore::HTMLMediaElement::loadInternal): New, guts of old load()
        (WebCore::HTMLMediaElement::setNetworkState): Fix bug introduced in r40943
        (WebCore::HTMLMediaElement::play): Call playInternal if restrictions check out.
        (WebCore::HTMLMediaElement::playInternal): New, guts of old play()
        (WebCore::HTMLMediaElement::pause): Call pauseInternal if restrictions check out.
        (WebCore::HTMLMediaElement::pauseInternal): New, guts of old pause()
        (WebCore::HTMLMediaElement::togglePlayState): Call playInternal/pauseInternal
        (WebCore::HTMLMediaElement::deliverNotification): Remove unnecessary white space.
        * html/HTMLMediaElement.h: Rename m_loadRestrictions to m_Restrictions, add m_internalCall,
        add RequireUserGestureRateChangeRestriction.

2009-02-20  Darin Fisher  <darin@chromium.org>

        Fix build bustage in FileSystemWin.cpp.

        Need to return CString() instead of 0 since there are now two CString
        constructors that take a pointer type.

        * platform/win/FileSystemWin.cpp:
        (WebCore::openTemporaryFile):

2009-02-20  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=23999
        Change license headers to accurately reflect code history.

        * platform/ContentType.cpp:
        * platform/ContentType.h:

2009-02-18  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Antti Koivisto.

        https://bugs.webkit.org/show_bug.cgi?id=23999
        Split off MIME type parsing into its own class.

        * GNUmakefile.am: Added ContentType sources.
        * WebCore.pro: Ditto.
        * WebCore.scons: Ditto.
        * WebCore.vcproj/WebCore.vcproj: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * WebCoreSources.bkl: Ditto.
        * html/HTMLMediaElement.cpp: Changed to use ContentType.
        (WebCore::HTMLMediaElement::selectMediaURL):
        * platform/ContentType.cpp: Added.
        (WebCore::ContentType::ContentType):
        (WebCore::ContentType::parameter):
        (WebCore::ContentType::type):
        * platform/ContentType.h: Added.
        (WebCore::ContentType::raw):
        * platform/MIMETypeRegistry.cpp:
        * platform/MIMETypeRegistry.h:
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::load):
        * rendering/style/ContentData.h: Renamed ContentType to StyleContentType.
        * rendering/style/RenderStyleConstants.h: Ditto.
        (WebCore::):

2009-02-20  Holger Hans Peter Freyther  <zecke@selfish.org>

        Unreviewed build fix.

        Use CString() instead of 0.

        * platform/gtk/FileSystemGtk.cpp:
        (WebCore::openTemporaryFile):
        * platform/qt/FileSystemQt.cpp:
        (WebCore::openTemporaryFile):

2009-02-20  Gustavo Noronha Silva  <gns@gnome.org>

        Reviewed by Holger Freyther.

        When dealing with local files, use a path instead of an URI. GFile
        has problems decoding URIs with percent signs on them.

        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::ResourceHandle::startGio):

2009-02-20  Gustavo Noronha Silva  <gns@gnome.org>

        Reviewed by Holger Freyther.

        Protect the ResourceHandle instance from being destroyed by
        didReceiveData inside the GIO readCallback call, so that
        cancelling caused by scripts is handled correctly.

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

2009-02-20  David Kilzer  <ddkilzer@apple.com>

        Make IconDatabaseNone.cpp compile with -Wunused and pass check-for-exit-time-destructors

        Reviewed by Sam Weinig.

        * loader/icon/IconDatabaseNone.cpp:
        (WebCore::IconDatabase::defaultDatabaseFilename): Use DEFINE_STATIC_LOCAL().
        (WebCore::IconDatabase::open): Commented out unused parameter.
        (WebCore::IconDatabase::setPrivateBrowsingEnabled): Ditto.
        (WebCore::IconDatabase::iconForPageURL): Ditto.
        (WebCore::IconDatabase::iconURLForPageURL): Ditto.
        (WebCore::IconDatabase::defaultIcon): Ditto.
        (WebCore::IconDatabase::retainIconForPageURL): Ditto.
        (WebCore::IconDatabase::releaseIconForPageURL): Ditto.
        (WebCore::IconDatabase::setIconDataForIconURL): Ditto.
        (WebCore::IconDatabase::setIconURLForPageURL): Ditto.
        (WebCore::IconDatabase::setEnabled): Ditto.
        (WebCore::IconDatabase::pageURLMappingCount): Added stub.
        (WebCore::IconDatabase::retainedPageURLCount): Ditto.
        (WebCore::IconDatabase::iconRecordCount): Ditto.
        (WebCore::IconDatabase::iconRecordCountWithData): Ditto.

2009-02-20  David Kilzer  <ddkilzer@apple.com>

        Add comment to generated code when shadowing a built-in object

        Reviewed by Sam Weinig.

        * bindings/scripts/CodeGeneratorJS.pm: Added comment to
        generated code output.

2009-02-20  Avi Drissman  <avi@chromium.org>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=24036
        Keyboard events need disambiguation on the Linux platform too.

        * platform/chromium/PlatformKeyboardEventChromium.cpp:
        (WebCore::PlatformKeyboardEvent::disambiguateKeyDownEvent):

2009-02-19  Darin Fisher  <darin@chromium.org>

        Reviewed by Eric Seidel.

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

        Several improvements to CString:
        1- Make it possible to initialize a CString from a CStringBuffer
        2- Make it possible to get a CStringBuffer from a CString
        3- Change CStringBuffer::data() to return a const pointer to ward off mutation
        4- Remove unused releaseBuffer() methods.
        5- Make CStringBuffer::create() private to force consumers to get a CStringBuffer from a CString.

        * platform/text/CString.cpp:
        (WebCore::CString::init):
        (WebCore::CString::mutableData):
        (WebCore::CString::newUninitialized):
        (WebCore::CString::copyBufferIfNeeded):
        * platform/text/CString.h:
        (WebCore::CStringBuffer::data):
        (WebCore::CStringBuffer::length):
        (WebCore::CStringBuffer::create):
        (WebCore::CStringBuffer::mutableData):
        (WebCore::CString::CString):
        (WebCore::CString::buffer):

2009-02-19  Dmitry Titov  <dimich@chromium.org>

        Reviewed by Alexey Proskuryakov.

        https://bugs.webkit.org/show_bug.cgi?id=24017
        Remove some usage of Document in Worker.

        * dom/WorkerContext.h:
        (WebCore::WorkerContext::userAgent):
        * dom/Document.cpp:
        (WebCore::Document::userAgent):
        * dom/Document.h:
        * dom/ScriptExecutionContext.h:
        Added virtual ScriptExecutionContext::userAgent(const KURL&).
        Document implementation uses FrameLoader::userAgent and
        WorkerContext receives the string on creation and stores it in a member.

        * dom/Worker.cpp:
        (WebCore::Worker::Worker):
        (WebCore::Worker::notifyFinished):
        * dom/Worker.h:
        (WebCore::Worker::create):
        Instead of Document the Worker constructor now gets a ScriptExecutionContext.
        Start using some methods on SEC (like completeURL() and userAgent()).
        For others, explicitly case to Document and add a FIXME.
        Remove Worker::document() too.

2009-02-20  Gustavo Noronha Silva  <gns@gnome.org>

        Rubber-stamped by Holger Freyther.

        Do not set httpStatus to SOUP_STATUS_OK when serving local files
        to match other ports' behavior, fixing xmlhttprequest test
        regressions.

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

2009-02-19  Dan Bernstein  <mitz@apple.com>

        Reviewed by Sam Weinig.

        - WebCore part of fixing https://bugs.webkit.org/show_bug.cgi?id=24027
          Do not send loader callbacks during CSS styling

        Undo the iChat-specific quirk added in
        <http://trac.webkit.org/changeset/41071>. Instead, always suspend memory
        cache client callbacks during attach() and recalcStyle().

        * WebCore.base.exp: Removed
        Settings::setNeedsIChatMemoryCacheCallsQuirk().
        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::suspendPostAttachCallbacks): Disable memory
        cache client callbacks and remember to enable them afterwards if needed.
        (WebCore::ContainerNode::resumePostAttachCallbacks): Re-enable memory
        cache client callbacks if they were disabled in
        suspendPostAttachCallbacks().
        (WebCore::ContainerNode::attach): Use suspendPostAttachCallbacks() and
        resumePostAttachCallbacks().
        * dom/ContainerNode.h: Made suspendPostAttachCallbacks()
        and resumePostAttachCallbacks() non-static.
        * dom/Document.cpp:
        (WebCore::Document::dispatchImageLoadEventsNow): Reverted iChat-specific
        workaround.
        * page/Settings.cpp: Removed m_needsIChatMemoryCacheCallsQuirk and
        related code.
        (WebCore::Settings::Settings):
        * page/Settings.h:

2009-02-19  Holger Hans Peter Freyther  <zecke@selfish.org>

        Unreviewed build fix.

        Build fix after r41092. Make the memoryUsage method
        public. It will be shadowed by cf/mac and for curl/soup/qt
        the implementation from ResourceResponseBase will be used.

        * platform/network/ResourceResponseBase.h:
        (WebCore::ResourceResponseBase::memoryUsage):

2009-02-19  Beth Dakin  <bdakin@apple.com>

        Reviewed by Dave Hyatt.

        Fix for <rdar://problem/6077775> Should be able to specify
        inactive ::selection color

        This patch makes the ::selction pseudo-element work with
        the :window-inactive pseudo type. This was, a user can specify a
        different ::selection style when a window is inactive.

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::SelectorChecker::checkSelector):
        (WebCore::CSSStyleSelector::SelectorChecker::checkOneSelector):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::selectionBackgroundColor):
        (WebCore::RenderObject::selectionForegroundColor):

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

        Reviewed by Beth Dakin.

        Patch for https://bugs.webkit.org/show_bug.cgi?id=24044
        Update querySelector/querySelectorAll to match the latest spec

        Update querySelector and querySelectorAll to match the latest version
        of the Selectors API spec.  We now stringify null and undefined to "null"
        and "undefined" respectively instead of to "".

        Test: fast/dom/SelectorAPI/undefined-null-stringify.html

        * dom/Document.idl:
        * dom/DocumentFragment.idl:
        * dom/Element.idl:

2009-02-19  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Geoffrey Garen.

        https://bugs.webkit.org/show_bug.cgi?id=23732
        Rework CachedResource overhead accounting to allow platforms to diverge
        in numbers.

        * loader/CachedResource.cpp:
        (WebCore::CachedResource::overheadSize): Changed to ask ResourceResponse
        for its size and to use actual URL size.
        * platform/network/ResourceResponseBase.h:
        (WebCore::ResourceResponseBase::size): Added default size method.
        * platform/network/cf/ResourceResponse.h:
        (WebCore::ResourceResponse::size): Added Win/CF size method
        * platform/network/mac/ResourceResponse.h:
        (WebCore::ResourceResponse::size): Added Mac size method.

2009-02-19  Anders Carlsson  <andersca@apple.com>

        Reviewed by Kevin Decker.

        - Fix for <rdar://problem/6604968>

        On Tiger, create an autorelease pool before creating the NSGraphicsContext and drain it immediately
        after the call to -[NSView displayRectIgnoringOpacity:inContext:].

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

2009-02-19  David Hyatt  <hyatt@apple.com>

        Fix a bug where reflections didn't work properly if opacity was < 1.  Make sure that replaced elements
        also consider reflections to be part of their visual overflow.  This had already been done for blocks
        and lines, but it wasn't being done yet for replaced elements.

        Also make sure that when the object being reflected has opacity < 1 that we don't end up popping the outer
        transparency layer early.  Since the reflected object paints twice, we don't want to end the transparency
        layer it pushed until we're done painting the real object (rather than the reflection).

        Reviewed by Dan Bernstein

        Added fast/reflections/reflection-masks-opacity.html

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paintLayer):
        * rendering/RenderPartObject.cpp:
        (WebCore::RenderPartObject::layout):
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::layout):
        (WebCore::RenderReplaced::adjustOverflowForBoxShadowAndReflect):
        * rendering/RenderReplaced.h:

2009-02-19  David Levin  <levin@chromium.org>

        Reviewed by Alexey Proskuryakov.

        Bug 23980: WorkerRunLoop needs a way to run in a given mode similar to CFRunLoopInMode.
        <https://bugs.webkit.org/show_bug.cgi?id=23980>

        WorkerRunLoop has the ability to run in a mode which filters the tasks to be run.
        * When WorkerRunLoop::runInMode is called, only task for that mode will run.
        * When WorkerRunLoop::run is called (or the default mode is used), then all tasks
          will run regardless of their posted mode.

        Here's a demonstration of the api:

            RefPtr<NameResolution> nameResolution = NameResolution::create(workerRunLoop);

            //  Internally nameResolution will do workerRunLoop.postTaskForMode(task, "MyCoolMode")
            //  for any tasks that need to be run during this loop.
            nameResolution->setTaskMode("MyCoolMode");

            nameResolution->start();
            while (!nameResolution->done()) {
                // Only tasks which are posted for "MyCoolMode" will run.
                workerRunLoop.runInMode(context, "MyCoolMode");
            }

        No observable change in behavior, so no test.

        * dom/WorkerRunLoop.cpp:
        (WebCore::ModePredicate::ModePredicate):
        (WebCore::ModePredicate::operator()):
        (WebCore::WorkerRunLoop::WorkerRunLoop):
        (WebCore::WorkerRunLoop::~WorkerRunLoop):
        (WebCore::WorkerRunLoop::setSharedTimer):
        (WebCore::WorkerRunLoop::resetSharedTimer):
        (WebCore::WorkerRunLoop::run):
        (WebCore::WorkerRunLoop::runInMode):
        (WebCore::WorkerRunLoop::postTask):
        (WebCore::WorkerRunLoop::postTaskForMode):
        * dom/WorkerRunLoop.h:
        (WebCore::WorkerRunLoop::Task::create):
        (WebCore::WorkerRunLoop::Task::mode):
        (WebCore::WorkerRunLoop::Task::performTask):
        (WebCore::WorkerRunLoop::Task::Task):

2009-02-19  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=24034
        Fix up Selection->VisibleSelection change.

        * page/chromium/EventHandlerChromium.cpp:
        (WebCore::EventHandler::passMousePressEventToSubframe): Renamed Selection
        to VisibleSelection.

2009-02-19  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=24041
        Correct Skia type conversion issues, fix Chromium Linux build.

        * platform/graphics/chromium/FontLinux.cpp:
        (WebCore::Font::drawGlyphs): changed parameters to RGBA32, not WebCore::Color.

2009-02-19  Jungshik Shin <jshin@chromium.org>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=20531
        Chromium-part follow-up to the patch landed in r40636
        for bug 20531.
        Remove a static member function alternateFamilyName
        from Chromium's Win/Linux ports of FontCache. In r40636,
        alternateFamilyName was customized using #ifdef PLATFORM(WIN_OS).
        So, there's no more need for the static member function per
        platform.

        * platform/graphics/chromium/FontCacheChromiumWin.cpp:
        * platform/graphics/chromium/FontCacheLinux.cpp:

2009-02-19  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Adele Peterson.

        Call documentWillBecomeInactive() from Document::detach to ensure that
        media elements are shut down, because they may be kept alive by references
        from JS past document teardown.

        documentWillBecomeInactive() calls  renderView()->willMoveOffscreen(), so no
        need to do that in detach() as well.

        We no longer need to call documentWillBecomeInactive() from ~Page() (which
        was added for <https://bugs.webkit.org/show_bug.cgi?id=21116>), since this
        supersedes that change.

        * dom/Document.cpp:
        (WebCore::Document::detach):
        * page/Page.cpp:
        (WebCore::Page::~Page):

2009-02-19  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=24028
        Fix up Skia path changes.

        * platform/graphics/skia/GraphicsContextSkia.cpp:
        (WebCore::GraphicsContext::strokePath): Removed illegal indirection.
        * platform/graphics/skia/PathSkia.cpp:
        (WebCore::boundingBoxForCurrentStroke): Changed call name.

2009-02-19  Gustavo Noronha Silva  <gns@gnome.org>

        Reviewed by Alexey Proskuryakov.

        Ignore ports on local URLs. This fixes a regression in
        fast/loader/file-URL-with-port-number.html

        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::ResourceHandle::startGio):

2009-02-19  Gustavo Noronha Silva  <gns@gnome.org>

        Reviewed by Alexey Proskuryakov.

        https://bugs.webkit.org/show_bug.cgi?id=24011
        KURL's setPort doesn't unset port if 0 is given

        Make setPort remove port if 0 is given to it, as promised by the
        comment in KURL's header.

        * platform/KURL.cpp:
        (WebCore::KURL::setPort):

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

        Reviewed by Brady Eidson.

        - WebCore part of fixing <rdar://problem/6507512> Crash in iChat at CSSStyleSelector::adjustRenderStyle

        The crash results from re-entry into
        CSSMutableStyleDeclaration::setCssText, which in turn is caused by
        the first style change causing a cached image to load from the memory
        cache, causing load delegate dispatch, and iChat's delegate method
        calling back into WebKit.

        The workaround is to use defer delegate callbacks for memory cache. In
        this case, deferring callbacks during image load event dispatch was
        found to be sufficient.

        The crash is a regression. See also the discussion in
        <https://bugs.webkit.org/show_bug.cgi?id=22521>.

        * WebCore.base.exp: Added
        Settings::setNeedsIChatMemoryCacheCallsQuirk().
        * dom/Document.cpp:
        (WebCore::Document::dispatchImageLoadEventsNow): If the quirk is
        enabled, defer memory cache callbacks during image load event dispatch.
        * page/Settings.cpp:
        (WebCore::Settings::Settings): Initialize
        m_needsIChatMemoryCacheCallsQuirk.
        (WebCore::Settings::setNeedsIChatMemoryCacheCallsQuirk): Added this
        setter.
        * page/Settings.h:
        (WebCore::Settings::needsIChatMemoryCacheCallsQuirk): Added this getter.

2009-02-18  Adam Roben  <aroben@apple.com>

        Export WebCore::handCursor and Cursor.h

        Reviewed by John Sullivan.

        * WebCore.base.exp: Added WebCore::handCursor.
        * WebCore.xcodeproj/project.pbxproj: Made Cursor.h private.

2009-02-18  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Alexey Proskuryakov.

        https://bugs.webkit.org/show_bug.cgi?id=23992
        REGRESSION: crash on windows loading http://www.stickam.com/liveStreams.do

        Unable to reduce to a layout test.

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

2009-02-18  Evan Stade  <estade@chromium.org>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=23861
        Stroke font outlines on chromium linux

        TEST=LayoutTests/svg/custom/pointer-events-text.svg

        * platform/graphics/chromium/FontLinux.cpp:
        (WebCore::Font::drawGlyphs):

2009-02-18  Evan Stade  <estade@chromium.org>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=23860
        Resync some graphics/skia files with their chromium counterparts

        This comes from chromium patches <http://codereview.chromium.org/17633>
        and <http://codereview.chromium.org/17454>

        * platform/graphics/skia/GraphicsContextSkia.cpp:
        (WebCore::GraphicsContext::clipPath):
        (WebCore::GraphicsContext::fillPath):
        * platform/graphics/skia/PlatformContextSkia.cpp:
        (PlatformContextSkia::addPath):
        (PlatformContextSkia::currentPath):
        * platform/graphics/skia/PlatformContextSkia.h:

2009-02-18  Gustavo Noronha Silva  <gns@gnome.org>

        Unreviewed.

        Build fix after r41060.

        * GNUmakefile.am:

2009-02-18  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=24005
        Add an include to fix Chromium build.

        * page/animation/AnimationController.cpp: Add UnusedParam.h include.

2009-02-18  Gustavo Noronha Silva  <gns@gnome.org>

        Reviewed by Holger Freyther.

        Fix symbols.filter location, and add other missing files to the
        autotools build, so that make dist works.

        * GNUmakefile.am:

2009-02-18  Zan Dobersek  <zandobersek@gmail.com>

        Rubber-stamped by Holger Hans Peter Freyther.

        Allow POST method for local requests.

        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::ResourceHandle::startGio):

2009-02-18  Gustavo Noronha Silva  <gns@gnome.org>

        Reviewed by Holger Hans Peter Freyther.

        Use KURL in startGio instead of passing a string with the URL, so
        that we can handle removing refs and queries more elegantly. This
        is fixing more regressions that came from the curl->soup switch.

        Original work by Zan Dobersek.

        * platform/network/ResourceHandle.h:
        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::ResourceHandle::start):
        (WebCore::ResourceHandle::startGio):

2009-02-18  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Alexey Proskuryakov.

        Implement ResourceHandle::loadResourceSynchronously in ResourceHandleSoup.cpp

        The implementation is needed to have synchronous loading, e.g. for
        JavaScript interaction. This is fixing various regressions that
        came from the curl->soup switch.

        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::WebCoreSynchronousLoader::WebCoreSynchronousLoader):
        (WebCore::WebCoreSynchronousLoader::~WebCoreSynchronousLoader):
        (WebCore::WebCoreSynchronousLoader::didReceiveResponse):
        (WebCore::WebCoreSynchronousLoader::didReceiveData):
        (WebCore::WebCoreSynchronousLoader::didFinishLoading):
        (WebCore::WebCoreSynchronousLoader::didFail):
        (WebCore::WebCoreSynchronousLoader::run):
        (WebCore::ResourceHandle::loadResourceSynchronously):

2009-02-18  Xan Lopez  <xan@gnome.org>

        Reviewed by Mark Rowe.

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

        Based on a patch by Bo Yang  <techrazy.yang@gmail.com>

        Make the cursor cache global, that's all we really need and
        otherwise we can miss cursor transitions in some situations (see
        the bug for one testcase). Also remove some now useless code.

        * platform/Widget.h:
        * platform/gtk/WidgetGtk.cpp:
        (WebCore::Widget::Widget):
        (WebCore::Widget::~Widget):
        (WebCore::Widget::setCursor):

2009-02-17  Adam Roben  <aroben@apple.com>

        Windows build fix

        * loader/FrameLoader.cpp:
        (WebCore::toPlugInElement): Don't rely on #if being processed before
        ASSERT.

2009-02-17  David Levin  <levin@chromium.org>

        Reviewed by Alexey Proskuryakov.

        Bug 23977: Unnecessary timer related headers in files.
        <https://bugs.webkit.org/show_bug.cgi?id=23977>

        No observable change in behavior, so no test.

        * dom/Document.cpp:
        * dom/WorkerRunLoop.cpp:
        * dom/WorkerRunLoop.h:

2009-02-17  Peter Abrahamsen  <rainhead@gmail.com>

        Reviewed by Sam Weinig.

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

        Updated XMLHttpRequest with new header names from the latest Access
        Control draft: http://www.w3.org/TR/access-control/
        - Access-Control-Origin becomes Access-Control-Allow-Origin
        - Access-Control-Credentials becomes Access-Control-Allow-Credentials

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

2009-02-17  Kevin Ollivier  <kevino@theolliviers.com>

        wx build fix. Add missing constructor used for empty values.

        * platform/graphics/wx/FontPlatformData.h:
        (WebCore::FontPlatformData::FontPlatformData):

2009-02-17  Antti Koivisto  <antti@apple.com>

        Reviewed by Dave Kilzer.

        <rdar://problem/6592446> dynamically updating page doesn't seem to draw when updated

        Need update after callback.

        * bindings/js/JSCustomPositionCallback.cpp:
        (WebCore::JSCustomPositionCallback::handleEvent):
        * bindings/js/JSCustomPositionErrorCallback.cpp:
        (WebCore::JSCustomPositionErrorCallback::handleEvent):

2009-02-17  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Antti Koivisto.

        https://bugs.webkit.org/show_bug.cgi?id=23917
        Allow a WebKit plug-in to act as a proxy for the <audio> and <video>
        element.

        * DerivedSources.make: add media element proxy exports to .exp file when feature is defined.

        * WebCore.VideoProxy.exp: New, define the informal protocol exported by a media element proxy.

        * WebCore.xcodeproj/project.pbxproj: Add MediaPlayerProxy.h.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::HTMLMediaElement): Initialize m_needWidgetUpdate.
        (WebCore::HTMLMediaElement::attributeChanged): Don't detach+attach when PLUGIN_PROXY_FOR_VIDEO, the
        proxy plug-in handles the poster frame.
        (WebCore::HTMLMediaElement::rendererIsNeeded): New logic for PLUGIN_PROXY_FOR_VIDEO.
        (WebCore::HTMLMediaElement::createRenderer): Create RenderPartObject when PLUGIN_PROXY_FOR_VIDEO.
        (WebCore::HTMLMediaElement::attach): Set m_needWidgetUpdate when PLUGIN_PROXY_FOR_VIDEO
        (WebCore::HTMLMediaElement::load): Don't reallocate MediaPlayer when PLUGIN_PROXY_FOR_VIDEO, we keep the
        same plug-in for the life of the element.
        (WebCore::HTMLMediaElement::mediaPlayerNetworkStateChanged): update m_networkState when media player
        network state changes to EMPTY, otherwise we can get out of sync with engine.
        (WebCore::HTMLMediaElement::defaultEventHandler): pass event to widget when PLUGIN_PROXY_FOR_VIDEO
        (WebCore::HTMLMediaElement::deliverNotification): New, deliver notification from proxy plug-in to
        media player.
        (WebCore::HTMLMediaElement::setMediaPlayerProxy): New, pass proxy object to media player.
        (WebCore::HTMLMediaElement::initialURL): New, return the url from the "src" attr or the appropriate
        <source> element to be used as the initial url for the proxy.
        (WebCore::HTMLMediaElement::finishParsingChildren): New, allocate MediaPlayer and update widget.
        * html/HTMLMediaElement.h: Declare new methods for proxy, add m_needWidgetUpdate.
        (WebCore::HTMLMediaElement::setNeedWidgetUpdate):

        * html/HTMLVideoElement.cpp:
        (WebCore::HTMLVideoElement::attach): Poster image is handled by proxy when PLUGIN_PROXY_FOR_VIDEO.
        (WebCore::HTMLVideoElement::parseMappedAttribute): Ditto.
        * html/HTMLVideoElement.h:

        * loader/FrameLoader.cpp:
        (WebCore::toPlugInElement): Allow cast if element is <video> or <audio>

        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::MediaPlayer): Remove white space.
        (WebCore::MediaPlayer::setPoster): New, forward call to private player.
        (WebCore::MediaPlayer::deliverNotification): Ditto.
        (WebCore::MediaPlayer::setMediaPlayerProxy): Ditto.
        * platform/graphics/MediaPlayer.h:
        (WebCore::MediaPlayer::mediaPlayerClient):

        * platform/graphics/mac/MediaPlayerProxy.h: New, defines media player proxy interface.

        * rendering/RenderPart.cpp:
        (WebCore::RenderPart::RenderPart): Change constructor to take Element* instead of Node* as a
        non-element node doesn't need a renderer
        * rendering/RenderPart.h: Ditto.

        * rendering/RenderPartObject.cpp:
        (WebCore::RenderPartObject::RenderPartObject): Ditto.
        (WebCore::RenderPartObject::updateWidget): Package params for proxy plug-in when element is
        <video> or <audio>.
        * rendering/RenderPartObject.h:

2009-02-17  David Hyatt  <hyatt@apple.com>

        Reviewed by Eric Seidel

        Fix for https://bugs.webkit.org/show_bug.cgi?id=23985

        Don't allow legends to be anything but display:block.

        Added fast/forms/inline-ignored-on-legend.html

        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * css/html4.css:
        * html/HTMLLegendElement.cpp:
        * html/HTMLLegendElement.h:
        * rendering/RenderLegend.cpp: Removed.
        * rendering/RenderLegend.h: Removed.
        * wml/WMLInsertedLegendElement.cpp:
        * wml/WMLInsertedLegendElement.h:

2009-02-13  Brett Wilson  <brettw@dhcp-172-22-71-167.mtv.corp.google.com>

        Reviewed by Simon Fraser.

        https://bugs.webkit.org/attachment.cgi?id=27666
        Fix Chromium build build: forgotten include in RenderObject, sync
        RenderTheme to the recent changes in RenderObject.

        * rendering/RenderObject.cpp:
        * rendering/RenderThemeChromiumMac.mm:
        (WebCore::RenderThemeChromiumMac::updatePressedState):

2009-02-17  Gustavo Noronha Silva  <gns@gnome.org>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=22966
        crash when destroying a webview that opened a page containing <script>
        tags

        Fix m_group being set to 0 instead of to m_singlePageGroup when
        GroupName is set to empty

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

2009-02-16  Beth Dakin  <bdakin@apple.com>

        Reviewed by Sam Weinig.

        Fix for <rdar://problem/6386623>

        I made m_numParsedProperties and m_maxParsedProperties unsigned
        instead of int, and then added an early return from addPropery() if
        m_maxParsedProperties exceeds the max value.

        * css/CSSParser.cpp:
        (WebCore::CSSParser::addProperty):
        (WebCore::CSSParser::rollbackLastProperties):
        (WebCore::CSSParser::clearProperties):
        (WebCore::CSSParser::createFontFaceRule):
        (WebCore::CSSParser::deleteFontFaceOnlyValues):
        * css/CSSParser.h:

2009-02-16  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by Mark Rowe.

        https://bugs.webkit.org/show_bug.cgi?id=16309
        HTML5: The third execCommand argument for insert{un}orderedlist should be ignored

        When we originally implemented this command, MSDN documentation said that IE set the
        id attribute of inserted lists to the third argument to execCommand, but IE doesn't
        do this nor do any other browsers.

        * editing/EditorCommand.cpp:
        (WebCore::executeInsertOrderedList):
        (WebCore::executeInsertUnorderedList):
        * editing/IndentOutdentCommand.cpp:
        (WebCore::IndentOutdentCommand::outdentParagraph):
        * editing/InsertListCommand.cpp:
        (WebCore::InsertListCommand::insertList):
        (WebCore::InsertListCommand::InsertListCommand):
        (WebCore::InsertListCommand::doApply):
        * editing/InsertListCommand.h:
        (WebCore::InsertListCommand::create):

2009-02-16  Dan Bernstein  <mitz@apple.com>

        Reviewed by Geoffrey Garen.

        - fix <rdar://problem/6561077> REGRESSION (r39634): Unable to select an item in stocks widget with the mouse

        Test: platform/mac/fast/events/pointer-events-dashboard.html

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty): Do not apply the
        pointer-events property in Dashboard backwards compatibility mode,
        in order to work around misuse of that property by the Stocks widget.

2009-02-16  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=15381
        execCommand justify modifies the contentEditable node

        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::moveParagraphContentsToNewBlockIfNecessary): Avoid modifying not just
        the body element, but any root editable element.

2009-02-16  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Adele Peterson.

        Bug 23979: AX: alt tag not returned for <input type="image">
        https://bugs.webkit.org/show_bug.cgi?id=23979

        Test: accessibility/input-image-alt.html

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

2009-02-16  Kevin Watters  <kevinwatters@gmail.com>

        Reviewed by Kevin Ollivier.

        The ref data is not properly set unless we use the CreateMatrix function.

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

        * platform/graphics/wx/TransformationMatrixWx.cpp:
        (WebCore::TransformationMatrix::operator wxGraphicsMatrix):

2009-02-16  Dan Bernstein  <mitz@apple.com>

        Reviewed by John Sullivan.

        - fix <rdar://problem/6516829> FontPlatformData constructor passes NULL to CTFontCopyGraphicsFont and CTFontGetPlatformFont

        * platform/graphics/FontCache.cpp:
        (WebCore::FontDataCacheKeyTraits::emptyValue): Changed to use the
        FontPlatformData(float, bool, bool) constructor.
        * platform/graphics/mac/FontCacheMac.mm:
        (WebCore::FontCache::createFontPlatformData): Changed to pass a valid
        NSFont to the FontPlatformData constructor, instead of implicitly
        passing 0 and then calling setFont().
        * platform/graphics/mac/FontPlatformData.h: Made the NSFont parameter
        of the constructor mandatory.

2009-02-15  David Kilzer  <ddkilzer@apple.com>

        Move duplicate caretWidth constants to RenderObject.h

        Reviewed by Dan Bernstein.

        No test since no change in behavior.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::localCaretRect): Removed caretWidth.
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::localCaretRect): Ditto.
        * rendering/RenderObject.h: Added caretWidth definition.
        * rendering/RenderText.cpp:
        (WebCore::RenderText::localCaretRect): Removed caretWidth.

2009-02-13  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=23955
        V8HTMLPlugInCustom returns undefined, which fools interceptors.

        * bindings/v8/custom/V8HTMLPlugInElementCustom.cpp:
        (WebCore::NAMED_PROPERTY_GETTER): Use deferToInterceptor() return value.
        (WebCore::NAMED_PROPERTY_SETTER): Ditto.
        (WebCore::INDEXED_PROPERTY_GETTER): Ditto.
        (WebCore::INDEXED_PROPERTY_SETTER): Ditto.

2009-02-13  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=23954
        Add V8 custom bindings for CanvasRenderingContext2D.

        * bindings/v8/custom/V8CanvasRenderingContext2DCustom.cpp: Added.
        (WebCore::toV8):
        (WebCore::toCanvasStyle):
        (WebCore::ACCESSOR_GETTER):
        (WebCore::ACCESSOR_SETTER):

2009-02-13  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin Adler and Dan Bernstein.

        <rdar://problem/6583187>

        * page/NavigatorBase.cpp:
        Handle PPC64 and X86_64 as well.

2009-02-13  Darin Adler  <darin@apple.com>

        Reviewed by Mark Rowe.

        Fix broken tokenizer regression test that reflected a lifetime bug
        in the document.write optimization. The test failure was trivial to
        reproduce in COLLECT_ON_EVERY_ALLOCATION mode.

        * bindings/js/JSHTMLDocumentCustom.cpp:
        (WebCore::documentWrite): Convert strings to String rather than passing
        the pointer and length to SegmentedString. The optimization is thus
        mostly gone. However, there are two ways to bring it back: 1) Apply
        the patch that makes UString and String share the same buffers.
        2) Add a UString feature to SegmentedString; simple to do but might
        risk slowing down normal document parsing.

2009-02-13  Adam Treat  <adam.treat@torchmobile.com>

        Caught by Darin Adler.

        No reason to check m_tokenizer twice for 0 in a row.

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

2009-02-13  Lyon Chen  <lyon.chen@torchmobile.com>

        Reviewed by Dave Hyatt.

        Take into account y() + height() when calculating getLowerRightCorner.

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

2009-02-13  Antti Koivisto  <antti@apple.com>

        Reviewed by Dave Hyatt.

        Most of this code was in RenderBox, restore the copyright lines.

        * rendering/RenderBoxModelObject.cpp:
        * rendering/RenderBoxModelObject.h:

2009-02-13  David Hyatt  <hyatt@apple.com>

        Get rid of printBoxDecorations, since it is dead code.

        Reviewed by Dan Bernstein

        * rendering/RenderObject.h:

2009-02-13  Adam Treat  <adam.treat@torchmobile.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=23952
        Add Document::write overload which takes a SegmentedString since this
        is what the tokenizer expects anyway.  Modified JSHTMLDocument so it once
        again calls Document::write instead of injecting the string directly into
        the tokenizer.  This ensures that all document.write's are funneled through
        one method again, but should still be just as fast for JSHTMLDocumentCustom.

        * bindings/js/JSHTMLDocumentCustom.cpp:
        (WebCore::documentWrite):
        * dom/Document.cpp:
        (WebCore::Document::write):
        * dom/Document.h:

2009-02-13  David Hyatt  <hyatt@apple.com>

        Reviewed by Simon Fraser

        Remove updateWidgetPosition on RenderObject.  Change RenderView's set of widgets
        to have a tighter type: RenderWidget instead of RenderObject.  Devirtualize
        updateWidgetPosition, since all RenderWidgets (except for applets) are now
        RenderParts also.

        * rendering/RenderObject.cpp:
        * rendering/RenderObject.h:
        * rendering/RenderPart.cpp:
        * rendering/RenderPart.h:
        * rendering/RenderView.cpp:
        (WebCore::RenderView::updateWidgetPositions):
        (WebCore::RenderView::addWidget):
        (WebCore::RenderView::removeWidget):
        * rendering/RenderView.h:
        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::updateWidgetPosition):
        * rendering/RenderWidget.h:

2009-02-13  David Hyatt  <hyatt@apple.com>

        Reviewed by Eric Seidel

        Remove isEditable() on RenderObject.  It is dead code.

        * rendering/RenderObject.cpp:
        * rendering/RenderObject.h:

2009-02-13  David Hyatt  <hyatt@apple.com>

        Reviewed by Eric Seidel

        Add isTextControl() to RenderObject.  Patch call sites thats asked isTextField() || isTextArea() to just use
        isTextControl() instead.

        Add a toRenderTextControl converter for doing checked casting to RenderTextControls.

        * dom/Document.cpp:
        (WebCore::Document::setFocusedNode):
        * dom/InputElement.cpp:
        (WebCore::InputElement::updateSelectionRange):
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplacementFragment::ReplacementFragment):
        * editing/TextIterator.cpp:
        (WebCore::TextIterator::handleReplacedElement):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::selectionStart):
        (WebCore::HTMLInputElement::selectionEnd):
        (WebCore::HTMLInputElement::setSelectionStart):
        (WebCore::HTMLInputElement::setSelectionEnd):
        (WebCore::HTMLInputElement::select):
        (WebCore::HTMLInputElement::defaultEventHandler):
        (WebCore::HTMLInputElement::selection):
        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::selectionStart):
        (WebCore::HTMLTextAreaElement::selectionEnd):
        (WebCore::HTMLTextAreaElement::setSelectionStart):
        (WebCore::HTMLTextAreaElement::setSelectionEnd):
        (WebCore::HTMLTextAreaElement::select):
        (WebCore::HTMLTextAreaElement::setSelectionRange):
        (WebCore::HTMLTextAreaElement::appendFormData):
        (WebCore::HTMLTextAreaElement::updateValue):
        (WebCore::HTMLTextAreaElement::selection):
        * page/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::isNativeTextControl):
        (WebCore::AccessibilityRenderObject::text):
        (WebCore::AccessibilityRenderObject::selectedText):
        (WebCore::AccessibilityRenderObject::selectedTextRange):
        (WebCore::AccessibilityRenderObject::setSelectedTextRange):
        (WebCore::AccessibilityRenderObject::visiblePositionForIndex):
        (WebCore::AccessibilityRenderObject::indexForVisiblePosition):
        (WebCore::AccessibilityRenderObject::observableObject):
        * page/Frame.cpp:
        (WebCore::Frame::notifyRendererOfSelectionChange):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::isTextControl):
        (WebCore::objectIsRelayoutBoundary):
        * rendering/RenderTextControl.h:
        (WebCore::RenderTextControl::isTextControl):
        (WebCore::toRenderTextControl):
        * rendering/TextControlInnerElements.cpp:
        (WebCore::TextControlInnerTextElement::defaultEventHandler):
        * wml/WMLInputElement.cpp:
        (WebCore::WMLInputElement::select):
        (WebCore::WMLInputElement::defaultEventHandler):
        (WebCore::WMLInputElement::isConformedToInputMask):

2009-02-13  David Hyatt  <hyatt@apple.com>

        Get rid of isEdited/setEdited on RenderObject.  Devirtualize isEdited/setEdited on RenderTextControl.
        Callers were already asking if the renderer was a text field (or a text area), so it was especially
        pointless to waste a second virtual function call after making one just to determine the object type.

        Reviewed by Simon Fraser

        * dom/Document.cpp:
        (WebCore::Document::setFocusedNode):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::defaultEventHandler):
        * rendering/RenderObject.h:
        * rendering/RenderTextControl.h:
        (WebCore::RenderTextControl::isEdited):
        (WebCore::RenderTextControl::setEdited):

2009-02-13  Scott Violet  <sky@google.com>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=23934
        Skia platform doesn't render text decoration shadows.

        Makes Skia render text decoration shadows correctly. We weren't
        preparing the SkPaint correctly and didn't have a couple of checks
        CG has. Additionally makes the fillColor/strokeColor methods
        consistent.

        This behavior is covered by existing layout tests (see bug for list).

        * platform/graphics/chromium/FontChromiumWin.cpp:
        (WebCore::Font::drawGlyphs):
        (WebCore::Font::drawComplexText):
        * platform/graphics/skia/GraphicsContextSkia.cpp:
        (WebCore::GraphicsContext::drawLineForText):
        * platform/graphics/skia/PlatformContextSkia.cpp:
        (PlatformContextSkia::effectiveFillColor):
        (PlatformContextSkia::effectiveStrokeColor):
        * platform/graphics/skia/PlatformContextSkia.h:

2009-02-12  Darin Fisher  <darin@chromium.org>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=23944
        KURLGoogle's pre-parsed canonicalSpec constructor should take a CString

        * platform/KURL.h:
        * platform/KURLGoogle.cpp:
        (WebCore::KURLGooglePrivate::setUtf8):
        (WebCore::KURLGooglePrivate::setAscii):
        (WebCore::KURLGooglePrivate::init):
        (WebCore::KURLGooglePrivate::replaceComponents):
        (WebCore::KURL::KURL):
        * platform/KURLGooglePrivate.h:

2009-02-13  David Hyatt  <hyatt@apple.com>

        Remove leftmost/rightmost/lowestPosition from RenderObject.  They only need to be called on boxes.

        Reviewed by Dan Bernstein

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::lowestPosition):
        (WebCore::RenderBlock::rightmostPosition):
        (WebCore::RenderBlock::leftmostPosition):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::computeScrollDimensions):
        * rendering/RenderMedia.cpp:
        (WebCore::RenderMedia::lowestPosition):
        (WebCore::RenderMedia::rightmostPosition):
        (WebCore::RenderMedia::leftmostPosition):
        * rendering/RenderObject.h:
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::lowestPosition):
        (WebCore::RenderTableSection::rightmostPosition):
        (WebCore::RenderTableSection::leftmostPosition):

2009-02-12  Simon Fraser  <simon.fraser@apple.com>

        Fix build with ACCELERATED_COMPOSITING turned on.

        toRenderBox()->x() asserts for a layer on an inline; use
        m_owningLayer->renderBoxX() instead.

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::paintIntoLayer):

2009-02-12  Darin Adler  <darin@apple.com>

        Reviewed by Oliver Hunt.

        Speed up document.write a bit.

        * bindings/js/JSHTMLDocumentCustom.cpp:
        (WebCore::documentWrite): Added. Uses SegmentedString to avoid conversion from
        UString to String and to avoid appending strings. Also added code to handle
        newlines efficiently.
        (WebCore::JSHTMLDocument::write): Changed to use documentWrite.
        (WebCore::JSHTMLDocument::writeln): Ditto.

        * dom/Document.cpp:
        (WebCore::Document::prepareToWrite): Added. Refactored the initialization part
        of write into a separate function for use in the JavaScript binding.
        (WebCore::Document::write): Changed to call prepareToWrite.

        * dom/Document.h: Added declaration for prepareToWrite.

2009-02-13  Prasanth Ullattil  <pullatti@trolltech.com>

        Reviewed by Simon Hausmann.

        Fixes crash in the Qt port on Windows with comboboxes

        The focusWidget in the input context is not reset properly.
        The QApplication::setFocusWidget() wont reset the IC if the reason is
        PopupFocusReason, this is not ideal. For the time being we are going
        to do this from webkit itself.

        * platform/qt/QWebPopup.cpp:
        (WebCore::QWebPopup::hidePopup):

2009-02-12  Kevin Ollivier  <kevino@theolliviers.com>

        wx build fix, typo while tweaking last patch for commit.

        * platform/wx/wxcode/gtk/fontprops.cpp:
        (GetTextExtent):

2009-02-12  miggilin  <mr.diggilin@gmail.com>

        Reviewed by Kevin Ollivier.

        Use Cairo/PANGO to fix text measurements and implement proper
        non-kerned text drawing on wxGTK.

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

        * platform/graphics/GlyphBuffer.h:
        * platform/graphics/wx/FontPlatformDataWx.cpp:
        (WebCore::fontWeightToWxFontWeight):
        * platform/graphics/wx/SimpleFontDataWx.cpp:
        (WebCore::SimpleFontData::platformWidthForGlyph):
        * platform/wx/wxcode/fontprops.h:
        * platform/wx/wxcode/gtk/fontprops.cpp:
        (wxFontProperties::wxFontProperties):
        (GetTextExtent):
        * platform/wx/wxcode/gtk/non-kerned-drawing.cpp:
        (WebCore::pangoFontMap):
        (WebCore::createPangoFontForFont):
        (WebCore::createScaledFontForFont):
        (WebCore::pango_font_get_glyph):
        (WebCore::drawTextWithSpacing):
        * platform/wx/wxcode/non-kerned-drawing.h:

2009-02-12  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Simon Fraser

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

        Hook up 3D CSS transforms to the accelerated compositor backend.
        Not enabled by default.

        * page/animation/AnimationBase.cpp:
        (WebCore::blendFunc):
        (WebCore::ensurePropertyMap):
        * page/animation/CompositeAnimation.cpp:
        (WebCore::CompositeAnimationPrivate::updateTransitions):
        * page/animation/ImplicitAnimation.cpp:
        (WebCore::ImplicitAnimation::willNeedService):
        * page/animation/KeyframeAnimation.cpp:
        (WebCore::KeyframeAnimation::willNeedService):
        * platform/graphics/GraphicsLayer.cpp:
        (WebCore::GraphicsLayer::TransformValueList::makeFunctionList):
        (WebCore::GraphicsLayer::dumpProperties):
        * platform/graphics/mac/GraphicsLayerCA.mm:
        (WebCore::copyTransform):
        (WebCore::getValueFunctionNameForTransformOperation):
        (WebCore::GraphicsLayerCA::animateTransform):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::updateBoxModelInfoFromStyle):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateTransform):
        (WebCore::RenderLayer::hasTransformStyle3D):
        (WebCore::RenderLayer::hasPerspective):
        (WebCore::RenderLayer::perspectiveTransform):
        * rendering/RenderLayer.h:
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateGraphicsLayers):
        (WebCore::RenderLayerBacking::updateGraphicsLayerGeometry):
        (WebCore::RenderLayerBacking::computeTransformOrigin):
        (WebCore::RenderLayerBacking::computePerspectiveOrigin):
        * rendering/RenderLayerBacking.h:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::has3DContent):
        (WebCore::requiresCompositingLayerForTransform):
        (WebCore::RenderLayerCompositor::requiresCompositingLayer):
        (WebCore::RenderLayerCompositor::layerHas3DContent):
        * rendering/RenderLayerCompositor.h:

2009-02-12  David Hyatt  <hyatt@apple.com>

        Reviewed by Eric Seidel

        Get rid of containingBlockHeight(), since it had only one implementation (despite being virtual) and just returned
        containingBlock()->availableHeight().  The latter reads better anyway.  Rename containingBlockWidth() to
        containingBlockWidthForContent() and move it to RenderBoxModelObject.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::localCaretRect):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::containingBlockWidthForContent):
        (WebCore::RenderBox::calcWidth):
        (WebCore::RenderBox::calcReplacedWidthUsing):
        * rendering/RenderBox.h:
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::relativePositionOffsetX):
        (WebCore::RenderBoxModelObject::relativePositionOffsetY):
        (WebCore::RenderBoxModelObject::containingBlockWidthForContent):
        * rendering/RenderBoxModelObject.h:
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::marginLeft):
        (WebCore::RenderInline::marginRight):
        * rendering/RenderObject.cpp:
        * rendering/RenderObject.h:
        * rendering/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::calcReplacedWidth):

2009-02-12  Simon Fraser  <simon.fraser@apple.com>

        Fix non-Mac builds by adding Matrix3DTransformOperation.* and
        PerspectiveTransformOperation.*. Cleaned out some cruft in
        the WebCore.vcproj fle.

        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.scons:
        * WebCore.vcproj/WebCore.vcproj:

2009-02-12  David Smith  <catfish.man@gmail.com>

        Reviewed by Dave Hyatt.

        Fix https://bugs.webkit.org/show_bug.cgi?id=23935
        Nested :not() and non-simple selectors in :not() should be invalid

        * css/CSSGrammar.y: Reject nested :not()
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::SelectorChecker::checkOneSelector): ASSERT() rather than checking, since the parser enforces it now

2009-02-12  Kevin Ollivier  <kevino@theolliviers.com>

        wx build fixes.

        * WebCoreSources.bkl:

2009-02-12  Simon Fraser  <simon.fraser@apple.com>

        Fix build with ACCELERATED_COMPOSITING turned on.

        Need to cast toRenderBox() in order to call overflowClipRect().

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateGraphicsLayerGeometry):

2009-02-12  Oliver Hunt  <oliver@apple.com>

        Reviewed by NOBODY (Build fix).

        Fix windows build.

        * css/CSSParser.h:

2009-02-12  David Hyatt  <hyatt@apple.com>

        Rename getOverflowClipRect and getClipRect to overflowClipRect and clipRect.  Move them to RenderBox, since these methods
        only apply to boxes.  Devirtualize clipRect, since it was not subclassed.  Move controlClip stuff to RenderBox also.

        Reviewed by Simon Fraser

        * editing/Editor.cpp:
        (WebCore::Editor::insideVisibleArea):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::overflowClipRect):
        (WebCore::RenderBox::clipRect):
        * rendering/RenderBox.h:
        (WebCore::RenderBox::hasControlClip):
        (WebCore::RenderBox::controlClipRect):
        * rendering/RenderForeignObject.cpp:
        (WebCore::RenderForeignObject::paint):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::calculateClipRects):
        (WebCore::RenderLayer::calculateRects):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateGraphicsLayerGeometry):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::hasClip):
        (WebCore::RenderObject::hasOverflowClip):
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::overflowClipRect):
        * rendering/RenderTable.h:

2009-02-12  Simon Fraser  <simon.fraser@apple.com>

        Fix build with ACCELERATED_COMPOSITING turned on (simple copy/paste error)

        * platform/graphics/mac/GraphicsLayerCA.mm:
        (WebCore::GraphicsLayerCA::setBasicAnimation):

2009-02-12  Julien Chaffraix  <jchaffraix@webkit.org>

        Not reviewed.

        Release build fix when VIDEO is disabled (it should also
        help the builds with WORKERS or XSLT disabled).

        * bindings/js/JSDOMWindowBase.cpp:
        (jsDOMWindowBaseAudio): Added an UNUSED_PARAM for exec and slot when
        VIDEO is disabled.
        (jsDOMWindowBaseWorker): Ditto for WORKERS.
        (jsDOMWindowBaseXSLTProcessor): Ditto for XSLT.

2009-02-12  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Simon Fraser.

        https://bugs.webkit.org/show_bug.cgi?id=23923
        Implement mediaPlayerVolumeChanged so a media engine can report autonomous volume changes.
        Supporting this requires that we know when we are processing a media engine callback so
        we don't turn around and tell the media player to change the volume when it is reporting
        a volume change.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::HTMLMediaElement): initialize m_processingMediaPlayerCallback
        (WebCore::HTMLMediaElement::mediaPlayerNetworkStateChanged): call begin/endProcessingMediaPlayerCallback
        (WebCore::HTMLMediaElement::setNetworkState): logic split out of mediaPlayerNetworkStateChanged
        to make it easier to maintain m_processingMediaPlayerCallback.
        (WebCore::HTMLMediaElement::mediaPlayerReadyStateChanged): call begin/endProcessingMediaPlayerCallback
        (WebCore::HTMLMediaElement::mediaPlayerTimeChanged): Ditto.
        (WebCore::HTMLMediaElement::mediaPlayerRepaint): Ditto.
        (WebCore::HTMLMediaElement::mediaPlayerVolumeChanged): New
        (WebCore::HTMLMediaElement::updateVolume): Don't change media engine volume if we are processing
        a callback from the engine.
        * html/HTMLMediaElement.h:
        (WebCore::HTMLMediaElement::processingMediaPlayerCallback): New, return true if (m_processingMediaPlayerCallback>0)
        (WebCore::HTMLMediaElement::beginProcessingMediaPlayerCallback): New, increment m_processingMediaPlayerCallback
        (WebCore::HTMLMediaElement::endProcessingMediaPlayerCallback): New, decrement m_processingMediaPlayerCallback

2009-02-12  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Simon Fraser.

        Support MPEG content on Mac and Windows.
        <rdar://problem/5917509>
        https://bugs.webkit.org/show_bug.cgi?id=23495

        Test: media/audio-mpeg-supported.html

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

        * platform/graphics/win/QTMovieWin.cpp:
        (QTMovieWin::disableUnsupportedTracks):

        * platform/graphics/win/MediaPlayerPrivateQuickTimeWin.h: fix typo added in r40925

2009-02-12  David Hyatt  <hyatt@apple.com>

        Reviewed by Sam Weinig

        Move containsFloats, hasOverhangingFloats, shrinkToAvoidFloats and avoidsFloats down to
        RenderBox, since these methods only apply to boxes.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::collapseMargins):
        (WebCore::RenderBlock::clearFloatsIfNeeded):
        (WebCore::RenderBlock::layoutBlockChildren):
        (WebCore::RenderBlock::clearFloats):
        (WebCore::RenderBlock::markAllDescendantsWithFloatsForLayout):
        (WebCore::RenderBlock::calcBlockPrefWidths):
        * rendering/RenderBlock.h:
        (WebCore::RenderBlock::containsFloats):
        (WebCore::RenderBlock::hasOverhangingFloats):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::shrinkToAvoidFloats):
        (WebCore::RenderBox::avoidsFloats):
        * rendering/RenderBox.h:
        * rendering/RenderObject.cpp:
        * rendering/RenderObject.h:
        (WebCore::RenderObject::isFloatingOrPositioned):
        * rendering/RenderView.h:

2009-02-12  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Dave Hyatt

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

        Added parsing of 3d transform functions and properties
        (perspective, perspective-origin, transform-style-3d,
        and backface-visibility).

        Test: transforms/3d/cssmatrix-3d-interface.xhtml

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::):
        (WebCore::computedTransform):
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * css/CSSMutableStyleDeclaration.cpp:
        (WebCore::CSSMutableStyleDeclaration::getPropertyValue):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::parseFillProperty):
        (WebCore::CSSParser::parseTransformOriginShorthand):
        (WebCore::TransformOperationInfo::TransformOperationInfo):
        (WebCore::CSSParser::parseTransform):
        (WebCore::CSSParser::parseTransformOrigin):
        (WebCore::CSSParser::parsePerspectiveOrigin):
        * css/CSSParser.h:
        * css/CSSPrimitiveValue.h:
        (WebCore::CSSPrimitiveValue::isUnitTypeLength):
        * css/CSSPropertyNames.in:
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::adjustRenderStyle):
        (WebCore::convertToLength):
        (WebCore::CSSStyleSelector::applyProperty):
        (WebCore::CSSStyleSelector::mapFillSize):
        (WebCore::CSSStyleSelector::mapFillXPosition):
        (WebCore::CSSStyleSelector::mapFillYPosition):
        (WebCore::getTransformOperationType):
        (WebCore::CSSStyleSelector::createTransformOperations):
        * css/CSSValueKeywords.in:
        * css/WebKitCSSTransformValue.cpp:
        (WebCore::WebKitCSSTransformValue::cssText):
        * css/WebKitCSSTransformValue.h:
        (WebCore::WebKitCSSTransformValue::):
        * css/WebKitCSSTransformValue.idl:
        * platform/graphics/transforms/Matrix3DTransformOperation.cpp:
        * platform/graphics/transforms/Matrix3DTransformOperation.h:
        * platform/graphics/transforms/PerspectiveTransformOperation.cpp:
        * platform/graphics/transforms/PerspectiveTransformOperation.h:
        * platform/graphics/transforms/RotateTransformOperation.cpp:
        (WebCore::RotateTransformOperation::blend):
        * platform/graphics/transforms/RotateTransformOperation.h:
        (WebCore::RotateTransformOperation::RotateTransformOperation):
        * platform/graphics/transforms/ScaleTransformOperation.h:
        (WebCore::ScaleTransformOperation::ScaleTransformOperation):
        * platform/graphics/transforms/TransformOperation.h:
        (WebCore::TransformOperation::is3DOperation):
        * platform/graphics/transforms/TransformOperations.h:
        (WebCore::TransformOperations::has3DOperation):
        * platform/graphics/transforms/TranslateTransformOperation.h:
        (WebCore::TranslateTransformOperation::TranslateTransformOperation):

2009-02-12  Kevin Ollivier  <kevino@theolliviers.com>

        wx build fix.

        * webcore-base.bkl:

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

        Reviewed by Darin Adler

        Fix potential ref-count or null-deref problems with C++ objects as Obj-C members.

        * platform/mac/SharedBufferMac.mm: Change to use RefPtr<> instead of ref()/deref().
        (-[WebCoreSharedBufferData dealloc]):
        (-[WebCoreSharedBufferData finalize]):
        (-[WebCoreSharedBufferData initWithSharedBuffer:]):

2009-02-12  David Hyatt  <hyatt@apple.com>

        Remove calcWidth from RenderObject.  Nobody ever called it on RenderObjects.

        Reviewed by Sam Weinig

        * rendering/RenderObject.h:

2009-02-12  David Hyatt  <hyatt@apple.com>

        Reviewed by Mark Rowe

        Fix for regression where form controls would paint yellow highlights.  The containsComposition check needs to
        null check node() now.

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

2009-02-12  Simon Fraser  <simon.fraser@apple.com>

        Build fix

        Change Animation::setDirection() to take the new enum value, and fix
        the single caller.

        Fix build error in MediaPlayerPrivateQTKit.h.

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::mapAnimationDirection):
        * platform/animation/Animation.h:
        (WebCore::Animation::setDirection):
        * platform/graphics/mac/MediaPlayerPrivateQTKit.h:

2009-02-12  David Hyatt  <hyatt@apple.com>

        Reviewed by Simon Fraser

        Remove the overrideSize methods from RenderObject.  Devirtualize all of the accessors on RenderBox.

        * rendering/RenderBox.h:
        * rendering/RenderObject.h:

2009-02-12  Eric Carlson  <eric.carlson@apple.com>

        Darin Adler, Antti Koivisto, Holger Hans Peter Freyther

        Bug 23797: A platform should be able to use more than one media engine for <video> and <audio>
        https://bugs.webkit.org/show_bug.cgi?id=23797

        * WebCore.xcodeproj/project.pbxproj: add MediaPlayerPrivate.h

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::load): selectMediaURL now also returns a MIME type, pass it to
        MediaPlayer::load so it can choose the right media engine
        (WebCore::HTMLMediaElement::selectMediaURL): renamed from pickMedia. use MIMETypeRegistry
        functions to strip params from the url and extract the codecs parameter. call
        MediaPlayer::supportsType to see if we can open the file since only a media engine can
        answer questions about supported type+codecs.
        * html/HTMLMediaElement.h:

        * platform/MIMETypeRegistry.cpp:
        (WebCore::MIMETypeRegistry::getParameterFromMIMEType): New, find and return a MIME type parameter
        (WebCore::MIMETypeRegistry::stripParametersFromMIMEType): New, strip all parameters from a MIME type
        * platform/MIMETypeRegistry.h:

        * platform/graphics/MediaPlayer.cpp:
        (WebCore::NullMediaPlayerPrivate::NullMediaPlayerPrivate):
        (WebCore::NullMediaPlayerPrivate::load):
        (WebCore::NullMediaPlayerPrivate::cancelLoad):
        (WebCore::NullMediaPlayerPrivate::play):
        (WebCore::NullMediaPlayerPrivate::pause):
        (WebCore::NullMediaPlayerPrivate::naturalSize):
        (WebCore::NullMediaPlayerPrivate::hasVideo):
        (WebCore::NullMediaPlayerPrivate::setVisible):
        (WebCore::NullMediaPlayerPrivate::duration):
        (WebCore::NullMediaPlayerPrivate::currentTime):
        (WebCore::NullMediaPlayerPrivate::seek):
        (WebCore::NullMediaPlayerPrivate::seeking):
        (WebCore::NullMediaPlayerPrivate::setEndTime):
        (WebCore::NullMediaPlayerPrivate::setRate):
        (WebCore::NullMediaPlayerPrivate::paused):
        (WebCore::NullMediaPlayerPrivate::setVolume):
        (WebCore::NullMediaPlayerPrivate::networkState):
        (WebCore::NullMediaPlayerPrivate::readyState):
        (WebCore::NullMediaPlayerPrivate::maxTimeSeekable):
        (WebCore::NullMediaPlayerPrivate::maxTimeBuffered):
        (WebCore::NullMediaPlayerPrivate::dataRate):
        (WebCore::NullMediaPlayerPrivate::totalBytesKnown):
        (WebCore::NullMediaPlayerPrivate::totalBytes):
        (WebCore::NullMediaPlayerPrivate::bytesLoaded):
        (WebCore::NullMediaPlayerPrivate::setRect):
        (WebCore::NullMediaPlayerPrivate::paint):
        (WebCore::createNullMediaPlayer):
        Do nothing media player so MediaPlayer doesn't have to NULL check before calling current engine.

        (WebCore::MediaPlayerFactory::MediaPlayerFactory): New, factory constructor.
        (WebCore::installedMediaEngines): New, returns vector of all installed engines.
        (WebCore::addMediaEngine): New, add a media engine to the cache.
        (WebCore::chooseBestEngineForTypeAndCodecs): New, return an engine that might support a MIME type.
        (WebCore::MediaPlayer::MediaPlayer): create NULL media player so we have a default. Initialize m_currentMediaEngine.
        (WebCore::MediaPlayer::~MediaPlayer): don't need to delete m_private, it is now an OwnPtr.
        (WebCore::MediaPlayer::load): Take MIME type as well as url, since we need it to find the right
          media engine. If no MIME type is provided, try to devine one from the url. Choose a media engine
          based on the MIME type and codecs parameter.
        (WebCore::MediaPlayer::currentTime): Remove excess white space.
        (WebCore::MediaPlayer::supportsType): Take codecs param as well as MIME type. Return enum so we can
        indicate "maybe" condition.
        (WebCore::MediaPlayer::getSupportedTypes): Build up list of MIME types by consulting all engines.
        (WebCore::MediaPlayer::isAvailable): return true if any media engine is installed.

        * platform/graphics/MediaPlayer.h:
        (WebCore::MediaPlayer::):
        (WebCore::MediaPlayer::frameView): accessor function.

        * platform/graphics/MediaPlayerPrivate.h: New, declares abstract interface for media engines.
        (WebCore::MediaPlayerPrivateInterface::~MediaPlayerPrivateInterface):
        (WebCore::MediaPlayerPrivateInterface::totalBytesKnown):

        * platform/graphics/chromium/MediaPlayerPrivateChromium.h: Add support for engine factory

        * platform/graphics/gtk/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivate::create): New, media engine factory function
        (WebCore::MediaPlayerPrivate::registerMediaEngine): Register engine with MediaPlayer factory
        (WebCore::MediaPlayerPrivate::load): URL is a const String.
        (WebCore::MediaPlayerPrivate::duration): Declare const.
        (WebCore::MediaPlayerPrivate::naturalSize): Ditto.
        (WebCore::MediaPlayerPrivate::hasVideo): Ditto.
        (WebCore::MediaPlayerPrivate::networkState): Ditto.
        (WebCore::MediaPlayerPrivate::readyState): Ditto.
        (WebCore::MediaPlayerPrivate::maxTimeBuffered): Ditto.
        (WebCore::MediaPlayerPrivate::maxTimeSeekable): Ditto.
        (WebCore::MediaPlayerPrivate::maxTimeLoaded): Ditto.
        (WebCore::MediaPlayerPrivate::bytesLoaded): Ditto.
        (WebCore::MediaPlayerPrivate::totalBytesKnown): Ditto.
        (WebCore::MediaPlayerPrivate::totalBytes): Ditto.
        (WebCore::MediaPlayerPrivate::supportsType): Return MediaPlayer::SupportsType enum instead of bool.
        * platform/graphics/gtk/MediaPlayerPrivateGStreamer.h:
        (WebCore::MediaPlayerPrivate::isAvailable):

        * platform/graphics/mac/MediaPlayerPrivateQTKit.h:
        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivateQTKit::create): New, media engine factory function
        (WebCore::MediaPlayerPrivateQTKit::registerMediaEngine): Register engine with MediaPlayer factory
        (WebCore::MediaPlayerPrivate::createQTMovieView): don't access MediaPlayer->m_frameView directly,
        use accessor function.
        (WebCore::MediaPlayerPrivate::setUpVideoRendering): Ditto.
        (WebCore::MediaPlayerPrivate::paint): Ditto.
        (WebCore::mimeTypeCache): New.
        (WebCore::MediaPlayerPrivate::getSupportedTypes): New, media engine factory function.
        (WebCore::MediaPlayerPrivate::supportsType): return MediaPlayer::SupportsType enum instead of bool
        (-[WebCoreMovieObserver initWithCallback:]): fix formatting

        * platform/graphics/qt/MediaPlayerPrivatePhonon.cpp:
        (WebCore::MediaPlayerPrivate::create):
        (WebCore::MediaPlayerPrivate::registerMediaEngine):
        (WebCore::MediaPlayerPrivate::supportsType):
        (WebCore::MediaPlayerPrivate::load): URL is a const String.
        * platform/graphics/qt/MediaPlayerPrivatePhonon.h:
        (WebCore::MediaPlayerPrivate::isAvailable):

        * platform/graphics/win/MediaPlayerPrivateQuickTimeWin.cpp:
        (WebCore::MediaPlayerPrivate::create): New, media engine factory function
        (WebCore::MediaPlayerPrivate::registerMediaEngine): New, register engine with MediaPlayer factory
        (WebCore::MediaPlayerPrivate::load): URL is a const String.
        (WebCore::MediaPlayerPrivate::paint): don't access MediaPlayer->m_frameView directly,
        use accessor function.
        (WebCore::mimeTypeCache): New.
        (WebCore::MediaPlayerPrivateQTWin::getSupportedTypes): New, media engine factory function.
        (WebCore::MediaPlayerPrivateQTWin::supportsType): return MediaPlayer::SupportsType enum instead of bool
        * platform/graphics/win/MediaPlayerPrivateQuickTimeWin.h:

2009-02-12  Julien Chaffraix  <jchaffraix@webkit.org>

        Reviewed by Darin Adler.

        Test: fast/dom/prefixed-image-tag.xhtml

        Bug 23915: Remove setPrefix work-around in Document::createElement(QualifiedName, bool)

        Instead we now directly propage the QualifiedName inside the generated Factory.

        Test: fast/dom/prefixed-image-tag.xhtml

        * dom/Document.cpp:
        (WebCore::Document::createElement): Removed the setPrefix work-around
        and replaced it with an ASSERT to catch mistakes inside the Factory code.
        Remove the unneeded ExceptionCode argument.

        (WebCore::Document::createElementNS): Removed ExceptionCode argument.
        * dom/Document.h: Updated the signature.
        * dom/XMLTokenizerLibxml2.cpp:
        (WebCore::XMLTokenizer::startElementNs): Removed ExceptionCode argument.
        * dom/XMLTokenizerQt.cpp: Ditto.
        (WebCore::XMLTokenizer::parseStartElement): Ditto.

        * dom/make_names.pl: Implemented the QualifiedName propogation logic
        in the Factory.

2009-02-12  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dave Hyatt

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

        Define enum values for Animation::direction(), and one for
        IterationCountInfinite to make the code more self-documenting.

        Order the member vars of Animation to optimize packing.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * platform/animation/Animation.cpp:
        (WebCore::Animation::Animation):
        (WebCore::Animation::operator=):
        (WebCore::Animation::animationsMatch):
        * platform/animation/Animation.h:
        (WebCore::Animation::):
        (WebCore::Animation::direction):
        (WebCore::Animation::initialAnimationDirection):
        * platform/graphics/mac/GraphicsLayerCA.mm:
        (WebCore::GraphicsLayerCA::setBasicAnimation):
        (WebCore::GraphicsLayerCA::setKeyframeAnimation):

2009-02-12  Christian Dywan  <christian@twotoasts.de>

        Reviewed by Holger Freyther.

        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::ResourceHandle::startHttp): Don't use O_CLOEXEC for now.

2009-02-12  Julien Chaffraix  <jchaffraix@webkit.org>

        Reviewed by Darin Adler.

        Bug 23826: Potential bug with before/after rule while moving element from one document to another

        Moved the document before/after toggle from the constructor to insertedIntoDocument.

        Test: fast/css-generated-content/beforeAfter-interdocument.html

        * html/HTMLQuoteElement.cpp:
        (WebCore::HTMLQuoteElement::HTMLQuoteElement):
        (WebCore::HTMLQuoteElement::insertedIntoDocument):
        * html/HTMLQuoteElement.h:

2009-02-12  David Hyatt  <hyatt@apple.com>

        Reviewed by Simon Fraser

        Fix for https://bugs.webkit.org/show_bug.cgi?id=23912

        I have no idea why this broke.  As far as I can tell the old code never should have worked in
        the first place.  Add code to handleWheelEvent that will find an enclosing renderer for a node
        in order to attempt a wheel scroll.

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

2009-02-12  David Hyatt  <hyatt@apple.com>

        Move the functions that paint borders, box shadows and border images into RenderBoxModelObject.  drawBorder and drawBorderArc, because they are used
        for outlines as well as borders, need to stay in RenderObject.  Rename them to drawLineForBoxSide and drawArcForBoxSide in order to reflect their
        more generic use.  Rename the BorderSide struct to BoxSide, since the concept of "side" is just a rectangle concept and not a border concept.

        Reviewed by Simon Fraser

        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::paintFillLayer):
        (WebCore::InlineFlowBox::paintBoxShadow):
        (WebCore::InlineFlowBox::paintBoxDecorations):
        (WebCore::InlineFlowBox::paintMask):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::paintColumns):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintNinePieceImage):
        (WebCore::RenderBoxModelObject::paintBorder):
        (WebCore::RenderBoxModelObject::paintBoxShadow):
        * rendering/RenderBoxModelObject.h:
        * rendering/RenderFieldset.cpp:
        (WebCore::RenderFieldset::paintBorderMinusLegend):
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::paintOutlineForLine):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::drawLineForBoxSide):
        (WebCore::RenderObject::drawArcForBoxSide):
        (WebCore::RenderObject::paintOutline):
        * rendering/RenderObject.h:
        (WebCore::):
        (WebCore::RenderObject::hasBoxDecorations):
        * rendering/RenderTableCell.cpp:
        (WebCore::CollapsedBorders::addBorder):
        (WebCore::RenderTableCell::paintCollapsedBorder):

2009-02-12  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Simon Fraser

        Bug 18322: video element should have ui when scripting is disabled
        https://bugs.webkit.org/show_bug.cgi?id=18322

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::controls): always return 'true' when JavaScript is disabled.
        * manual-tests/media-controls-when-javascript-disabled.html: Added.

2009-02-12  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=23906
        Add custom V8 bindings for HTMLPlugInElement.

        * bindings/v8/custom/V8HTMLPlugInElementCustom.cpp: Added.
        (WebCore::NAMED_PROPERTY_GETTER):
        (WebCore::NAMED_PROPERTY_SETTER):
        (WebCore::CALLBACK_FUNC_DECL):
        (WebCore::INDEXED_PROPERTY_GETTER):
        (WebCore::INDEXED_PROPERTY_SETTER):

2009-02-12  Gustavo Noronha Silva  <gns@gnome.org>

        Reviewed by Mark Rowe.

        [GTK] Soup backend must handle upload of multiple files
        https://bugs.webkit.org/show_bug.cgi?id=18343

        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::):
        (WebCore::freeFileMapping):
        (WebCore::ResourceHandle::startHttp): Support multipart request bodies
        mmap'ing files to be uploaded.

2009-02-12  Adam Treat  <adam.treat@torchmobile.com>

        Fix the Qt build following r40871 which changed RenderObject::element()
        into RenderObject::node().

        * platform/qt/RenderThemeQt.cpp:
        (WebCore::RenderThemeQt::getMediaElementFromRenderObject):
        (WebCore::RenderThemeQt::getMediaControlForegroundColor):

2009-02-12  Alexey Proskuryakov  <ap@webkit.org>

        Build fix.

        * platform/graphics/transforms/RotateTransformOperation.cpp: Include <algorithm>.

2009-02-12  Jian Li  <jianli@chromium.org>

        Reviewed by Alexey Proskuryakov.

        Change worker code to use different proxy class pointers.
        https://bugs.webkit.org/show_bug.cgi?id=23859

        This is a step towards using separate proxies in multi-process implementation.

        * bindings/js/WorkerScriptController.cpp:
        (WebCore::WorkerScriptController::evaluate):
        * dom/Worker.cpp:
        (WebCore::Worker::Worker):
        (WebCore::Worker::~Worker):
        (WebCore::Worker::postMessage):
        (WebCore::Worker::terminate):
        (WebCore::Worker::hasPendingActivity):
        (WebCore::Worker::notifyFinished):
        (WebCore::Worker::dispatchMessage):
        * dom/Worker.h:
        * dom/WorkerContext.cpp:
        (WebCore::WorkerContext::~WorkerContext):
        (WebCore::WorkerContext::reportException):
        (WebCore::WorkerContext::addMessage):
        (WebCore::WorkerContext::postMessage):
        (WebCore::WorkerContext::dispatchMessage):
        * dom/WorkerContext.h:
        * dom/WorkerContextProxy.h:
        * dom/WorkerMessagingProxy.cpp:
        (WebCore::MessageWorkerContextTask::performTask):
        (WebCore::MessageWorkerTask::performTask):
        (WebCore::WorkerContextProxy::create):
        (WebCore::WorkerMessagingProxy::WorkerMessagingProxy):
        (WebCore::WorkerMessagingProxy::~WorkerMessagingProxy):
        (WebCore::WorkerMessagingProxy::startWorkerContext):
        (WebCore::postConsoleMessageTask):
        (WebCore::WorkerMessagingProxy::postConsoleMessageToWorkerObject):
        (WebCore::WorkerMessagingProxy::workerThreadCreated):
        * dom/WorkerMessagingProxy.h:
        * dom/WorkerObjectProxy.h:
        * dom/WorkerThread.cpp:
        (WebCore::WorkerThread::create):
        (WebCore::WorkerThread::WorkerThread):
        (WebCore::WorkerThread::workerThread):
        * dom/WorkerThread.h:
        (WebCore::WorkerThread::workerObjectProxy):
        * loader/WorkerThreadableLoader.cpp:
        (WebCore::WorkerThreadableLoader::WorkerThreadableLoader):

2009-02-12  David Levin  <levin@chromium.org>

        Reviewed by Alexey Proskuryakov.

        Bug 23688: ThreadableLoader needs a sync implementation for Workers.
        <https://bugs.webkit.org/show_bug.cgi?id=23688>

        Add ResourceError to ThreadableLoaderClient.

        No observable change in behavior, so no test.

        * loader/DocumentThreadableLoader.cpp:
        (WebCore::DocumentThreadableLoader::create):
        (WebCore::DocumentThreadableLoader::willSendRequest):
        (WebCore::DocumentThreadableLoader::didFail):
        * loader/ThreadableLoaderClient.h:
        (WebCore::ThreadableLoaderClient::didFail):
        (WebCore::ThreadableLoaderClient::didFailWillSendRequestCheck):
        * loader/ThreadableLoaderClientWrapper.h:
        (WebCore::ThreadableLoaderClientWrapper::didFail):
        * loader/WorkerThreadableLoader.cpp:
        (WebCore::WorkerThreadableLoader::MainThreadBridge::mainThreadCreateLoader):
        (WebCore::workerContextDidFail):
        (WebCore::WorkerThreadableLoader::MainThreadBridge::didFail):
        * loader/WorkerThreadableLoader.h:
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::didFail):
        (WebCore::XMLHttpRequest::didFailWillSendRequestCheck):
        * xml/XMLHttpRequest.h:

2009-02-11  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dave Hyatt

        Fix the build on Leopard with ACCELERATED_COMPOSITING turned on.

        * WebCore.xcodeproj/project.pbxproj:
        FloatPoint3D needs to be a private header, since it's included by GraphicsLayer.h
        * platform/graphics/mac/GraphicsLayerCA.mm:
        (WebCore::getTransformFunctionValue):
        (WebCore::caValueFunctionSupported):
        (WebCore::GraphicsLayerCA::setAnchorPoint):
        (WebCore::GraphicsLayerCA::setPreserves3D):
        (WebCore::GraphicsLayerCA::setContentsToImage):
        (WebCore::GraphicsLayerCA::setBasicAnimation):
        (WebCore::GraphicsLayerCA::setKeyframeAnimation):
        * rendering/RenderLayer.h:
        (WebCore::RenderLayer::isRootLayer):
        Fix isRootLayer to return true for the renderView's layer, not the root
        renderer's layer.

2009-02-11  Adele Peterson  <adele@apple.com>

        Reviewed by Oliver Hunt.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=23910
        <rdar://problem/6160546> REGRESSION: In Full page mode, movie controller hides when I drag the knob if movie is playing

        * rendering/RenderMedia.cpp: (WebCore::RenderMedia::forwardEvent):
        When we get a mouseOut event, consider the mouse as still within the RenderMedia if the relatedTarget is a descendant.

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

        Remove all of the inline box wrapper functions from RenderObject, since they only apply to RenderBox.  Devirtualize the functions.
        Patch all of the call sites to convert to a RenderBox.

        Reviewed by Simon Fraser

        * dom/Position.cpp:
        (WebCore::nextRenderedEditable):
        (WebCore::previousRenderedEditable):
        (WebCore::Position::getInlineBoxAndOffset):
        * rendering/InlineBox.cpp:
        (WebCore::InlineBox::deleteLine):
        (WebCore::InlineBox::extractLine):
        (WebCore::InlineBox::attachLine):
        * rendering/RenderLineBoxList.cpp:
        (WebCore::RenderLineBoxList::dirtyLinesFromChangedChild):
        * rendering/RenderObject.cpp:
        * rendering/RenderObject.h:
        * rendering/RenderObjectChildList.cpp:
        (WebCore::RenderObjectChildList::removeChildNode):
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::textWithHardLineBreaks):

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

        Eliminate createInlineBox and dirtyLineBoxes from RenderObject.  These functions have been devirtualized.
        The single call site now calls a helper function that just bit checks and casts before calling the correct
        type.  RenderBlock's dirtyLineBoxes function was dead code (caused by the RenderFlow deletion), so it has
        just been removed.

        Reviewed by Eric Seidel

        * rendering/RenderBR.cpp:
        * rendering/RenderBR.h:
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::createRootInlineBox):
        * rendering/RenderBlock.h:
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::createInlineBox):
        * rendering/RenderBox.h:
        * rendering/RenderCounter.cpp:
        * rendering/RenderCounter.h:
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::createInlineFlowBox):
        * rendering/RenderInline.h:
        * rendering/RenderObject.cpp:
        * rendering/RenderObject.h:
        * rendering/RenderSVGInlineText.cpp:
        (WebCore::RenderSVGInlineText::createTextBox):
        * rendering/RenderSVGInlineText.h:
        (WebCore::RenderSVGInlineText::isSVGText):
        * rendering/RenderText.cpp:
        (WebCore::RenderText::createTextBox):
        (WebCore::RenderText::createInlineTextBox):
        * rendering/RenderText.h:
        * rendering/bidi.cpp:
        (WebCore::createInlineBoxForRenderer):
        (WebCore::RenderBlock::createLineBoxes):
        (WebCore::RenderBlock::constructLine):
        (WebCore::RenderBlock::layoutInlineChildren):

2009-02-11  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Dave Hyatt.

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

        Adds support for 3D CSS properties (transform-style-3d, perspective,
        perspective-origin, and backface-visibility) to RenderStyle and friends

        * platform/graphics/transforms/TransformOperation.h
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::diff):
        (WebCore::RenderStyle::applyTransform):
        * rendering/style/RenderStyle.h:
        (WebCore::InheritedFlags::transformOriginZ):
        (WebCore::InheritedFlags::hasTransformRelatedProperty):
        (WebCore::InheritedFlags::transformStyle3D):
        (WebCore::InheritedFlags::backfaceVisibility):
        (WebCore::InheritedFlags::perspective):
        (WebCore::InheritedFlags::perspectiveOriginX):
        (WebCore::InheritedFlags::perspectiveOriginY):
        (WebCore::InheritedFlags::setTransformOriginZ):
        (WebCore::InheritedFlags::setTransformStyle3D):
        (WebCore::InheritedFlags::setBackfaceVisibility):
        (WebCore::InheritedFlags::setPerspective):
        (WebCore::InheritedFlags::setPerspectiveOriginX):
        (WebCore::InheritedFlags::setPerspectiveOriginY):
        (WebCore::InheritedFlags::initialTransformOriginZ):
        (WebCore::InheritedFlags::initialTransformStyle3D):
        (WebCore::InheritedFlags::initialBackfaceVisibility):
        (WebCore::InheritedFlags::initialPerspective):
        (WebCore::InheritedFlags::initialPerspectiveOriginX):
        (WebCore::InheritedFlags::initialPerspectiveOriginY):
        * rendering/style/RenderStyleConstants.h:
        (WebCore::):
        * rendering/style/StyleRareNonInheritedData.cpp:
        (WebCore::StyleRareNonInheritedData::StyleRareNonInheritedData):
        (WebCore::StyleRareNonInheritedData::operator==):
        * rendering/style/StyleRareNonInheritedData.h:
        * rendering/style/StyleTransformData.cpp:
        (WebCore::StyleTransformData::StyleTransformData):
        (WebCore::StyleTransformData::operator==):
        * rendering/style/StyleTransformData.h:

2009-02-11  Simon Fraser  <simon.fraser@apple.com>

        No review.

        Fix ACCELERATED_COMPOSITING build.

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::createGraphicsLayer):
        (WebCore::RenderLayerBacking::updateGraphicsLayerGeometry):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::updateLayerCompositingState):

2009-02-11  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dave Hyatt

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

        Add a bit on RenderStyle that gets set when running accelerated
        transitions of transform or opacity. These ensure that styles
        compare as different during the transition, so that interruption
        can be detected reliably.

        * page/animation/ImplicitAnimation.cpp:
        (WebCore::ImplicitAnimation::animate):
        * rendering/style/RenderStyle.h:
        (WebCore::InheritedFlags::isRunningAcceleratedAnimation):
        (WebCore::InheritedFlags::setIsRunningAcceleratedAnimation):
        * rendering/style/StyleRareNonInheritedData.cpp:
        (WebCore::StyleRareNonInheritedData::StyleRareNonInheritedData):
        (WebCore::StyleRareNonInheritedData::operator==):
        * rendering/style/StyleRareNonInheritedData.h:

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

        Eliminate the virtual position() function from RenderObject.  Rename the position() overrides
        in RenderText and RenderBox to positionLineBox and devirtualize them.

        Patch the one call site to just check for isText() and isBox() and call the methods directly.

        Remove some unnecessary overrides of position() on table sections and rows.

        Reviewed by Simon Fraser

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::positionLineBox):
        * rendering/RenderBox.h:
        * rendering/RenderObject.h:
        * rendering/RenderSVGRoot.cpp:
        * rendering/RenderSVGRoot.h:
        * rendering/RenderTableRow.h:
        (WebCore::RenderTableRow::lineHeight):
        * rendering/RenderTableSection.h:
        (WebCore::RenderTableSection::lineHeight):
        * rendering/RenderText.cpp:
        (WebCore::RenderText::positionLineBox):
        * rendering/RenderText.h:
        * rendering/bidi.cpp:
        (WebCore::RenderBlock::computeVerticalPositionsForLine):

2009-02-11  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=23901
        Add HTML options/collections V8 custom bindings.

        * bindings/v8/custom/V8HTMLCollectionCustom.cpp: Added.
        (WebCore::getNamedItems):
        (WebCore::getItem):
        (WebCore::NAMED_PROPERTY_GETTER):
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8HTMLFormElementCustom.cpp: Added.
        (WebCore::NAMED_PROPERTY_GETTER):
        * bindings/v8/custom/V8HTMLInputElementCustom.cpp:
        (WebCore::ACCESSOR_GETTER):
        (WebCore::ACCESSOR_SETTER):
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8HTMLOptionsCollectionCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        (WebCore::ACCESSOR_SETTER):
        * bindings/v8/custom/V8HTMLSelectElementCustom.cpp: Added.
        (WebCore::CALLBACK_FUNC_DECL):
        (WebCore::removeElement):
        * bindings/v8/custom/V8HTMLSelectElementCustom.h: Added.
        * bindings/v8/custom/V8NamedNodesCollection.cpp: Added.
        (WebCore::V8NamedNodesCollection::item):
        (WebCore::V8NamedNodesCollection::itemWithName):
        * bindings/v8/custom/V8NamedNodesCollection.h: Added.
        (WebCore::V8NamedNodesCollection::V8NamedNodesCollection):
        (WebCore::V8NamedNodesCollection::length):

2009-02-11  Dimitri Dupuis-latour  <dupuislatour@apple.com>

        Added a preference to disable some Inspector's panels (rdar://6419624, rdar://6419645).
        This is controlled via the 'WebKitInspectorHiddenPanels' key; if nothing is specified, all panels are shown.

        Reviewed by Timothy Hatcher.

        * inspector/InspectorClient.h:
        * inspector/InspectorController.cpp:
        (WebCore::hiddenPanels):
        (WebCore::InspectorController::hiddenPanels):
        (WebCore::InspectorController::windowScriptObjectAvailable):
        * inspector/InspectorController.h:
        * inspector/front-end/inspector.js:
        (WebInspector.loaded):
        * loader/EmptyClients.h:
        (WebCore::EmptyInspectorClient::hiddenPanels):

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

        Combine RenderObject::element() and RenderObject::node() into a single function.
        node() now has the "anonymous bit" checking behavior of element() and will
        return 0 for anonymous content.  This patch switches all callers of element()
        to node() and patches old callers of node() to deal with situations where they
        did not expect node() to be 0.  A bunch of node() calls were calling stuff on
        Document that they clearly didn't intend, so overall this is a nice improvement.

        Reviewed by Sam Weinig

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::getUpperLeftCorner):
        * dom/Element.cpp:
        (WebCore::Element::offsetParent):
        * dom/Position.cpp:
        (WebCore::Position::hasRenderedNonAnonymousDescendantsWithHeight):
        * editing/ModifySelectionListLevel.cpp:
        (WebCore::getStartEndListChildren):
        (WebCore::IncreaseSelectionListLevelCommand::doApply):
        (WebCore::DecreaseSelectionListLevelCommand::doApply):
        * editing/TextIterator.cpp:
        (WebCore::TextIterator::advance):
        * editing/VisiblePosition.cpp:
        (WebCore::VisiblePosition::leftVisuallyDistinctCandidate):
        (WebCore::VisiblePosition::rightVisuallyDistinctCandidate):
        * editing/visible_units.cpp:
        (WebCore::startPositionForLine):
        (WebCore::endPositionForLine):
        * page/AXObjectCache.cpp:
        (WebCore::AXObjectCache::get):
        * page/AccessibilityList.cpp:
        (WebCore::AccessibilityList::isUnorderedList):
        (WebCore::AccessibilityList::isOrderedList):
        (WebCore::AccessibilityList::isDefinitionList):
        * page/AccessibilityListBox.cpp:
        (WebCore::AccessibilityListBox::doAccessibilityHitTest):
        * page/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::isPasswordField):
        (WebCore::AccessibilityRenderObject::isFileUploadButton):
        (WebCore::AccessibilityRenderObject::isInputImage):
        (WebCore::AccessibilityRenderObject::isMultiSelect):
        (WebCore::AccessibilityRenderObject::isControl):
        (WebCore::AccessibilityRenderObject::getAttribute):
        (WebCore::AccessibilityRenderObject::anchorElement):
        (WebCore::AccessibilityRenderObject::actionElement):
        (WebCore::AccessibilityRenderObject::mouseButtonListener):
        (WebCore::AccessibilityRenderObject::helpText):
        (WebCore::AccessibilityRenderObject::textUnderElement):
        (WebCore::AccessibilityRenderObject::hasIntValue):
        (WebCore::AccessibilityRenderObject::intValue):
        (WebCore::AccessibilityRenderObject::labelElementContainer):
        (WebCore::AccessibilityRenderObject::title):
        (WebCore::AccessibilityRenderObject::accessibilityDescription):
        (WebCore::AccessibilityRenderObject::boundingBoxRect):
        (WebCore::AccessibilityRenderObject::checkboxOrRadioRect):
        (WebCore::AccessibilityRenderObject::titleUIElement):
        (WebCore::AccessibilityRenderObject::accessibilityIsIgnored):
        (WebCore::AccessibilityRenderObject::text):
        (WebCore::AccessibilityRenderObject::ariaSelectedTextDOMRange):
        (WebCore::AccessibilityRenderObject::accessKey):
        (WebCore::AccessibilityRenderObject::setSelectedTextRange):
        (WebCore::AccessibilityRenderObject::url):
        (WebCore::AccessibilityRenderObject::isFocused):
        (WebCore::AccessibilityRenderObject::setFocused):
        (WebCore::AccessibilityRenderObject::setValue):
        (WebCore::AccessibilityRenderObject::isEnabled):
        (WebCore::AccessibilityRenderObject::visiblePositionRange):
        (WebCore::AccessibilityRenderObject::index):
        (WebCore::AccessibilityRenderObject::activeDescendant):
        (WebCore::AccessibilityRenderObject::handleActiveDescendantChanged):
        (WebCore::AccessibilityRenderObject::observableObject):
        (WebCore::AccessibilityRenderObject::roleValue):
        (WebCore::AccessibilityRenderObject::canSetFocusAttribute):
        (WebCore::AccessibilityRenderObject::ariaListboxSelectedChildren):
        * page/AccessibilityTable.cpp:
        (WebCore::AccessibilityTable::isTableExposableThroughAccessibility):
        (WebCore::AccessibilityTable::title):
        * page/AccessibilityTableCell.cpp:
        (WebCore::AccessibilityTableCell::titleUIElement):
        * page/AccessibilityTableColumn.cpp:
        (WebCore::AccessibilityTableColumn::headerObjectForSection):
        * page/AccessibilityTableRow.cpp:
        (WebCore::AccessibilityTableRow::headerObject):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::dispatchMouseEvent):
        (WebCore::EventHandler::canMouseDownStartSelect):
        (WebCore::EventHandler::canMouseDragExtendSelect):
        (WebCore::EventHandler::shouldDragAutoNode):
        * page/Frame.cpp:
        (WebCore::Frame::searchForLabelsAboveCell):
        (WebCore::Frame::setFocusedNodeIfNeeded):
        * page/FrameView.cpp:
        (WebCore::FrameView::updateOverflowStatus):
        * page/animation/AnimationBase.cpp:
        (WebCore::AnimationBase::updateStateMachine):
        * page/animation/AnimationController.cpp:
        (WebCore::AnimationControllerPrivate::updateAnimationTimer):
        (WebCore::AnimationController::cancelAnimations):
        (WebCore::AnimationController::updateAnimations):
        * page/animation/KeyframeAnimation.cpp:
        (WebCore::KeyframeAnimation::KeyframeAnimation):
        (WebCore::KeyframeAnimation::endAnimation):
        * page/mac/AccessibilityObjectWrapper.mm:
        (blockquoteLevel):
        (AXAttributeStringSetHeadingLevel):
        * page/mac/FrameMac.mm:
        (WebCore::Frame::searchForNSLabelsAboveCell):
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::verticallyAlignBoxes):
        (WebCore::InlineFlowBox::paint):
        (WebCore::shouldDrawTextDecoration):
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paintDocumentMarkers):
        * rendering/RenderBR.cpp:
        (WebCore::RenderBR::positionForCoordinates):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::layoutBlock):
        (WebCore::RenderBlock::handleRunInChild):
        (WebCore::RenderBlock::paintObject):
        (WebCore::RenderBlock::isSelectionRoot):
        (WebCore::RenderBlock::rightmostPosition):
        (WebCore::RenderBlock::positionForBox):
        (WebCore::RenderBlock::positionForRenderer):
        (WebCore::RenderBlock::positionForCoordinates):
        (WebCore::RenderBlock::hasLineIfEmpty):
        (WebCore::RenderBlock::updateFirstLetter):
        (WebCore::RenderBlock::updateHitTestResult):
        (WebCore::RenderBlock::addFocusRingRects):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::styleWillChange):
        (WebCore::RenderBox::updateBoxModelInfoFromStyle):
        (WebCore::RenderBox::paintRootBoxDecorations):
        (WebCore::RenderBox::positionForCoordinates):
        * rendering/RenderButton.cpp:
        (WebCore::RenderButton::updateFromElement):
        (WebCore::RenderButton::canHaveChildren):
        * rendering/RenderCounter.cpp:
        (WebCore::planCounter):
        * rendering/RenderFieldset.cpp:
        (WebCore::RenderFieldset::findLegend):
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::layoutVerticalBox):
        * rendering/RenderForeignObject.cpp:
        (WebCore::RenderForeignObject::translationForAttributes):
        (WebCore::RenderForeignObject::calculateLocalTransform):
        * rendering/RenderFrame.h:
        (WebCore::RenderFrame::element):
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::paintReplaced):
        (WebCore::RenderImage::imageMap):
        (WebCore::RenderImage::nodeAtPoint):
        (WebCore::RenderImage::updateAltText):
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::cloneInline):
        (WebCore::RenderInline::updateHitTestResult):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::isTransparent):
        (WebCore::RenderLayer::scrollToOffset):
        (WebCore::RenderLayer::resize):
        (WebCore::RenderLayer::createScrollbar):
        (WebCore::RenderLayer::updateOverflowStatus):
        (WebCore::RenderLayer::updateScrollInfoAfterLayout):
        (WebCore::RenderLayer::enclosingElement):
        (WebCore::RenderLayer::updateHoverActiveState):
        (WebCore::RenderLayer::updateScrollCornerStyle):
        (WebCore::RenderLayer::updateResizerStyle):
        * rendering/RenderLayer.h:
        (WebCore::RenderLayer::isRootLayer):
        * rendering/RenderListItem.cpp:
        (WebCore::getParentOfFirstLineBox):
        * rendering/RenderMarquee.cpp:
        (WebCore::RenderMarquee::marqueeSpeed):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::RenderObject):
        (WebCore::RenderObject::isBody):
        (WebCore::RenderObject::isHR):
        (WebCore::RenderObject::isHTMLMarquee):
        (WebCore::RenderObject::isEditable):
        (WebCore::RenderObject::addPDFURLRect):
        (WebCore::RenderObject::showTreeForThis):
        (WebCore::RenderObject::draggableNode):
        (WebCore::RenderObject::hasOutlineAnnotation):
        (WebCore::RenderObject::positionForCoordinates):
        (WebCore::RenderObject::updateDragState):
        (WebCore::RenderObject::updateHitTestResult):
        (WebCore::RenderObject::getUncachedPseudoStyle):
        (WebCore::RenderObject::getTextDecorationColors):
        (WebCore::RenderObject::caretMaxOffset):
        (WebCore::RenderObject::offsetParent):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::isRoot):
        (WebCore::RenderObject::isInlineContinuation):
        (WebCore::RenderObject::node):
        (WebCore::RenderObject::setNode):
        * rendering/RenderObjectChildList.cpp:
        (WebCore::RenderObjectChildList::destroyLeftoverChildren):
        * rendering/RenderPart.cpp:
        (WebCore::RenderPart::updateWidgetPosition):
        * rendering/RenderPartObject.cpp:
        (WebCore::RenderPartObject::updateWidget):
        (WebCore::RenderPartObject::viewCleared):
        * rendering/RenderPath.cpp:
        (WebCore::RenderPath::calculateLocalTransform):
        (WebCore::RenderPath::layout):
        (WebCore::RenderPath::paint):
        (WebCore::RenderPath::drawMarkersIfNeeded):
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::positionForCoordinates):
        (WebCore::RenderReplaced::isSelected):
        * rendering/RenderSVGGradientStop.cpp:
        (WebCore::RenderSVGGradientStop::gradientElement):
        * rendering/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::calculateLocalTransform):
        * rendering/RenderSVGInlineText.cpp:
        (WebCore::RenderSVGInlineText::positionForCoordinates):
        * rendering/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::layout):
        (WebCore::RenderSVGRoot::applyContentTransforms):
        (WebCore::RenderSVGRoot::paint):
        (WebCore::RenderSVGRoot::calcViewport):
        (WebCore::RenderSVGRoot::absoluteTransform):
        * rendering/RenderSVGText.cpp:
        (WebCore::RenderSVGText::calculateLocalTransform):
        (WebCore::RenderSVGText::layout):
        * rendering/RenderSVGTextPath.cpp:
        (WebCore::RenderSVGTextPath::layoutPath):
        (WebCore::RenderSVGTextPath::startOffset):
        (WebCore::RenderSVGTextPath::exactAlignment):
        (WebCore::RenderSVGTextPath::stretchMethod):
        * rendering/RenderSVGTransformableContainer.cpp:
        (WebCore::RenderSVGTransformableContainer::calculateLocalTransform):
        * rendering/RenderSVGViewportContainer.cpp:
        (WebCore::RenderSVGViewportContainer::calcViewport):
        (WebCore::RenderSVGViewportContainer::viewportTransform):
        (WebCore::RenderSVGViewportContainer::nodeAtPoint):
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::addChild):
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::updateFromElement):
        (WebCore::RenderTableCell::calcPrefWidths):
        * rendering/RenderTableCol.cpp:
        (WebCore::RenderTableCol::updateFromElement):
        * rendering/RenderTableRow.cpp:
        (WebCore::RenderTableRow::addChild):
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::addChild):
        * rendering/RenderText.cpp:
        (WebCore::RenderText::originalText):
        (WebCore::RenderText::positionForCoordinates):
        * rendering/RenderTextControlMultiLine.cpp:
        (WebCore::RenderTextControlMultiLine::nodeAtPoint):
        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::nodeAtPoint):
        * rendering/RenderTextFragment.cpp:
        (WebCore::RenderTextFragment::originalText):
        (WebCore::RenderTextFragment::previousCharacter):
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::isActive):
        (WebCore::RenderTheme::isChecked):
        (WebCore::RenderTheme::isIndeterminate):
        (WebCore::RenderTheme::isEnabled):
        (WebCore::RenderTheme::isFocused):
        (WebCore::RenderTheme::isPressed):
        (WebCore::RenderTheme::isReadOnlyControl):
        (WebCore::RenderTheme::isHovered):
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::updatePressedState):
        (WebCore::RenderThemeMac::paintMediaFullscreenButton):
        (WebCore::RenderThemeMac::paintMediaMuteButton):
        (WebCore::RenderThemeMac::paintMediaPlayButton):
        (WebCore::RenderThemeMac::paintMediaSeekBackButton):
        (WebCore::RenderThemeMac::paintMediaSeekForwardButton):
        (WebCore::RenderThemeMac::paintMediaSliderTrack):
        (WebCore::RenderThemeMac::paintMediaSliderThumb):
        (WebCore::RenderThemeMac::paintMediaTimelineContainer):
        (WebCore::RenderThemeMac::paintMediaCurrentTime):
        (WebCore::RenderThemeMac::paintMediaTimeRemaining):
        * rendering/RenderThemeSafari.cpp:
        (WebCore::RenderThemeSafari::paintMediaMuteButton):
        (WebCore::RenderThemeSafari::paintMediaPlayButton):
        (WebCore::RenderThemeSafari::paintMediaSliderTrack):
        * rendering/RenderTreeAsText.cpp:
        (WebCore::operator<<):
        (WebCore::writeSelection):
        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::setWidgetGeometry):
        (WebCore::RenderWidget::updateWidgetPosition):
        (WebCore::RenderWidget::nodeAtPoint):
        * rendering/RootInlineBox.cpp:
        (WebCore::isEditableLeaf):
        * rendering/SVGRenderSupport.cpp:
        (WebCore::prepareToRenderSVGContent):
        * rendering/SVGRenderTreeAsText.cpp:
        (WebCore::write):
        * rendering/SVGRootInlineBox.cpp:
        (WebCore::SVGRootInlineBox::buildLayoutInformation):
        (WebCore::SVGRootInlineBox::layoutInlineBoxes):
        (WebCore::SVGRootInlineBox::buildLayoutInformationForTextBox):
        (WebCore::SVGRootInlineBox::buildTextChunks):
        * rendering/style/SVGRenderStyle.cpp:
        (WebCore::SVGRenderStyle::cssPrimitiveToLength):
        * svg/SVGFont.cpp:
        (WebCore::SVGTextRunWalker::walk):
        (WebCore::floatWidthOfSubStringUsingSVGFont):
        (WebCore::Font::drawTextUsingSVGFont):
        * svg/SVGTextContentElement.cpp:
        (WebCore::findInlineTextBoxInTextChunks):
        * svg/graphics/SVGPaintServer.cpp:
        (WebCore::SVGPaintServer::fillPaintServer):
        (WebCore::SVGPaintServer::strokePaintServer):

2009-02-11  Brady Eidson  <beidson@apple.com>

        Reviewed by Darin Adler

        <rdar://problem/3541409> - Further FrameLoader and page cache cleanup

        * history/CachedFrame.cpp:
        (WebCore::CachedFrame::restore): Moved updatePlatformScriptObjects() here.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::commitProvisionalLoad): Rolled opened() into this method.  This method was
          the only caller and - in the future - will benefit from doing parts of opened()'s work differently.
        (WebCore::FrameLoader::open): Split off per-frame logic into open(CachedFrame&) method.
        (WebCore::FrameLoader::closeAndRemoveChild): Added.  Do the non-tree related cleanup that
          FrameTree::removeChild() used to do.
        (WebCore::FrameLoader::detachFromParent): Call ::closeAndRemoveChild() instead.
        (WebCore::FrameLoader::cachePageForHistoryItem): Perform the "can cache page" check here.
        * loader/FrameLoader.h:

        * page/FrameTree.cpp:
        (WebCore::FrameTree::removeChild): Just remove the Frame from the tree.  Closing it and other
          cleanup is the responsibility of the FrameLoader.
        * page/FrameTree.h:
        (WebCore::FrameTree::detachFromParent): Added to just clear a Frame's parent pointer

2009-02-11  Scott Violet  <sky@google.com>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=23882
        GraphicsContextSkia draws round rects as solid rects

        Fixes two bugs in Skia's GraphicsContext::fillRoundedRect:
        . fillRoundedRect had an extra call to fillRect, resulting in always
          drawing a solid rectangle.
        . if the total radius along a given axis is greater than the size of
          the axis to draw, a solid rect should be drawn.

        The layout tests LayoutTests/fast/css/shadow-multiple.html and
        LayoutTests/fast/box-shadow/basic-shadows.html cover this.

        * platform/graphics/skia/GraphicsContextSkia.cpp:
        (WebCore::GraphicsContext::fillRoundedRect):

2009-02-11  Julien Chaffraix  <jchaffraix@webkit.org>

        Reviewed by Eric Seidel.

        Bug 23536: Auto-generate HTMLElementFactory

        Remove the HTMLElementFactory files. Farewell.

        * html/HTMLElementFactory.cpp: Removed.
        * html/HTMLElementFactory.h: Removed.

2009-02-11  Julien Chaffraix  <jchaffraix@webkit.org>

        Reviewed by Eric Seidel.

        Bug 23536: Auto-generate HTMLElementFactory

        Make the platform auto-generate the HTMLElementFactory.

        * DerivedSources.make:
        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.scons:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * webcore-base.bkl:

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

        Reviewed by David Hyatt.

        Remove unneeded ASSERTS.

        * rendering/RenderBox.h:
        (WebCore::RenderBox::width):
        (WebCore::RenderBox::height):
        (WebCore::RenderBox::size):
        (WebCore::RenderBox::frameRect):

2009-02-11  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dave Hyatt

        Add function to RenderStyle to ask whether a background image has been specified.

        * rendering/style/RenderStyle.h:
        (WebCore::InheritedFlags::hasBackgroundImage):

2009-02-11  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dave Hyatt

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

        When opacity or transform change on an object which has a compositing layer,
        avoid repainting the layer.

        Added a new StyleDifference value, StyleDifferenceRecompositeLayer, which indicates
        that the only thing styleChanged() has to do is to update composited properties of
        the layer. RenderStyle::diff() now has an out param for a bitmask of "context sensitive"
        properties, currently for opacity and transform. When one of these changes, we need
        to see if we have a compositing layer before we decide whether to layout/repaint,
        or just update the composited layer, via adjustStyleDifference().

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::adjustStyleDifference):
        (WebCore::RenderObject::setStyle):
        (WebCore::RenderObject::styleDidChange):
        * rendering/RenderObject.h:
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::diff):
        * rendering/style/RenderStyle.h:
        * rendering/style/RenderStyleConstants.h:
        (WebCore::):

2009-02-11  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin Adler.

        <rdar://problem/6562920> Pasted text should be normalized to NFC

        Testing requires putting non-HTML content in pasteboard, so it cannot be done with WebKit alone.

        * platform/mac/PasteboardMac.mm: (WebCore::Pasteboard::plainText): Route the text through
        -[NSString precomposedStringWithCanonicalMapping].

2009-02-10  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Simon Fraser.

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

        Added new TransformOperation subclasses and methods to existing ones
        to support 3D.

        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/transforms/IdentityTransformOperation.h:
        (WebCore::IdentityTransformOperation::isAffine):
        * platform/graphics/transforms/Matrix3DTransformOperation.cpp: Added.
        (WebCore::Matrix3DTransformOperation::blend):
        * platform/graphics/transforms/Matrix3DTransformOperation.h: Added.
        (WebCore::Matrix3DTransformOperation::create):
        (WebCore::Matrix3DTransformOperation::isIdentity):
        (WebCore::Matrix3DTransformOperation::isAffine):
        (WebCore::Matrix3DTransformOperation::getOperationType):
        (WebCore::Matrix3DTransformOperation::isSameType):
        (WebCore::Matrix3DTransformOperation::operator==):
        (WebCore::Matrix3DTransformOperation::apply):
        (WebCore::Matrix3DTransformOperation::Matrix3DTransformOperation):
        * platform/graphics/transforms/MatrixTransformOperation.h:
        (WebCore::MatrixTransformOperation::isAffine):
        (WebCore::MatrixTransformOperation::apply):
        * platform/graphics/transforms/PerspectiveTransformOperation.cpp: Added.
        (WebCore::PerspectiveTransformOperation::blend):
        * platform/graphics/transforms/PerspectiveTransformOperation.h: Added.
        (WebCore::PerspectiveTransformOperation::create):
        (WebCore::PerspectiveTransformOperation::isIdentity):
        (WebCore::PerspectiveTransformOperation::isAffine):
        (WebCore::PerspectiveTransformOperation::getOperationType):
        (WebCore::PerspectiveTransformOperation::isSameType):
        (WebCore::PerspectiveTransformOperation::operator==):
        (WebCore::PerspectiveTransformOperation::apply):
        (WebCore::PerspectiveTransformOperation::PerspectiveTransformOperation):
        * platform/graphics/transforms/RotateTransformOperation.cpp:
        (WebCore::RotateTransformOperation::blend):
        * platform/graphics/transforms/RotateTransformOperation.h:
        (WebCore::RotateTransformOperation::create):
        (WebCore::RotateTransformOperation::angle):
        (WebCore::RotateTransformOperation::isAffine):
        (WebCore::RotateTransformOperation::operator==):
        (WebCore::RotateTransformOperation::apply):
        (WebCore::RotateTransformOperation::RotateTransformOperation):
        * platform/graphics/transforms/ScaleTransformOperation.cpp:
        (WebCore::ScaleTransformOperation::blend):
        * platform/graphics/transforms/ScaleTransformOperation.h:
        (WebCore::ScaleTransformOperation::create):
        (WebCore::ScaleTransformOperation::z):
        (WebCore::ScaleTransformOperation::isIdentity):
        (WebCore::ScaleTransformOperation::isAffine):
        (WebCore::ScaleTransformOperation::operator==):
        (WebCore::ScaleTransformOperation::apply):
        (WebCore::ScaleTransformOperation::ScaleTransformOperation):
        * platform/graphics/transforms/SkewTransformOperation.h:
        (WebCore::SkewTransformOperation::isAffine):
        * platform/graphics/transforms/TransformOperation.h:
        (WebCore::TransformOperation::):
        (WebCore::TransformOperation::is3DOperation):
        * platform/graphics/transforms/TransformOperations.h:
        (WebCore::TransformOperations::isAffine):
        (WebCore::TransformOperations::has3DOperation):
        * platform/graphics/transforms/TranslateTransformOperation.cpp:
        (WebCore::TranslateTransformOperation::blend):
        * platform/graphics/transforms/TranslateTransformOperation.h:
        (WebCore::TranslateTransformOperation::create):
        (WebCore::TranslateTransformOperation::z):
        (WebCore::TranslateTransformOperation::isIdentity):
        (WebCore::TranslateTransformOperation::isAffine):
        (WebCore::TranslateTransformOperation::operator==):
        (WebCore::TranslateTransformOperation::apply):
        (WebCore::TranslateTransformOperation::TranslateTransformOperation):

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

        Move createAnonymousBlock() to RenderBlock.  Since anonymous blocks are always parented to some other block,
        we can move this function to RenderBlock.  Fix a couple of call sites as a result of this restriction.

        Reviewed by Simon Fraser

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::createAnonymousBlock):
        * rendering/RenderBlock.h:
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::childBecameNonInline):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::handleDynamicFloatPositionChange):
        * rendering/RenderObject.h:

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

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

        Remove two complete nonsense lines that I accidentally added from a cut and paste error.  This
        restores the original logic.

        Reviewed by Simon Fraser

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::calcAbsoluteHorizontalReplaced):

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

        Rename getBaselineOfFirstLineBox to firstLineBoxBaseline.  Rename getBaselineOfLastLineBox to
        lastLineBoxBaseline.  Remove the functions from RenderObject and add them to RenderBox instead.

        Reviewed by Eric Seidel

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::baselinePosition):
        (WebCore::RenderBlock::firstLineBoxBaseline):
        (WebCore::RenderBlock::lastLineBoxBaseline):
        * rendering/RenderBlock.h:
        * rendering/RenderBox.h:
        (WebCore::RenderBox::firstLineBoxBaseline):
        (WebCore::RenderBox::lastLineBoxBaseline):
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::layoutHorizontalBox):
        * rendering/RenderObject.h:
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::firstLineBoxBaseline):
        * rendering/RenderTable.h:
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::baselinePosition):
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::firstLineBoxBaseline):
        * rendering/RenderTableSection.h:

2009-02-11  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Simon Fraser

        https://bugs.webkit.org/show_bug.cgi?id=23877
        Allow port to disable progress events from <video> and <audio> elements

        * html/HTMLMediaElement.cpp: Initialize m_sendProgressEvents.
        (WebCore::HTMLMediaElement::HTMLMediaElement): Don't post progress events if m_sendProgressEvents is false.
        (WebCore::HTMLMediaElement::initAndDispatchProgressEvent): Ditto.
        (WebCore::HTMLMediaElement::load): Ditto.
        * html/HTMLMediaElement.h: Add m_sendProgressEvents

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

        Windows build fix

        * DerivedSources.cpp: Removed SVGElementFactory.cpp, since including
        it leads to ambiguities for symbols like "aTag", which exist in both
        the HTMLNames and SVGNames namespaces.

        * WebCore.vcproj/WebCore.vcproj: Added SVGElementFactory.cpp to the
        project directly. VS also decided to reformat this file a little bit.

2009-02-10  Julien Chaffraix  <jchaffraix@webkit.org>

        Reviewed by Eric Seidel.

        Bug 23536: Auto-generate HTMLElementFactory

        Those are the last auto-generation bits needed to have a working generated HTMLElementFactory:

        - Added a new option mapToTagName that enables a tag to use another's options and tagName (<image>
          uses imgTag for example) and wired the code generation to be consistent with the current factory.

        - Disabled dashboard compatibility check for HTMLElementFactory as it would make at least one test case fail.

        - Pass the QualifiedName down to the Element constructor for shared constructors to make the generated code as
          close as possible to the current one. We will pass the QualifiedName for all Element in a forthcoming patch.

        * dom/make_names.pl: Did all the above points and tweaked the code generation to match the current HTMLElementFactory
          as closely as possible.

        * html/HTMLElementFactory.cpp:
        (WebCore::quoteConstructor):
        * html/HTMLQuoteElement.cpp:
        (WebCore::HTMLQuoteElement::HTMLQuoteElement): Moved setUsesBeforeAfterRules to HTMLQuoteElement' constructor because some
        part of the code creates elements without using the HTMLElementFactory. Also added a FIXME as it is not the right place.

        * html/HTMLTagNames.in: Corrected <image> parameters.

2009-02-10  David Hyatt  <hyatt@apple.com>

        Fix for pixel test regression in fast/text.  Make sure not to add in
        the borderTop and paddingTop of the block to the baseline when painting
        strict mode text decorations.

        Reviewed by Mark Rowe

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

2009-02-10  Jon Honeycutt  <jhoneycutt@apple.com>

        Windows build fix after r40837.

        Not reviewed.

        * DerivedSources.cpp:

2009-02-10  Jon Honeycutt  <jhoneycutt@apple.com>

        <rdar://6349412> REGRESSION(r37204): Page is not repainted during and
        after pan scrolling

        Reviewed by Steve Falkenburg.

        * platform/ScrollView.cpp:
        (WebCore::ScrollView::scrollContents): Don't repaint the pan scroll
        icon rect immediately; we will paint after the view has been scrolled.

2009-02-10  Oliver Hunt  <oliver@apple.com>

        Reviewed by Adele Peterson.

        <rdar://problem/6156755> onMouseOver events do not fire properly for cross frame drag and drop

        This problem was caused by incorrectly ignoring whether or not the
        default behaviour of the mousedown event was suppressed.  If a
        mousedown handler in a frame prevents default handling then the
        subsequent mousemove events fired for the drag should not be
        captured by that frame, should the mouse move out of its bounds.

        Test: fast/events/mouse-drag-from-frame.html

        * page/EventHandler.cpp:
        (WebCore::EventHandler::EventHandler):
        (WebCore::EventHandler::clear):
        (WebCore::EventHandler::handleMouseReleaseEvent):
            Reset new m_capturesDragging flag

        (WebCore::EventHandler::handleMousePressEvent):
            Respect the m_capturesDragging flag when we propagate
            a mousedown event to a subframe.

        * page/EventHandler.h:
        (WebCore::EventHandler::capturesDragging):

2009-02-10  Kevin Ollivier  <kevino@theolliviers.com>

        wx build fixes for recent changes to TransformationMatrix and DOMElement.

        * WebCoreSources.bkl:
        * dom/Element.cpp:
        * platform/graphics/transforms/TransformationMatrix.h:
        * platform/graphics/wx/TransformationMatrixWx.cpp:
        (WebCore::TransformationMatrix::operator wxGraphicsMatrix):

2009-02-10  David Hyatt  <hyatt@apple.com>

        Some renames on line boxes.  xPos()/yPos() -> x()/y().  setXPos()/setYPos() -> setX()/setY().  m_object/object() -> m_renderer/renderer().  textObject() -> textRenderer().

        Reviewed by Sam Weinig

        * dom/Position.cpp:
        (WebCore::Position::upstream):
        (WebCore::Position::downstream):
        * editing/VisiblePosition.cpp:
        (WebCore::VisiblePosition::leftVisuallyDistinctCandidate):
        (WebCore::VisiblePosition::rightVisuallyDistinctCandidate):
        (WebCore::VisiblePosition::localCaretRect):
        * editing/visible_units.cpp:
        (WebCore::startPositionForLine):
        (WebCore::endPositionForLine):
        (WebCore::previousLinePosition):
        (WebCore::nextLinePosition):
        * rendering/EllipsisBox.cpp:
        (WebCore::EllipsisBox::paint):
        (WebCore::EllipsisBox::nodeAtPoint):
        * rendering/InlineBox.cpp:
        (WebCore::InlineBox::showTreeForThis):
        (WebCore::InlineBox::height):
        (WebCore::InlineBox::caretMinOffset):
        (WebCore::InlineBox::caretMaxOffset):
        (WebCore::InlineBox::deleteLine):
        (WebCore::InlineBox::extractLine):
        (WebCore::InlineBox::attachLine):
        (WebCore::InlineBox::adjustPosition):
        (WebCore::InlineBox::paint):
        (WebCore::InlineBox::nodeAtPoint):
        (WebCore::InlineBox::selectionState):
        (WebCore::InlineBox::canAccommodateEllipsis):
        * rendering/InlineBox.h:
        (WebCore::InlineBox::InlineBox):
        (WebCore::InlineBox::renderer):
        (WebCore::InlineBox::setX):
        (WebCore::InlineBox::x):
        (WebCore::InlineBox::setY):
        (WebCore::InlineBox::y):
        (WebCore::InlineBox::topOverflow):
        (WebCore::InlineBox::bottomOverflow):
        (WebCore::InlineBox::leftOverflow):
        (WebCore::InlineBox::rightOverflow):
        (WebCore::InlineBox::visibleToHitTesting):
        (WebCore::InlineBox::boxModelObject):
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::height):
        (WebCore::InlineFlowBox::addToLine):
        (WebCore::InlineFlowBox::removeLineBoxFromRenderObject):
        (WebCore::InlineFlowBox::extractLineBoxFromRenderObject):
        (WebCore::InlineFlowBox::attachLineBoxToRenderObject):
        (WebCore::InlineFlowBox::rendererLineBoxes):
        (WebCore::InlineFlowBox::onEndChain):
        (WebCore::InlineFlowBox::determineSpacingForFlowBoxes):
        (WebCore::InlineFlowBox::placeBoxesHorizontally):
        (WebCore::InlineFlowBox::verticallyAlignBoxes):
        (WebCore::InlineFlowBox::adjustMaxAscentAndDescent):
        (WebCore::verticalPositionForBox):
        (WebCore::InlineFlowBox::computeLogicalBoxHeights):
        (WebCore::InlineFlowBox::placeBoxesVertically):
        (WebCore::InlineFlowBox::nodeAtPoint):
        (WebCore::InlineFlowBox::paint):
        (WebCore::InlineFlowBox::paintFillLayer):
        (WebCore::InlineFlowBox::paintBoxShadow):
        (WebCore::InlineFlowBox::paintBoxDecorations):
        (WebCore::InlineFlowBox::paintMask):
        (WebCore::InlineFlowBox::paintTextDecorations):
        * rendering/InlineFlowBox.h:
        (WebCore::InlineFlowBox::borderLeft):
        (WebCore::InlineFlowBox::borderRight):
        (WebCore::InlineFlowBox::borderTop):
        (WebCore::InlineFlowBox::borderBottom):
        (WebCore::InlineFlowBox::baseline):
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::height):
        (WebCore::InlineTextBox::selectionState):
        (WebCore::InlineTextBox::selectionRect):
        (WebCore::InlineTextBox::deleteLine):
        (WebCore::InlineTextBox::extractLine):
        (WebCore::InlineTextBox::attachLine):
        (WebCore::InlineTextBox::placeEllipsisBox):
        (WebCore::InlineTextBox::isLineBreak):
        (WebCore::InlineTextBox::nodeAtPoint):
        (WebCore::InlineTextBox::paint):
        (WebCore::InlineTextBox::selectionStartEnd):
        (WebCore::InlineTextBox::paintSelection):
        (WebCore::InlineTextBox::paintCompositionBackground):
        (WebCore::InlineTextBox::paintCustomHighlight):
        (WebCore::InlineTextBox::paintDecoration):
        (WebCore::InlineTextBox::paintSpellingOrGrammarMarker):
        (WebCore::InlineTextBox::paintTextMatchMarker):
        (WebCore::InlineTextBox::paintDocumentMarkers):
        (WebCore::InlineTextBox::paintCompositionUnderline):
        (WebCore::InlineTextBox::textPos):
        (WebCore::InlineTextBox::offsetForPosition):
        (WebCore::InlineTextBox::positionForOffset):
        * rendering/InlineTextBox.h:
        (WebCore::InlineTextBox::textRenderer):
        * rendering/ListMarkerBox.cpp:
        (WebCore::ListMarkerBox::isText):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::paintEllipsisBoxes):
        (WebCore::RenderBlock::lowestPosition):
        (WebCore::RenderBlock::rightmostPosition):
        (WebCore::RenderBlock::leftmostPosition):
        (WebCore::RenderBlock::positionForBox):
        (WebCore::RenderBlock::positionForCoordinates):
        (WebCore::RenderBlock::getBaselineOfFirstLineBox):
        (WebCore::RenderBlock::getBaselineOfLastLineBox):
        (WebCore::RenderBlock::adjustForBorderFit):
        (WebCore::RenderBlock::addFocusRingRects):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::paintCustomHighlight):
        (WebCore::RenderBox::position):
        (WebCore::RenderBox::containingBlockWidthForPositioned):
        (WebCore::RenderBox::calcAbsoluteHorizontalValues):
        (WebCore::RenderBox::calcAbsoluteHorizontalReplaced):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintFillLayerExtended):
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::layoutVerticalBox):
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::absoluteRects):
        (WebCore::RenderInline::absoluteQuads):
        (WebCore::RenderInline::offsetLeft):
        (WebCore::RenderInline::offsetTop):
        (WebCore::RenderInline::linesBoundingBox):
        (WebCore::RenderInline::relativePositionedInlineOffset):
        (WebCore::RenderInline::addFocusRingRects):
        (WebCore::RenderInline::paintOutline):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::localBoundingBox):
        * rendering/RenderSVGTSpan.cpp:
        (WebCore::RenderSVGTSpan::absoluteRects):
        (WebCore::RenderSVGTSpan::absoluteQuads):
        * rendering/RenderSVGText.cpp:
        (WebCore::RenderSVGText::absoluteRects):
        (WebCore::RenderSVGText::absoluteQuads):
        (WebCore::RenderSVGText::relativeBBox):
        * rendering/RenderSVGTextPath.cpp:
        (WebCore::RenderSVGTextPath::absoluteRects):
        (WebCore::RenderSVGTextPath::absoluteQuads):
        * rendering/RenderText.cpp:
        (WebCore::RenderText::absoluteRects):
        (WebCore::RenderText::absoluteRectsForRange):
        (WebCore::RenderText::absoluteQuads):
        (WebCore::RenderText::absoluteQuadsForRange):
        (WebCore::RenderText::localCaretRect):
        (WebCore::RenderText::linesBoundingBox):
        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::height):
        (WebCore::RootInlineBox::clearTruncation):
        (WebCore::RootInlineBox::placeEllipsis):
        (WebCore::RootInlineBox::paintEllipsisBox):
        (WebCore::RootInlineBox::addHighlightOverflow):
        (WebCore::RootInlineBox::paintCustomHighlight):
        (WebCore::RootInlineBox::paint):
        (WebCore::RootInlineBox::nodeAtPoint):
        (WebCore::RootInlineBox::childRemoved):
        (WebCore::RootInlineBox::fillLineSelectionGap):
        (WebCore::RootInlineBox::block):
        (WebCore::isEditableLeaf):
        (WebCore::RootInlineBox::closestLeafChildForXPos):
        (WebCore::RootInlineBox::setVerticalOverflowPositions):
        * rendering/RootInlineBox.h:
        (WebCore::RootInlineBox::bottomOverflow):
        (WebCore::RootInlineBox::floats):
        (WebCore::RootInlineBox::setHorizontalOverflowPositions):
        (WebCore::RootInlineBox::setVerticalSelectionPositions):
        * rendering/SVGCharacterLayoutInfo.cpp:
        (WebCore::SVGCharacterLayoutInfo::addLayoutInformation):
        * rendering/SVGInlineTextBox.cpp:
        (WebCore::SVGInlineTextBox::calculateGlyphWidth):
        (WebCore::SVGInlineTextBoxClosestCharacterToPositionWalker::chunkPortionCallback):
        (WebCore::SVGInlineTextBoxSelectionRectWalker::chunkPortionCallback):
        (WebCore::SVGInlineTextBox::svgCharacterHitsPosition):
        (WebCore::SVGInlineTextBox::nodeAtPoint):
        (WebCore::SVGInlineTextBox::paintCharacters):
        (WebCore::SVGInlineTextBox::paintSelection):
        (WebCore::SVGInlineTextBox::paintDecoration):
        * rendering/SVGRenderTreeAsText.cpp:
        (WebCore::writeSVGInlineTextBox):
        * rendering/SVGRootInlineBox.cpp:
        (WebCore::SVGRootInlineBoxPaintWalker::SVGRootInlineBoxPaintWalker):
        (WebCore::SVGRootInlineBoxPaintWalker::chunkStartCallback):
        (WebCore::SVGRootInlineBoxPaintWalker::chunkEndCallback):
        (WebCore::SVGRootInlineBoxPaintWalker::chunkSetupFillCallback):
        (WebCore::SVGRootInlineBoxPaintWalker::chunkSetupStrokeCallback):
        (WebCore::SVGRootInlineBoxPaintWalker::chunkPortionCallback):
        (WebCore::SVGRootInlineBox::paint):
        (WebCore::cummulatedWidthOfInlineBoxCharacterRange):
        (WebCore::cummulatedHeightOfInlineBoxCharacterRange):
        (WebCore::svgTextRunForInlineTextBox):
        (WebCore::cummulatedWidthOrHeightOfTextChunk):
        (WebCore::applyTextAnchorToTextChunk):
        (WebCore::SVGRootInlineBox::buildLayoutInformation):
        (WebCore::SVGRootInlineBox::layoutInlineBoxes):
        (WebCore::SVGRootInlineBox::buildLayoutInformationForTextBox):
        (WebCore::SVGRootInlineBox::buildTextChunks):
        * rendering/bidi.cpp:
        (WebCore::RenderBlock::constructLine):
        (WebCore::RenderBlock::computeVerticalPositionsForLine):
        (WebCore::RenderBlock::layoutInlineChildren):
        (WebCore::RenderBlock::checkLinesForTextOverflow):
        * svg/SVGTextContentElement.cpp:
        (WebCore::cumulativeCharacterRangeLength):
        (WebCore::SVGInlineTextBoxQueryWalker::chunkPortionCallback):
        (WebCore::findInlineTextBoxInTextChunks):

2009-02-10  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dave Hyatt

        Clean up "fallbackAnimating" logic in AnimationBase. This flag indicates
        that animation of an accelerated property must run in software for some reason.

        Also remove use of private headers in GraphicsLayerCA related to a case
        where we may have to fall back on software animation of transform.

        * page/animation/AnimationBase.cpp:
        (WebCore::AnimationBase::blendProperties):
        * page/animation/AnimationBase.h:
        * page/animation/ImplicitAnimation.cpp:
        (WebCore::ImplicitAnimation::animate):
        * page/animation/KeyframeAnimation.cpp:
        (WebCore::KeyframeAnimation::animate):
        * platform/graphics/mac/GraphicsLayerCA.h:
        * platform/graphics/mac/GraphicsLayerCA.mm:
        (WebCore::getValueFunctionNameForTransformOperation):
        (WebCore::caValueFunctionSupported):
        (WebCore::GraphicsLayerCA::setBackgroundColor):
        (WebCore::GraphicsLayerCA::setOpacity):
        (WebCore::GraphicsLayerCA::animateTransform):
        (WebCore::GraphicsLayerCA::animateFloat):
        (WebCore::GraphicsLayerCA::setBasicAnimation):
        (WebCore::GraphicsLayerCA::setKeyframeAnimation):

2009-02-10  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dave Hyatt

        Move enclosingCompositingLayer() from RenderObject to RenderLayer, since it
        relates to the RenderLayer z-order/overflow structure, rather than the render tree
        parent chain. Add a convenience method, ancestorCompositingLayer(), which finds
        the enclosing layer excluding self.

        Fix enclosingCompositingLayer() to correctly look at stacking context and overflow
        lists.

        Check for documentBeingDestroyed() in a few places to avoid work on document
        teardown.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::enclosingCompositingLayer):
        (WebCore::RenderLayer::setParent):
        (WebCore::RenderLayer::dirtyZOrderLists):
        (WebCore::RenderLayer::dirtyOverflowList):
        * rendering/RenderLayer.h:
        (WebCore::RenderLayer::ancestorCompositingLayer):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateGraphicsLayerGeometry):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::updateLayerCompositingState):
        (WebCore::RenderLayerCompositor::calculateCompositedBounds):
        (WebCore::RenderLayerCompositor::layerWillBeRemoved):
        (WebCore::RenderLayerCompositor::clippedByAncestor):
        * rendering/RenderLayerCompositor.h:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::containerForRepaint):
        * rendering/RenderObject.h:

2009-02-10  David Hyatt  <hyatt@apple.com>

        Rename xPos() and yPos() on RenderLayer to x() and y() to match RenderBox.  Rename setPos to setLocation.

        Reviewed by Simon Fraser

        * dom/MouseRelatedEvent.cpp:
        (WebCore::MouseRelatedEvent::receivedTarget):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateLayerPosition):
        (WebCore::RenderLayer::convertToLayerCoords):
        * rendering/RenderLayer.h:
        (WebCore::RenderLayer::x):
        (WebCore::RenderLayer::y):
        (WebCore::RenderLayer::setLocation):
        * rendering/RenderTreeAsText.cpp:
        (WebCore::write):
        (WebCore::externalRepresentation):

2009-02-10  Darin Fisher  <darin@chromium.org>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=23879
        Add missing PLATFORM(SKIA) changes to TransformationMatrix.h

        * platform/graphics/transforms/TransformationMatrix.h:

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

        Reviewed by David Hyatt.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=15897
        Please implement getBoundingClientRect and getClientRects
        <rdar://problem/6139669>

        Cursory implementation of Element.getBoundingClientRect and
        Element.getClientRects. Adds necessary infrastructure classes
        ClientRect and ClientRectList.

        Tests: fast/dom/getBoundingClientRect.html
               fast/dom/getClientRects.html

        * DerivedSources.make:
        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * dom/ClientRect.cpp: Added.
        (WebCore::ClientRect::ClientRect):
        * dom/ClientRect.h: Added.
        (WebCore::ClientRect::create):
        (WebCore::ClientRect::top):
        (WebCore::ClientRect::right):
        (WebCore::ClientRect::bottom):
        (WebCore::ClientRect::left):
        (WebCore::ClientRect::width):
        (WebCore::ClientRect::height):
        * dom/ClientRect.idl: Added.
        * dom/ClientRectList.cpp: Added.
        (WebCore::ClientRectList::ClientRectList):
        (WebCore::ClientRectList::~ClientRectList):
        (WebCore::ClientRectList::length):
        (WebCore::ClientRectList::item):
        * dom/ClientRectList.h: Added.
        (WebCore::ClientRectList::create):
        * dom/ClientRectList.idl: Added.
        * dom/Element.cpp:
        (WebCore::Element::getClientRects):
        (WebCore::Element::getBoundingClientRect):
        * dom/Element.h:
        * dom/Element.idl:
        * page/DOMWindow.idl:
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::absoluteRects):
        (WebCore::RenderInline::absoluteQuads):

2009-02-10  David Hyatt  <hyatt@apple.com>

        Get rid of capsLockStateMayHaveChanged on RenderObject.  It is only implemented by one class (text fields),
        so devirtualize and just query at the single call site.

        Reviewed by Eric Seidel

        * page/EventHandler.cpp:
        (WebCore::EventHandler::capsLockStateMayHaveChanged):
        * rendering/RenderObject.h:
        * rendering/RenderTextControlSingleLine.h:

2009-02-10  David Hyatt  <hyatt@apple.com>

        Shrink the size of all RenderObjects (except for RenderInlines) by 4 bytes.  This patch moves the cached vertical position member to RenderInlines,
        since they were the only objects being queried across multiple lines.

        Reviewed by Sam Weinig

        * rendering/InlineFlowBox.cpp:
        (WebCore::verticalPositionForBox):
        (WebCore::InlineFlowBox::computeLogicalBoxHeights):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::verticalPosition):
        * rendering/RenderBoxModelObject.h:
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::RenderInline):
        (WebCore::RenderInline::verticalPositionFromCache):
        * rendering/RenderInline.h:
        (WebCore::RenderInline::invalidateVerticalPosition):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::RenderObject):
        * rendering/RenderObject.h:
        * rendering/RenderText.cpp:
        * rendering/RenderText.h:
        * rendering/bidi.cpp:
        (WebCore::RenderBlock::layoutInlineChildren):

2009-02-10  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Mark Rowe.

        https://bugs.webkit.org/show_bug.cgi?id=23868
        Fix code style issues: removed 80-col wrapping, incorrect include style, if statement body on same line.

        * bindings/v8/custom/V8HTMLInputElementCustom.cpp:
        * bindings/v8/custom/V8HTMLOptionsCollectionCustom.cpp:

2009-02-10  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=23868
        Add HTMLInputElement and HTMLOptionsCollection V8 custom bindings.

        * bindings/v8/custom/V8HTMLInputElementCustom.cpp: Added.
        (WebCore::ACCESSOR_GETTER):
        (WebCore::ACCESSOR_SETTER):
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8HTMLOptionsCollectionCustom.cpp: Added.
        (WebCore::ACCESSOR_GETTER):
        (WebCore::ACCESSOR_SETTER):

2009-02-10  Adam Roben  <aroben@apple.com>

        Fix Bug 23871: Assertion failure beneath WebCore::openFunc when
        running http/tests/security/xss-DENIED-xsl-document-redirect.xml

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

        Reviewed by Alexey Proskuryakov.

        Covered by existing tests.

        * dom/XMLTokenizerLibxml2.cpp:
        (WebCore::openFunc): Use the two-parameter KURL constructor so that
        the string will be parsed. libxml2 gives us a UTF-8-encoded string
        that needs to be parsed.

2009-02-10  David Hyatt  <hyatt@apple.com>

        Shrink the size of all replaced elements (images, form controls, plugins) by 4 bytes by packing the
        overflow boolean into the RenderObject base class.

        Reviewed by Sam Weinig

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::RenderObject):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::replacedHasOverflow):
        (WebCore::RenderObject::setReplacedHasOverflow):
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::RenderReplaced):
        (WebCore::RenderReplaced::~RenderReplaced):
        (WebCore::RenderReplaced::adjustOverflowForBoxShadow):
        (WebCore::RenderReplaced::overflowHeight):
        (WebCore::RenderReplaced::overflowWidth):
        (WebCore::RenderReplaced::overflowLeft):
        (WebCore::RenderReplaced::overflowTop):
        (WebCore::RenderReplaced::overflowRect):
        * rendering/RenderReplaced.h:

2009-02-10  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Simon Fraser.

        https://bugs.webkit.org/show_bug.cgi?id=23870
        Make it possible for a port to require a user gesture for an <audio> or <video> element
        to load a url.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::HTMLMediaElement): Initialize m_loadRestrictions.
        (WebCore::HTMLMediaElement::attributeChanged): Only one attribute can change so put an "else" between tests.
        (WebCore::HTMLMediaElement::load): Return INVALID_STATE_ERR if RequireUserGestureLoadRestriction is set
        and we are not preocessing a user gesture.
        (WebCore::HTMLMediaElement::mediaPlayerNetworkStateChanged): Remove unnecessary white space.
        (WebCore::HTMLMediaElement::play): Ditto.
        (WebCore::HTMLMediaElement::endScrubbing): Remove unnecessary braces added in r40789.
        (WebCore::HTMLMediaElement::mediaPlayerTimeChanged): Cache currentTime() in a local instead of calling it
        multiple times.
        (WebCore::HTMLMediaElement::processingUserGesture): New.
        * html/HTMLMediaElement.h:
        (WebCore::HTMLMediaElement::): Define LoadRestrictions, add m_loadRestrictions.

2009-02-10  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Sam Weinig.

        Remove the SVG checks from FloatPoint3D as it is used
        by TransformationMatrix.

        * platform/graphics/FloatPoint3D.cpp:
        * platform/graphics/FloatPoint3D.h:

2009-02-10  David Hyatt  <hyatt@apple.com>

        Remove the m_baseline member variable from all line boxes, since it can easily be computed when needed and did not need to be cached.

        Reviewed by Sam Weinig

        * rendering/EllipsisBox.cpp:
        (WebCore::EllipsisBox::paint):
        (WebCore::EllipsisBox::nodeAtPoint):
        * rendering/EllipsisBox.h:
        (WebCore::EllipsisBox::EllipsisBox):
        * rendering/InlineBox.h:
        (WebCore::InlineBox::InlineBox):
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::verticallyAlignBoxes):
        (WebCore::InlineFlowBox::computeLogicalBoxHeights):
        (WebCore::InlineFlowBox::placeBoxesVertically):
        (WebCore::InlineFlowBox::paintTextDecorations):
        * rendering/InlineFlowBox.h:
        (WebCore::InlineFlowBox::marginBorderPaddingLeft):
        (WebCore::InlineFlowBox::marginBorderPaddingRight):
        (WebCore::InlineFlowBox::marginLeft):
        (WebCore::InlineFlowBox::marginRight):
        (WebCore::InlineFlowBox::borderLeft):
        (WebCore::InlineFlowBox::borderRight):
        (WebCore::InlineFlowBox::borderTop):
        (WebCore::InlineFlowBox::borderBottom):
        (WebCore::InlineFlowBox::paddingLeft):
        (WebCore::InlineFlowBox::paddingRight):
        (WebCore::InlineFlowBox::paddingTop):
        (WebCore::InlineFlowBox::paddingBottom):
        (WebCore::InlineFlowBox::includeLeftEdge):
        (WebCore::InlineFlowBox::includeRightEdge):
        (WebCore::InlineFlowBox::baseline):
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paint):
        (WebCore::InlineTextBox::paintDecoration):
        (WebCore::InlineTextBox::paintSpellingOrGrammarMarker):
        (WebCore::InlineTextBox::paintCompositionUnderline):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::getBaselineOfFirstLineBox):
        (WebCore::RenderBlock::getBaselineOfLastLineBox):
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::baselinePosition):
        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::placeEllipsis):
        * rendering/SVGInlineTextBox.cpp:
        (WebCore::SVGInlineTextBox::paintDecoration):
        * rendering/SVGRootInlineBox.cpp:
        (WebCore::applyTextAnchorToTextChunk):
        (WebCore::SVGRootInlineBox::layoutInlineBoxes):

2009-02-10  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=23867
        Eliminate obsolete frame->document() checks

        * page/FrameView.cpp: (WebCore::FrameView::paintContents): Apparently due to a typo
        (document vs. !document), fillWithRed was always set to false, and other branches were
        never taken. Removing the check for document restores debug-only red color filling.

        * loader/FrameLoader.cpp: (WebCore::FrameLoader::begin): Only call dispatchWindowObjectAvailable()
        after a document is created. A client can do anything in its delegate method, so we'd need
        to have frame->document() checks otherwise. DumpRenderTree uses this delegate to add its
        custom property, and it was crashing due to null document in JSDOMWindowBase::getOwnPropertySlot().

        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::getOwnPropertySlot):
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::addEventListener):
        (WebCore::JSDOMWindow::removeEventListener):
        * bindings/js/JSNavigatorCustom.cpp:
        (WebCore::needsYouTubeQuirk):
        * bindings/js/ScheduledAction.cpp:
        (WebCore::ScheduledAction::execute):
        * bindings/js/ScriptControllerMac.mm:
        (WebCore::updateRenderingForBindings):
        * dom/Document.cpp:
        (WebCore::Document::initSecurityContext):
        * editing/Editor.cpp:
        (WebCore::Editor::deleteWithDirection):
        (WebCore::Editor::dispatchCPPEvent):
        (WebCore::Editor::applyStyle):
        (WebCore::Editor::applyParagraphStyle):
        * editing/EditorCommand.cpp:
        (WebCore::Editor::Command::execute):
        (WebCore::Editor::Command::isEnabled):
        (WebCore::Editor::Command::state):
        (WebCore::Editor::Command::value):
        * editing/SelectionController.cpp:
        (WebCore::SelectionController::recomputeCaretRect):
        (WebCore::SelectionController::selectFrameElementInParentIfFullySelected):
        (WebCore::SelectionController::selectAll):
        (WebCore::SelectionController::setFocused):
        * inspector/InspectorController.cpp:
        (WebCore::getResourceDocumentNode):
        * inspector/JavaScriptDebugServer.cpp:
        (WebCore::JavaScriptDebugServer::setJavaScriptPaused):
        * loader/DocumentLoader.cpp:
        (WebCore::canonicalizedTitle):
        (WebCore::DocumentLoader::stopLoading):
        (WebCore::DocumentLoader::isLoadingInAPISense):
        (WebCore::DocumentLoader::subresource):
        (WebCore::DocumentLoader::getSubresources):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::urlSelected):
        (WebCore::FrameLoader::stop):
        (WebCore::FrameLoader::iconURL):
        (WebCore::FrameLoader::executeIfJavaScriptURL):
        (WebCore::FrameLoader::clear):
        (WebCore::FrameLoader::endIfNotLoadingMainResource):
        (WebCore::FrameLoader::restoreDocumentState):
        (WebCore::FrameLoader::gotoAnchor):
        (WebCore::FrameLoader::loadDone):
        (WebCore::FrameLoader::checkCompleted):
        (WebCore::FrameLoader::checkCallImplicitClose):
        (WebCore::FrameLoader::scheduleRefresh):
        (WebCore::FrameLoader::outgoingOrigin):
        (WebCore::FrameLoader::canCachePageContainingThisFrame):
        (WebCore::FrameLoader::logCanCacheFrameDecision):
        (WebCore::FrameLoader::updatePolicyBaseURL):
        (WebCore::FrameLoader::setPolicyBaseURL):
        (WebCore::FrameLoader::frameDetached):
        (WebCore::FrameLoader::shouldScrollToAnchor):
        (WebCore::FrameLoader::saveDocumentState):
        * loader/archive/cf/LegacyWebArchive.cpp:
        (WebCore::LegacyWebArchive::create):
        * loader/icon/IconFetcher.cpp:
        (WebCore::IconFetcher::create):
        * loader/icon/IconLoader.cpp:
        (WebCore::IconLoader::startLoading):
        * page/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::visiblePositionForPoint):
        * page/Chrome.cpp:
        (WebCore::PageGroupLoadDeferrer::PageGroupLoadDeferrer):
        (WebCore::PageGroupLoadDeferrer::~PageGroupLoadDeferrer):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::sessionStorage):
        (WebCore::DOMWindow::alert):
        (WebCore::DOMWindow::confirm):
        (WebCore::DOMWindow::prompt):
        (WebCore::DOMWindow::scrollX):
        (WebCore::DOMWindow::scrollY):
        (WebCore::DOMWindow::getMatchedCSSRules):
        (WebCore::DOMWindow::openDatabase):
        (WebCore::DOMWindow::scrollBy):
        (WebCore::DOMWindow::scrollTo):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::allowDHTMLDrag):
        (WebCore::EventHandler::scrollOverflow):
        (WebCore::EventHandler::handleMousePressEvent):
        (WebCore::EventHandler::handleMouseDoubleClickEvent):
        (WebCore::EventHandler::handleMouseMoveEvent):
        (WebCore::EventHandler::handleMouseReleaseEvent):
        (WebCore::EventHandler::updateDragAndDrop):
        (WebCore::EventHandler::handleWheelEvent):
        (WebCore::EventHandler::sendContextMenuEvent):
        (WebCore::EventHandler::capsLockStateMayHaveChanged):
        (WebCore::EventHandler::sendResizeEvent):
        (WebCore::EventHandler::sendScrollEvent):
        * page/FocusController.cpp:
        (WebCore::deepFocusableNode):
        (WebCore::FocusController::advanceFocus):
        * page/Frame.cpp:
        (WebCore::Frame::setFocusedNodeIfNeeded):
        (WebCore::Frame::shouldApplyTextZoom):
        (WebCore::Frame::shouldApplyPageZoom):
        (WebCore::Frame::setZoomFactor):
        (WebCore::Frame::setPrinting):
        (WebCore::Frame::reapplyStyles):
        (WebCore::Frame::isContentEditable):
        (WebCore::Frame::computeAndSetTypingStyle):
        (WebCore::Frame::selectionComputedStyle):
        (WebCore::Frame::applyEditingStyleToBodyElement):
        (WebCore::Frame::removeEditingStyleFromBodyElement):
        (WebCore::Frame::contentRenderer):
        (WebCore::Frame::styleForSelectionStart):
        (WebCore::Frame::setSelectionFromNone):
        (WebCore::Frame::findString):
        (WebCore::Frame::markAllMatchesForText):
        (WebCore::Frame::setMarkedTextMatchesAreHighlighted):
        (WebCore::Frame::documentTypeString):
        (WebCore::Frame::shouldClose):
        (WebCore::Frame::respondToChangedSelection):
        * page/FrameView.cpp:
        (WebCore::FrameView::~FrameView):
        (WebCore::FrameView::createScrollbar):
        (WebCore::FrameView::layout):
        (WebCore::FrameView::layoutTimerFired):
        (WebCore::FrameView::scheduleRelayout):
        (WebCore::FrameView::needsLayout):
        (WebCore::FrameView::unscheduleRelayout):
        (WebCore::FrameView::windowClipRect):
        * page/Geolocation.cpp:
        (WebCore::Geolocation::disconnectFrame):
        * page/Page.cpp:
        (WebCore::networkStateChanged):
        (WebCore::Page::~Page):
        (WebCore::Page::unmarkAllTextMatches):
        (WebCore::Page::setMediaVolume):
        * page/animation/AnimationController.cpp:
        (WebCore::AnimationControllerPrivate::updateRenderingDispatcherFired):
        * page/mac/EventHandlerMac.mm:
        (WebCore::EventHandler::currentKeyboardEvent):
        (WebCore::EventHandler::needsKeyboardEventDisambiguationQuirks):
        * page/mac/FrameMac.mm:
        (WebCore::Frame::dashboardRegionsDictionary):
        (WebCore::Frame::setUserStyleSheetLocation):
        (WebCore::Frame::setUserStyleSheet):
        * storage/LocalStorageArea.cpp:
        (WebCore::LocalStorageArea::dispatchStorageEvent):
        * storage/SessionStorageArea.cpp:
        (WebCore::SessionStorageArea::dispatchStorageEvent):
        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::setContainerSize):
        (WebCore::SVGImage::usesContainerSize):
        (WebCore::SVGImage::size):
        (WebCore::SVGImage::hasRelativeWidth):
        (WebCore::SVGImage::hasRelativeHeight):
        Removed frame->document() checks.

2009-02-10  Adam Treat  <adam.treat@torchmobile.com>

        Reviewed by George Staikos.

        Attempt to fix the Qt build after r40791.

        * rendering/RenderSVGRoot.cpp:

2009-02-10  Adam Treat  <adam.treat@torchmobile.com>

        Reviewed by George Staikos.

        Minor code cleanup.

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

2009-02-10  Adam Treat  <adam.treat@torchmobile.com>

        Fix Qt build following r40793.

        * editing/qt/EditorQt.cpp:

2009-02-10  Feng Qian <feng@chromium.org>

        Reviewed by Alexey Proskuryakov.

        Fix crashes when accessing navigator object of a deleted frame.
        https://bugs.webkit.org/show_bug.cgi?id=23626
        A layout test is added: fast/dom/navigator-detached-no-crash.html

        * page/Navigator.cpp:
        (WebCore::Navigator::cookieEnabled):
        (WebCore::Navigator::javaEnabled):

2009-02-10  Sverrir Berg  <sverrir@chromium.org>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=23630
        Add complex font rendering using Skia instead of Windows ScriptTextOut.
        This adds support for enhanced webkit styles when drawing complex
        glyphs.

        * platform/graphics/chromium/FontChromiumWin.cpp:
        (WebCore::Font::drawGlyphs):
        (WebCore::Font::drawComplexText):
        * platform/graphics/chromium/UniscribeHelper.cpp:
        (WebCore::containsMissingGlyphs):
        (WebCore::UniscribeHelper::draw):
        (WebCore::UniscribeHelper::shape):
        * platform/graphics/chromium/UniscribeHelper.h:
        * platform/graphics/skia/SkiaFontWin.cpp:
        (WebCore::windowsCanHandleTextDrawing):
        (WebCore::skiaDrawText):
        (WebCore::paintSkiaText):
        * platform/graphics/skia/SkiaFontWin.h:

2009-02-10  Darin Fisher  <darin@chromium.org>

        Revert r40797 as requested by Sam Weinig.

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

        * bindings/scripts/CodeGeneratorJS.pm:
        * dom/Document.idl:
        * html/HTMLCanvasElement.idl:

2009-02-09  Darin Fisher  <darin@chromium.org>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=23855
        Fix TransformationMatrixSkia.cpp and GraphicsContextSkia.cpp bustage

        * platform/graphics/skia/GraphicsContextSkia.cpp:
        (WebCore::GraphicsContext::getCTM):
        * platform/graphics/skia/TransformationMatrixSkia.cpp:
        (WebCore::TransformationMatrix::operator SkMatrix):

2009-02-09  Dan Bernstein  <mitz@apple.com>

        Reviewed by Dave Hyatt.

        - fix <rdar://problem/6568942> REGRESSION: Font rendering in Wikipedia input field is incorrect (default GDI text mode)

        * platform/graphics/win/SimpleFontDataWin.cpp:
        (WebCore::SimpleFontData::widthForGDIGlyph): Make sure that the DC is
        in the advanced graphics mode before calling GetCharWidthI(), because
        otherwise that function returns incorrect results for the default UI
        font at a certain size.

2009-02-09  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Simon Fraser

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

        Added 3D functions to WebKitCSSMatrix. This depends on the 3D functions
        added to TransformationMatrix in https://bugs.webkit.org/show_bug.cgi?id=6868

        Test: transforms/3d/cssmatrix-3d-interface.xhtml

        * css/WebKitCSSMatrix.cpp:
        * css/WebKitCSSMatrix.h:
        * css/WebKitCSSMatrix.idl:

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

        Reviewed by Darin Adler.

        Fix <https://bugs.webkit.org/show_bug.cgi?id=23858>
        Bug 23858: Crash when removing a HTMLSelectElement from the document from inside its focus event handler

        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::menuListDefaultEventHandler): Don't store the renderer in a local variable
        as it can be invalidated by any of the calls to focus() within the function.  Instead, retrieve it and
        null-check it when it is needed.

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

        Remove the m_height member from InlineBox.  This shaves 4 bytes off of all inline boxes.  Unfortunately SVG
        sets heights that are independent of the renderer or of the font, and so all SVG boxes have to retain m_height
        member variables.

        height() on InlineBox is now a virtual function that does a dynamic computation (including shrinking boxes
        with no text children).  For SVG boxes there is also a non-virtual setHeight function for updating the
        m_height member variable like before.

        Reviewed by Darin Adler

        * rendering/EllipsisBox.cpp:
        (WebCore::EllipsisBox::nodeAtPoint):
        * rendering/EllipsisBox.h:
        (WebCore::EllipsisBox::EllipsisBox):
        * rendering/InlineBox.cpp:
        (WebCore::InlineBox::height):
        (WebCore::InlineBox::root):
        * rendering/InlineBox.h:
        (WebCore::InlineBox::InlineBox):
        (WebCore::InlineBox::isInlineFlowBox):
        (WebCore::InlineBox::isRootInlineBox):
        (WebCore::InlineBox::topOverflow):
        (WebCore::InlineBox::bottomOverflow):
        (WebCore::InlineBox::leftOverflow):
        (WebCore::InlineBox::rightOverflow):
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::height):
        (WebCore::InlineFlowBox::adjustMaxAscentAndDescent):
        (WebCore::InlineFlowBox::computeLogicalBoxHeights):
        (WebCore::InlineFlowBox::placeBoxesVertically):
        (WebCore::InlineFlowBox::shrinkBoxesWithNoTextChildren):
        (WebCore::InlineFlowBox::nodeAtPoint):
        * rendering/InlineFlowBox.h:
        (WebCore::InlineFlowBox::isInlineFlowBox):
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::height):
        (WebCore::InlineTextBox::nodeAtPoint):
        (WebCore::InlineTextBox::paintSpellingOrGrammarMarker):
        (WebCore::InlineTextBox::paintCompositionUnderline):
        * rendering/InlineTextBox.h:
        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::height):
        (WebCore::RootInlineBox::placeEllipsis):
        (WebCore::RootInlineBox::setVerticalOverflowPositions):
        * rendering/RootInlineBox.h:
        (WebCore::RootInlineBox::isRootInlineBox):
        (WebCore::RootInlineBox::topOverflow):
        (WebCore::RootInlineBox::bottomOverflow):
        (WebCore::RootInlineBox::leftOverflow):
        (WebCore::RootInlineBox::rightOverflow):
        (WebCore::RootInlineBox::selectionBottom):
        (WebCore::RootInlineBox::Overflow::Overflow):
        (WebCore::RootInlineBox::setVerticalSelectionPositions):
        * rendering/SVGInlineFlowBox.h:
        (WebCore::SVGInlineFlowBox::SVGInlineFlowBox):
        (WebCore::SVGInlineFlowBox::height):
        (WebCore::SVGInlineFlowBox::setHeight):
        * rendering/SVGInlineTextBox.cpp:
        (WebCore::SVGInlineTextBox::SVGInlineTextBox):
        * rendering/SVGInlineTextBox.h:
        (WebCore::SVGInlineTextBox::height):
        (WebCore::SVGInlineTextBox::setHeight):
        * rendering/SVGRootInlineBox.cpp:
        (WebCore::SVGRootInlineBox::layoutInlineBoxes):
        * rendering/SVGRootInlineBox.h:
        (WebCore::SVGRootInlineBox::SVGRootInlineBox):
        (WebCore::SVGRootInlineBox::height):
        (WebCore::SVGRootInlineBox::setHeight):

2009-02-09  Eric Seidel  <eric@webkit.org>

        Reviewed by Sam Weinig.

        Document our Selection DOM extensions
        (in preparation for re-writing Selection to work with ranges)

        * page/DOMSelection.cpp:
        (WebCore::DOMSelection::type):
        * page/DOMSelection.h:
        * page/DOMSelection.idl:

2009-02-09  Eric Seidel  <eric@webkit.org>

        Attempt to fix wx build

        * WebCoreSources.bkl: change Selection to VisibleSelection

2009-02-06  Darin Fisher  <darin@chromium.org>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=23809
        Return CanvasRenderingContext2D instead of DOMObject in IDL to avoid V8 #ifdefs

        * bindings/scripts/CodeGeneratorJS.pm:
        * dom/Document.idl:
        * html/HTMLCanvasElement.idl:

2009-02-09  Dirk Schulze  <krit@webkit.org>

        Reviewed by Eric Seidel.

        Transform the gradient instead of the context for most platforms and
        transform the context after CGContextReplacePathWithStrokedPath for CG.

        REGRESSION: SVG gradient transformation/BoundingBox can cause ugly stroke thickness
        https://bugs.webkit.org/show_bug.cgi?id=23547

        * platform/graphics/Gradient.h:
        (WebCore::Gradient::setGradientSpaceTransform):
        (WebCore::Gradient::gradientSpaceTransform):
        * platform/graphics/cairo/GradientCairo.cpp:
        (WebCore::Gradient::platformGradient):
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::fillPath):
        (WebCore::GraphicsContext::strokePath):
        (WebCore::GraphicsContext::fillRect):
        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::GraphicsContext::fillPath):
        (WebCore::GraphicsContext::strokePath):
        (WebCore::GraphicsContext::fillRect):
        * platform/graphics/skia/GradientSkia.cpp:
        (WebCore::Gradient::platformGradient):
        * svg/graphics/SVGPaintServerGradient.cpp:
        (WebCore::SVGPaintServerGradient::SVGPaintServerGradient):
        (WebCore::clipToTextMask):
        (WebCore::SVGPaintServerGradient::setup):
        (WebCore::SVGPaintServerGradient::teardown):

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

        Reviewed by David Hyatt.

        Fix the highlight when inspecting inline elements.

        * inspector/InspectorController.cpp:
        (WebCore::drawHighlightForBox):
        (WebCore::drawHighlightForLineBoxes):
        (WebCore::InspectorController::drawNodeHighlight):

2009-02-09  Eric Seidel  <eric@webkit.org>

        Fix the gtk build by adding VisibleSelection and removing Selection.

        * GNUmakefile.am:

2009-02-09  Eric Seidel  <eric@webkit.org>

        Reviewed by Dave Hyatt.

        Rename Selection to VisibleSelection to allow us to separate
        the selections the user works with from the ones used by
        the JS editing APIs.
        https://bugs.webkit.org/show_bug.cgi?id=23852

        No functional changes, thus no tests.

        * WebCore.base.exp:
        * WebCore.pro:
        * WebCore.scons:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/Element.cpp:
        (WebCore::Element::updateFocusAppearance):
        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::updateStartEnd):
        (WebCore::ApplyStyleCommand::surroundNodeRangeWithElement):
        * editing/BreakBlockquoteCommand.cpp:
        (WebCore::BreakBlockquoteCommand::doApply):
        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::inputText):
        (WebCore::CompositeEditCommand::deleteSelection):
        (WebCore::CompositeEditCommand::rebalanceWhitespace):
        (WebCore::CompositeEditCommand::pushAnchorElementDown):
        (WebCore::CompositeEditCommand::pushPartiallySelectedAnchorElementsDown):
        (WebCore::CompositeEditCommand::moveParagraphs):
        (WebCore::CompositeEditCommand::breakOutOfEmptyListItem):
        (WebCore::CompositeEditCommand::breakOutOfEmptyMailBlockquotedParagraph):
        * editing/CompositeEditCommand.h:
        * editing/CreateLinkCommand.cpp:
        (WebCore::CreateLinkCommand::doApply):
        * editing/DeleteButtonController.cpp:
        (WebCore::enclosingDeletableElement):
        (WebCore::DeleteButtonController::respondToChangedSelection):
        * editing/DeleteButtonController.h:
        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::DeleteSelectionCommand):
        (WebCore::DeleteSelectionCommand::clearTransientState):
        (WebCore::DeleteSelectionCommand::doApply):
        * editing/DeleteSelectionCommand.h:
        (WebCore::DeleteSelectionCommand::create):
        * editing/EditCommand.cpp:
        (WebCore::EditCommand::setStartingSelection):
        (WebCore::EditCommand::setEndingSelection):
        * editing/EditCommand.h:
        (WebCore::EditCommand::startingSelection):
        (WebCore::EditCommand::endingSelection):
        * editing/Editor.cpp:
        (WebCore::Editor::selectionForCommand):
        (WebCore::Editor::respondToChangedSelection):
        (WebCore::Editor::respondToChangedContents):
        (WebCore::Editor::applyStyle):
        (WebCore::Editor::applyParagraphStyle):
        (WebCore::Editor::appliedEditing):
        (WebCore::Editor::unappliedEditing):
        (WebCore::Editor::reappliedEditing):
        (WebCore::Editor::insertTextWithoutSendingTextEvent):
        (WebCore::Editor::selectComposition):
        (WebCore::Editor::confirmComposition):
        (WebCore::Editor::advanceToNextMisspelling):
        (WebCore::Editor::markMisspellingsAfterTypingToPosition):
        (WebCore::markMisspellingsOrBadGrammar):
        (WebCore::Editor::markMisspellings):
        (WebCore::Editor::markBadGrammar):
        (WebCore::Editor::rangeForPoint):
        (WebCore::Editor::transpose):
        * editing/Editor.h:
        * editing/EditorCommand.cpp:
        (WebCore::expandSelectionToGranularity):
        (WebCore::executeSwapWithMark):
        (WebCore::enabledVisibleSelection):
        (WebCore::enabledVisibleSelectionAndMark):
        (WebCore::enableCaretInEditableText):
        * editing/FormatBlockCommand.cpp:
        (WebCore::FormatBlockCommand::modifyRange):
        (WebCore::FormatBlockCommand::doApply):
        * editing/IndentOutdentCommand.cpp:
        (WebCore::IndentOutdentCommand::indentRegion):
        (WebCore::IndentOutdentCommand::outdentRegion):
        (WebCore::IndentOutdentCommand::doApply):
        * editing/InsertLineBreakCommand.cpp:
        (WebCore::InsertLineBreakCommand::doApply):
        * editing/InsertListCommand.cpp:
        (WebCore::InsertListCommand::modifyRange):
        (WebCore::InsertListCommand::doApply):
        * editing/InsertParagraphSeparatorCommand.cpp:
        (WebCore::InsertParagraphSeparatorCommand::doApply):
        * editing/InsertTextCommand.cpp:
        (WebCore::InsertTextCommand::performTrivialReplace):
        (WebCore::InsertTextCommand::input):
        * editing/ModifySelectionListLevel.cpp:
        (WebCore::getStartEndListChildren):
        (WebCore::canIncreaseListLevel):
        (WebCore::canDecreaseListLevel):
        * editing/MoveSelectionCommand.cpp:
        (WebCore::MoveSelectionCommand::doApply):
        * editing/RemoveFormatCommand.cpp:
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplacementFragment::ReplacementFragment):
        (WebCore::ReplaceSelectionCommand::doApply):
        (WebCore::ReplaceSelectionCommand::completeHTMLReplacement):
        * editing/Selection.cpp: Removed.
        * editing/Selection.h: Removed.
        * editing/SelectionController.cpp:
        (WebCore::SelectionController::moveTo):
        (WebCore::SelectionController::setSelection):
        (WebCore::SelectionController::nodeWillBeRemoved):
        (WebCore::SelectionController::clear):
        (WebCore::SelectionController::setBase):
        (WebCore::SelectionController::setExtent):
        (WebCore::SelectionController::selectFrameElementInParentIfFullySelected):
        (WebCore::SelectionController::selectAll):
        (WebCore::SelectionController::setSelectedRange):
        * editing/SelectionController.h:
        (WebCore::SelectionController::selection):
        (WebCore::SelectionController::selectionType):
        * editing/TypingCommand.cpp:
        (WebCore::TypingCommand::insertText):
        (WebCore::TypingCommand::deleteKeyPressed):
        (WebCore::TypingCommand::forwardDeleteKeyPressed):
        * editing/TypingCommand.h:
        * editing/VisiblePosition.cpp:
        (WebCore::VisiblePosition::honorEditableBoundaryAtOrBefore):
        (WebCore::VisiblePosition::honorEditableBoundaryAtOrAfter):
        * editing/VisibleSelection.cpp: Added.
        (WebCore::VisibleSelection::VisibleSelection):
        (WebCore::VisibleSelection::selectionFromContentsOfNode):
        (WebCore::VisibleSelection::setBase):
        (WebCore::VisibleSelection::setExtent):
        (WebCore::VisibleSelection::firstRange):
        (WebCore::VisibleSelection::toNormalizedRange):
        (WebCore::VisibleSelection::expandUsingGranularity):
        (WebCore::makeSearchRange):
        (WebCore::VisibleSelection::appendTrailingWhitespace):
        (WebCore::VisibleSelection::setBaseAndExtentToDeepEquivalents):
        (WebCore::VisibleSelection::setStartAndEndFromBaseAndExtentRespectingGranularity):
        (WebCore::VisibleSelection::updateSelectionType):
        (WebCore::VisibleSelection::validate):
        (WebCore::VisibleSelection::setWithoutValidation):
        (WebCore::VisibleSelection::adjustSelectionToAvoidCrossingEditingBoundaries):
        (WebCore::VisibleSelection::isContentEditable):
        (WebCore::VisibleSelection::isContentRichlyEditable):
        (WebCore::VisibleSelection::rootEditableElement):
        (WebCore::VisibleSelection::shadowTreeRootNode):
        (WebCore::VisibleSelection::debugPosition):
        (WebCore::VisibleSelection::formatForDebugger):
        (WebCore::VisibleSelection::showTreeForThis):
        (showTree):
        * editing/VisibleSelection.h: Added.
        (WebCore::VisibleSelection::):
        (WebCore::VisibleSelection::selectionType):
        (WebCore::VisibleSelection::setAffinity):
        (WebCore::VisibleSelection::affinity):
        (WebCore::VisibleSelection::base):
        (WebCore::VisibleSelection::extent):
        (WebCore::VisibleSelection::start):
        (WebCore::VisibleSelection::end):
        (WebCore::VisibleSelection::visibleStart):
        (WebCore::VisibleSelection::visibleEnd):
        (WebCore::VisibleSelection::isNone):
        (WebCore::VisibleSelection::isCaret):
        (WebCore::VisibleSelection::isRange):
        (WebCore::VisibleSelection::isCaretOrRange):
        (WebCore::VisibleSelection::isBaseFirst):
        (WebCore::VisibleSelection::granularity):
        (WebCore::operator==):
        (WebCore::operator!=):
        * editing/htmlediting.cpp:
        (WebCore::selectionForParagraphIteration):
        (WebCore::avoidIntersectionWithNode):
        * editing/htmlediting.h:
        * editing/markup.cpp:
        (WebCore::createMarkup):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::selection):
        * html/HTMLInputElement.h:
        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::selection):
        * html/HTMLTextAreaElement.h:
        * page/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::selection):
        (WebCore::AccessibilityObject::visiblePositionRangeForUnorderedPositions):
        * page/AccessibilityObject.h:
        * page/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::selection):
        (WebCore::AccessibilityRenderObject::setSelectedTextRange):
        (WebCore::AccessibilityRenderObject::visiblePositionRangeForLine):
        (WebCore::AccessibilityRenderObject::setSelectedVisiblePositionRange):
        (WebCore::AccessibilityRenderObject::doAXRangeForLine):
        * page/AccessibilityRenderObject.h:
        * page/DOMSelection.cpp:
        (WebCore::DOMSelection::anchorNode):
        (WebCore::DOMSelection::anchorOffset):
        (WebCore::DOMSelection::focusNode):
        (WebCore::DOMSelection::focusOffset):
        (WebCore::DOMSelection::collapseToEnd):
        (WebCore::DOMSelection::collapseToStart):
        (WebCore::DOMSelection::getRangeAt):
        (WebCore::DOMSelection::addRange):
        * page/DOMSelection.h:
        * page/DragController.cpp:
        (WebCore::DragController::tryDocumentDrag):
        (WebCore::setSelectionToDragCaret):
        (WebCore::DragController::concludeEditDrag):
        (WebCore::prepareClipboardForImageDrag):
        (WebCore::DragController::startDrag):
        (WebCore::DragController::placeDragCaret):
        * page/EditorClient.h:
        * page/EventHandler.cpp:
        (WebCore::EventHandler::selectClosestWordFromMouseEvent):
        (WebCore::EventHandler::selectClosestWordOrLinkFromMouseEvent):
        (WebCore::EventHandler::handleMousePressEventTripleClick):
        (WebCore::EventHandler::handleMousePressEventSingleClick):
        (WebCore::EventHandler::updateSelectionForMouseDrag):
        (WebCore::EventHandler::handleMouseReleaseEvent):
        * page/Frame.cpp:
        (WebCore::Frame::mark):
        (WebCore::Frame::setMark):
        (WebCore::Frame::selectionLayoutChanged):
        (WebCore::Frame::shouldChangeSelection):
        (WebCore::Frame::shouldDeleteSelection):
        (WebCore::Frame::revealSelection):
        (WebCore::Frame::setSelectionFromNone):
        (WebCore::Frame::findString):
        (WebCore::Frame::respondToChangedSelection):
        * page/Frame.h:
        * page/Page.cpp:
        (WebCore::Page::selection):
        * page/Page.h:
        * page/mac/AccessibilityObjectWrapper.mm:
        (-[AccessibilityObjectWrapper textMarkerRangeForSelection]):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::fillInlineSelectionGaps):
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::setSelectionRange):
        (WebCore::RenderTextControl::selection):
        * rendering/RenderTextControl.h:
        * rendering/RenderTreeAsText.cpp:
        (WebCore::writeSelection):
        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::fillLineSelectionGap):
        * svg/SVGTextContentElement.cpp:
        (WebCore::SVGTextContentElement::selectSubString):

2009-02-09  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Dave Hyatt.

        https://bugs.webkit.org/show_bug.cgi?id=23806
        Fix a regression crash where an empty src value and a "text/html" type
        on an EMBED element did not finish ResourceRequest initialization due to
        an early return.

        Test: fast/loader/empty-embed-src-attribute.html

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

2009-02-09  Rob Buis  <rwlbuis@gmail.com>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=23816
        Clean up RenderSVGRoot.cpp

        Clean up RenderSVGRoot.cpp.

        * rendering/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::paint):
        (WebCore::RenderSVGRoot::calcViewport):

2009-02-09  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Antti Koivisto

        https://bugs.webkit.org/show_bug.cgi?id=23737
        Make it possible to control media element playback without knowing so many
        internal implementation details.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::togglePlayState): New, toggle between playing and paused state.
        (WebCore::HTMLMediaElement::beginScrubbing): New, pause as necessary for scrubbing mode.
        (WebCore::HTMLMediaElement::endScrubbing): New, resume playback if paused for scrubbing mode.
        * html/HTMLMediaElement.h:

        (WebCore::HTMLMediaElement::hasVideo): New, added so clients don't need to access MediaPlayer directly.
        * html/HTMLVideoElement.h:

        (WebCore::HTMLVideoElement::hasVideo): New.

        * rendering/MediaControlElements.cpp:
        (WebCore::MediaControlPlayButtonElement::defaultEventHandler): Use new media element
        togglePlayState method.
        (WebCore::MediaControlTimelineElement::defaultEventHandler): Tell media element when scrubbing
        begins and ends so it can deal with pausing logic. Don't call setCurrentTime unless the time
        will change.

        * rendering/RenderMedia.cpp:
        (WebCore::RenderMedia::updateControls): Ask media element if it is able to play instead of including
        internal logic here.
        (WebCore::RenderMedia::updateControlVisibility): Ditto.

2009-02-09  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Antti Koivisto

        Change RenderPart and RenderPartObject constructors to take a Node*
        instead of a HTMLFrameOwnerElement* since that is all then need.

        * rendering/RenderPart.cpp:
        (WebCore::RenderPart::RenderPart): take Node* instead of HTMLFrameOwnerElement*
        * rendering/RenderPart.h:
        * rendering/RenderPartObject.cpp:
        (WebCore::RenderPartObject::RenderPartObject):  take Node* instead of HTMLFrameOwnerElement*
        * rendering/RenderPartObject.h:

2009-02-09  Dan Bernstein  <mitz@apple.com>

        - fix -Wmissing-prototypes builds

        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::isHeaderElement): Marked this function static.
        (WebCore::haveSameTagName): Ditto.
        * editing/markup.cpp:
        (WebCore::isSpecialAncestorBlock): Ditto.
        * platform/graphics/transforms/TransformationMatrix.cpp:
        (WebCore::makeMapBetweenRects): Removed unused function.
        * platform/graphics/transforms/TransformationMatrix.h: Removed unused
        declaration of private member makeMapBetweenRects().

2009-02-09  Adam Treat  <adam.treat@torchmobile.com>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=23850
        Code cleanup of HTMLParser class which was using a mix of m_* and bare
        class member variable names which helps to obfuscate the code.  Also
        changed a few of the static helper functions to take a const pointer type
        as they should not be modifying the node.

        * html/HTMLParser.cpp:
        (WebCore::HTMLParser::HTMLParser):
        (WebCore::HTMLParser::~HTMLParser):
        (WebCore::HTMLParser::reset):
        (WebCore::HTMLParser::setCurrent):
        (WebCore::HTMLParser::parseToken):
        (WebCore::HTMLParser::parseDoctypeToken):
        (WebCore::isTableSection):
        (WebCore::isTablePart):
        (WebCore::isTableRelated):
        (WebCore::HTMLParser::insertNode):
        (WebCore::HTMLParser::handleError):
        (WebCore::HTMLParser::textCreateErrorCheck):
        (WebCore::HTMLParser::commentCreateErrorCheck):
        (WebCore::HTMLParser::headCreateErrorCheck):
        (WebCore::HTMLParser::bodyCreateErrorCheck):
        (WebCore::HTMLParser::framesetCreateErrorCheck):
        (WebCore::HTMLParser::formCreateErrorCheck):
        (WebCore::HTMLParser::isindexCreateErrorCheck):
        (WebCore::HTMLParser::noscriptCreateErrorCheck):
        (WebCore::HTMLParser::pCloserStrictCreateErrorCheck):
        (WebCore::HTMLParser::mapCreateErrorCheck):
        (WebCore::HTMLParser::getNode):
        (WebCore::HTMLParser::allowNestedRedundantTag):
        (WebCore::HTMLParser::processCloseTag):
        (WebCore::HTMLParser::isInline):
        (WebCore::HTMLParser::handleResidualStyleCloseTagAcrossBlocks):
        (WebCore::HTMLParser::reopenResidualStyleTags):
        (WebCore::HTMLParser::pushBlock):
        (WebCore::HTMLParser::popBlock):
        (WebCore::HTMLParser::popOneBlockCommon):
        (WebCore::HTMLParser::popOneBlock):
        (WebCore::HTMLParser::moveOneBlockToStack):
        (WebCore::HTMLParser::checkIfHasPElementInScope):
        (WebCore::HTMLParser::popInlineBlocks):
        (WebCore::HTMLParser::freeBlock):
        (WebCore::HTMLParser::createHead):
        (WebCore::HTMLParser::handleIsindex):
        (WebCore::HTMLParser::startBody):
        (WebCore::HTMLParser::finished):
        (WebCore::HTMLParser::reportErrorToConsole):
        * html/HTMLParser.h:

2009-02-09  Alexey Proskuryakov  <ap@webkit.org>

        Applying review comment on a second location.

        * rendering/RenderText.cpp: (WebCore::RenderText::nextOffset):
        Use "ifdef BUILDING_ON_TIGER".

2009-02-09  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=23845
        editing/deleting/backward-deletion.html fails on Tiger

        * rendering/RenderText.cpp:
        (WebCore::RenderText::previousOffset):
        (WebCore::RenderText::nextOffset):
        Work around a bug in older ICU versions by hardcoding narrow voiced marks.

2009-02-09  Adam Roben  <aroben@apple.com>

        Windows build fix

        * WebCore.vcproj/WebCore.vcproj: Fix the XML syntax.

2009-02-09  Jian Li  <jianli@chromium.org>

        Reviewed by Alexey Proskuryakov.

        Make WorkerMessagingProxy derive from two base proxy classes.
        https://bugs.webkit.org/show_bug.cgi?id=23777

        * bindings/js/WorkerScriptController.cpp:
        (WebCore::WorkerScriptController::evaluate):
        * dom/Worker.cpp:
        (WebCore::Worker::terminate):
        (WebCore::Worker::hasPendingActivity):
        * dom/WorkerContext.cpp:
        (WebCore::WorkerContext::reportException):
        * dom/WorkerMessagingProxy.cpp:
        (WebCore::WorkerThreadActivityReportTask::performTask):
        (WebCore::WorkerMessagingProxy::postExceptionToWorkerObject):
        (WebCore::WorkerMessagingProxy::workerObjectDestroyed):
        (WebCore::WorkerMessagingProxy::terminateWorkerContext):
        (WebCore::WorkerMessagingProxy::confirmWorkerThreadMessage):
        (WebCore::WorkerMessagingProxy::reportPendingActivity):
        (WebCore::WorkerMessagingProxy::reportPendingActivityInternal):
        (WebCore::WorkerMessagingProxy::hasPendingActivity):
        * dom/WorkerMessagingProxy.h:

2009-02-09  Jian Li  <jianli@chromium.org>

        Reviewed by Alexey Proskuryakov.

        Introduce 2 base classes to split WorkerMessagingProxy.
        https://bugs.webkit.org/show_bug.cgi?id=23776

        * GNUmakefile.am:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/WorkerContextProxy.h: Added.
        (WebCore::WorkerContextProxy::~WorkerContextProxy):
        * dom/WorkerObjectProxy.h: Added.
        (WebCore::WorkerObjectProxy::~WorkerObjectProxy):

2009-02-08  David Hyatt  <hyatt@apple.com>

        Fix for https://bugs.webkit.org/show_bug.cgi?id=23839

        Make sure that generated content is properly handled when content is moved from a block run-in
        to an inline run-in.

        Reviewed by Sam Weinig

        Added fast/runin/002.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::handleRunInChild):

2009-02-08  David Hyatt  <hyatt@apple.com>

        Fix for https://bugs.webkit.org/show_bug.cgi?id=23832, crash when inspecting an image using the
        Web inspector.

        Reviewed by Mark Rowe

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::absoluteRectsForRange):
        (WebCore::RenderObject::absoluteQuadsForRange):

2009-02-08  Dirk Schulze  <krit@webkit.org>

        Unreviewed Qt build fix.

        TransformationMatrix changes in r40761 broke QT build.

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

2009-02-08  Dirk Schulze  <krit@webkit.org>

        Reviewed by Holger Freyther.

        This is a follow up of the last commit. It cleans up TransformationMatrix.h
        and convert to a series of #elif.

        * platform/graphics/transforms/TransformationMatrix.h:

2009-02-08  Gustavo Noronha Silva  <gns@gnome.org>

        Reviewed by Simon Fraser.

        [CAIRO] build broken by TransformationMatrix rework
        https://bugs.webkit.org/show_bug.cgi?id=23831

        Fixed cairo build after the TransformationMatrix rework done in
        revision 40761.

        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::getCTM):
        (WebCore::GraphicsContext::concatCTM):
        * platform/graphics/cairo/TransformationMatrixCairo.cpp:
        (WebCore::TransformationMatrix::operator cairo_matrix_t):
        * platform/graphics/transforms/TransformationMatrix.h:

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

        Shrink the size of all InlineTextBoxes and all InlineBoxes (for images and replaced elements) by four bytes.
        Change the overflow variable on InlineFlowBoxes into a short and move the bits for InlineFlowBoxes out of the
        base InlineBox class.  Since the number of bits in the base class was 35, shoving the 3 bits for InlineFlowBoxes
        back down into that class (into the 16 bits exposed by making the overflow variable into a short), all text
        boxes and image boxes shrink by 4 bytes.

        Reviewed by Anders

        * rendering/InlineBox.h:
        (WebCore::InlineBox::InlineBox):
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::placeBoxesHorizontally):
        (WebCore::InlineFlowBox::computeLogicalBoxHeights):
        (WebCore::InlineFlowBox::placeBoxesVertically):
        * rendering/InlineFlowBox.h:
        (WebCore::InlineFlowBox::InlineFlowBox):
        (WebCore::InlineFlowBox::maxHorizontalVisualOverflow):
        (WebCore::InlineFlowBox::hasTextChildren):

2009-02-07  Dean Jackson  <dino@apple.com>

        Attempted build fix for Qt. Not reviewed.

        TransformationMatrix changes in r40761 broke non-Apple builds.

        * platform/graphics/qt/TransformationMatrixQt.cpp:
        (WebCore::TransformationMatrix::operator QMatrix):
        * platform/graphics/transforms/TransformationMatrix.h:

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

        This patch changes the base class of RenderInline from RenderBox to RenderBoxModelObject.  This shift
        in base class knocks 32 bytes off the size of every RenderInline.  All of the necessary functions
        for both RenderInline and RenderBox have either been pulled up into RenderBoxModelObject for sharing
        or split into two functions (one in each derived class).

        Reviewed by Anders and Antti

        * dom/Element.cpp:
        (WebCore::Element::offsetLeft):
        (WebCore::Element::offsetTop):
        (WebCore::Element::offsetWidth):
        (WebCore::Element::offsetHeight):
        (WebCore::Element::offsetParent):
        (WebCore::Element::clientWidth):
        (WebCore::Element::clientHeight):
        (WebCore::Element::scrollWidth):
        (WebCore::Element::scrollHeight):
        * dom/Node.cpp:
        (WebCore::Node::renderBox):
        (WebCore::Node::renderBoxModelObject):
        * dom/Node.h:
        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::isKeyboardFocusable):
        * rendering/InlineBox.h:
        (WebCore::InlineBox::boxModelObject):
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::marginLeft):
        (WebCore::InlineFlowBox::marginRight):
        (WebCore::InlineFlowBox::placeBoxesHorizontally):
        (WebCore::InlineFlowBox::computeLogicalBoxHeights):
        (WebCore::InlineFlowBox::placeBoxesVertically):
        (WebCore::InlineFlowBox::shrinkBoxesWithNoTextChildren):
        * rendering/InlineFlowBox.h:
        (WebCore::InlineFlowBox::borderLeft):
        (WebCore::InlineFlowBox::borderRight):
        (WebCore::InlineFlowBox::paddingLeft):
        (WebCore::InlineFlowBox::paddingRight):
        * rendering/RenderBlock.cpp:
        (WebCore::getBorderPaddingMargin):
        (WebCore::RenderBlock::calcInlinePrefWidths):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::imageChanged):
        (WebCore::RenderBox::calcReplacedWidthUsing):
        (WebCore::RenderBox::calcReplacedHeightUsing):
        (WebCore::RenderBox::containingBlockWidthForPositioned):
        (WebCore::RenderBox::containingBlockHeightForPositioned):
        (WebCore::RenderBox::calcAbsoluteHorizontal):
        (WebCore::RenderBox::calcAbsoluteHorizontalValues):
        (WebCore::RenderBox::calcAbsoluteVertical):
        (WebCore::RenderBox::calcAbsoluteVerticalValues):
        (WebCore::RenderBox::calcAbsoluteHorizontalReplaced):
        (WebCore::RenderBox::calcAbsoluteVerticalReplaced):
        (WebCore::RenderBox::positionForCoordinates):
        * rendering/RenderBox.h:
        (WebCore::RenderBox::borderBoundingBox):
        (WebCore::RenderBox::offsetHeight):
        (WebCore::RenderBox::marginTop):
        (WebCore::RenderBox::marginBottom):
        (WebCore::RenderBox::marginLeft):
        (WebCore::RenderBox::marginRight):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::offsetLeft):
        (WebCore::RenderBoxModelObject::offsetTop):
        (WebCore::RenderBoxModelObject::paddingTop):
        (WebCore::RenderBoxModelObject::paddingBottom):
        (WebCore::RenderBoxModelObject::paddingLeft):
        (WebCore::RenderBoxModelObject::paddingRight):
        (WebCore::RenderBoxModelObject::paintFillLayerExtended):
        (WebCore::RenderBoxModelObject::calculateBackgroundSize):
        (WebCore::RenderBoxModelObject::calculateBackgroundImageGeometry):
        * rendering/RenderBoxModelObject.h:
        (WebCore::RenderBoxModelObject::borderTop):
        (WebCore::RenderBoxModelObject::borderBottom):
        (WebCore::RenderBoxModelObject::borderLeft):
        (WebCore::RenderBoxModelObject::borderRight):
        (WebCore::RenderBoxModelObject::hasHorizontalBordersPaddingOrMargin):
        (WebCore::RenderBoxModelObject::hasHorizontalBordersOrPadding):
        (WebCore::RenderBoxModelObject::childBecameNonInline):
        (WebCore::RenderBoxModelObject::isBoxModelObject):
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::RenderInline):
        (WebCore::RenderInline::destroy):
        (WebCore::RenderInline::styleDidChange):
        (WebCore::nextContinuation):
        (WebCore::RenderInline::continuationBefore):
        (WebCore::RenderInline::addChildIgnoringContinuation):
        (WebCore::RenderInline::splitInlines):
        (WebCore::RenderInline::splitFlow):
        (WebCore::RenderInline::addChildToContinuation):
        (WebCore::RenderInline::absoluteRects):
        (WebCore::RenderInline::offsetLeft):
        (WebCore::RenderInline::offsetTop):
        (WebCore::RenderInline::marginLeft):
        (WebCore::RenderInline::marginRight):
        (WebCore::RenderInline::positionForCoordinates):
        (WebCore::RenderInline::clippedOverflowRectForRepaint):
        (WebCore::RenderInline::rectWithOutlineForRepaint):
        (WebCore::RenderInline::computeRectForRepaint):
        (WebCore::RenderInline::updateDragState):
        (WebCore::RenderInline::childBecameNonInline):
        (WebCore::RenderInline::updateHitTestResult):
        (WebCore::RenderInline::imageChanged):
        (WebCore::RenderInline::addFocusRingRects):
        * rendering/RenderInline.h:
        (WebCore::RenderInline::marginTop):
        (WebCore::RenderInline::marginBottom):
        (WebCore::RenderInline::continuation):
        (WebCore::RenderInline::setContinuation):
        * rendering/RenderLineBoxList.cpp:
        (WebCore::RenderLineBoxList::paint):
        (WebCore::RenderLineBoxList::hitTest):
        * rendering/RenderLineBoxList.h:
        * rendering/RenderObject.cpp:
        (WebCore::addLayers):
        (WebCore::RenderObject::removeLayers):
        (WebCore::RenderObject::moveLayers):
        (WebCore::RenderObject::findNextLayer):
        (WebCore::RenderObject::enclosingLayer):
        (WebCore::RenderObject::enclosingCompositingLayer):
        (WebCore::RenderObject::setLayerNeedsFullRepaint):
        (WebCore::RenderObject::handleDynamicFloatPositionChange):
        (WebCore::RenderObject::destroy):
        (WebCore::RenderObject::offsetParent):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::isInlineContinuation):
        * rendering/RenderSVGTSpan.cpp:
        (WebCore::RenderSVGTSpan::absoluteRects):
        (WebCore::RenderSVGTSpan::absoluteQuads):
        * rendering/RenderSVGTextPath.cpp:
        (WebCore::RenderSVGTextPath::absoluteRects):
        (WebCore::RenderSVGTextPath::absoluteQuads):
        * rendering/RenderTreeAsText.cpp:
        (WebCore::operator<<):
        * rendering/RenderView.cpp:
        (WebCore::RenderView::setBestTruncatedAt):
        * rendering/RenderView.h:
        * rendering/bidi.cpp:
        (WebCore::getBorderPaddingMargin):
        (WebCore::inlineWidth):
        (WebCore::RenderBlock::layoutInlineChildren):
        (WebCore::inlineFlowRequiresLineBox):
        (WebCore::requiresLineBox):
        (WebCore::RenderBlock::findNextLineBreak):
        * wml/WMLAElement.cpp:
        (WebCore::WMLAElement::isKeyboardFocusable):

2009-02-07  Yael Aharon <yael.aharon@nokia.com>

        Reviewed by Timothy Hatcher <timothy@hatcher.name>

        Partial fix for <https://bugs.webkit.org/show_bug.cgi?id=21051>
        Include localStorage and sessionStorage in DatabasesPanel.

        * WebCore.vcproj/WebCore.vcproj:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorDOMStorageResource::create):
        (WebCore::InspectorDOMStorageResource::setScriptObject):
        (WebCore::InspectorDOMStorageResource::InspectorDOMStorageResource):
        (WebCore::InspectorController::populateScriptObjects):
        (WebCore::InspectorController::addDOMStorageScriptResource):
        (WebCore::InspectorController::removeDOMStorageScriptResource):
        (WebCore::InspectorController::resetScriptObjects):
        (WebCore::InspectorController::didCommitLoad):
        (WebCore::InspectorController::didUseDOMStorage):
        * inspector/InspectorController.h:
        * inspector/front-end/DOMStorage.js: Added.
        (WebInspector.DOMStorage):
        (WebInspector.DOMStorage.prototype.get domStorage):
        (WebInspector.DOMStorage.prototype.set domStorage):
        (WebInspector.DOMStorage.prototype.get domain):
        (WebInspector.DOMStorage.prototype.set domain):
        (WebInspector.DOMStorage.prototype.get isLocalStorage):
        (WebInspector.DOMStorage.prototype.set isLocalStorage):
        * inspector/front-end/DOMStorageItemsView.js: Added.
        (WebInspector.DOMStorageItemsView):
        (WebInspector.DOMStorageItemsView.prototype.show):
        (WebInspector.DOMStorageItemsView.prototype.update):
        * inspector/front-end/DatabaseQueryView.js:
        (WebInspector.DatabaseQueryView):
        * inspector/front-end/DatabaseTableView.js:
        (WebInspector.DatabaseTableView):
        (WebInspector.DatabaseTableView.prototype._queryFinished):
        (WebInspector.DatabaseTableView.prototype._queryError):
        * inspector/front-end/DatabasesPanel.js:
        (WebInspector.DatabasesPanel):
        (WebInspector.DatabasesPanel.prototype.reset):
        (WebInspector.DatabasesPanel.prototype.addDatabase):
        (WebInspector.DatabasesPanel.prototype.addDOMStorage):
        (WebInspector.DatabasesPanel.prototype.showDatabase):
        (WebInspector.DatabasesPanel.prototype.showDOMStorage):
        (WebInspector.DatabasesPanel.prototype.closeVisibleView):
        (WebInspector.DatabasesPanel.prototype.updateDatabaseTables):
        (WebInspector.DatabasesPanel.prototype.dataGridForDOMStorage):
        (WebInspector.DatabasesPanel.prototype._updateSidebarWidth):
        (WebInspector.DOMStorageSidebarTreeElement):
        (WebInspector.DOMStorageSidebarTreeElement.prototype.onselect):
        (WebInspector.DOMStorageSidebarTreeElement.prototype.get mainTitle):
        (WebInspector.DOMStorageSidebarTreeElement.prototype.set mainTitle):
        (WebInspector.DOMStorageSidebarTreeElement.prototype.get subtitle):
        (WebInspector.DOMStorageSidebarTreeElement.prototype.set subtitle):
        * inspector/front-end/Images/domStorage.png: Added.
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.css:
        * inspector/front-end/inspector.html:
        * inspector/front-end/inspector.js:
        (WebInspector.addDOMStorage):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::sessionStorage):
        (WebCore::DOMWindow::localStorage):

2009-02-07  Feng Qian <feng@chromium.org>

        Reviewed by Eric Seidel <eric@webkit.org>

        Put #if ENABLE(PAN_SCROLLING) around EventHandler::setPanScrollCursor.
        https://bugs.webkit.org/show_bug.cgi?id=23574

        * page/EventHandler.cpp:
        * page/EventHandler.h:

2009-02-07  Zalan Bujtas  <zbujtas@gmail.com>

        Reviewed by Rob Buis <rwlbuis@gmail.com>

        https://bugs.webkit.org/show_bug.cgi?id=23788
        call style()->isOriginalDisplayInlineType() on RenderBox instead of RenderObject.

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

2009-02-07  Rob Buis  <rwlbuis@gmail.com>

        Reviewed by Darin.

        https://bugs.webkit.org/show_bug.cgi?id=3248
        Bug 3248: Mouse events on OPTION element seem to be ignored

        Support mouse events on options in a select when it forms a list box.

        Test: fast/forms/option-mouseevents.html

        * html/HTMLSelectElement.cpp: Convert to coords relative to the list box.
        (WebCore::HTMLSelectElement::listBoxDefaultEventHandler):
        * rendering/RenderListBox.cpp: Handle hit testing for option elements.
        (WebCore::RenderListBox::nodeAtPoint):
        * rendering/RenderListBox.h:

2009-02-07  Adam Treat  <adam.treat@torchmobile.com>

        Prospective build fix for all non-Apple platforms.

        * platform/graphics/transforms/TransformationMatrix.h:

2009-02-06  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Simon Fraser.

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

        I have not only made TransformationMatrix platform independent
        but I've also added 3D methods, which will be used when I update
        WebKitCSSMatrix to include 3D (see https://bugs.webkit.org/show_bug.cgi?id=23689).
        I am now keeping a full 4x4 matrix in TransformationMatrix. I'm also doing all
        the math as doubles rather than floats. This makes a TransformationMatrix
        go from 24 bytes to 128 bytes, but I don't think this class is used enough to
        make this overhead will be significant.

        The change from floats to doubles has caused some differences in rounding and
        display (sometimes things that displayed as -0.0 now display as 0.0 or vice versa),
        so I've had to change some LayoutTest results in the SVG tests.

        * platform/graphics/FloatPoint.cpp:
        (WebCore::FloatPoint::matrixTransform):
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::getCTM):
        * platform/graphics/cg/TransformationMatrixCG.cpp:
        (WebCore::TransformationMatrix::operator CGAffineTransform):
        * platform/graphics/transforms/TransformationMatrix.cpp:
        (WebCore::determinant2x2):
        (WebCore::determinant3x3):
        (WebCore::determinant4x4):
        (WebCore::adjoint):
        (WebCore::inverse):
        (WebCore::transposeMatrix4):
        (WebCore::v4MulPointByMatrix):
        (WebCore::v3Length):
        (WebCore::v3Scale):
        (WebCore::v3Dot):
        (WebCore::v3Combine):
        (WebCore::v3Cross):
        (WebCore::decompose):
        (WebCore::slerp):
        (WebCore::TransformationMatrix::scale):
        (WebCore::TransformationMatrix::rotateFromVector):
        (WebCore::TransformationMatrix::flipX):
        (WebCore::TransformationMatrix::flipY):
        (WebCore::makeMapBetweenRects):
        (WebCore::TransformationMatrix::projectPoint):
        (WebCore::TransformationMatrix::mapPoint):
        (WebCore::TransformationMatrix::mapRect):
        (WebCore::TransformationMatrix::mapQuad):
        (WebCore::TransformationMatrix::scale3d):
        (WebCore::TransformationMatrix::rotate3d):
        (WebCore::TransformationMatrix::translate):
        (WebCore::TransformationMatrix::translate3d):
        (WebCore::TransformationMatrix::skew):
        (WebCore::TransformationMatrix::applyPerspective):
        (WebCore::TransformationMatrix::multLeft):
        (WebCore::TransformationMatrix::multVecMatrix):
        (WebCore::TransformationMatrix::isInvertible):
        (WebCore::TransformationMatrix::inverse):
        (WebCore::blendFloat):
        (WebCore::TransformationMatrix::blend):
        (WebCore::TransformationMatrix::decompose):
        (WebCore::TransformationMatrix::recompose):
        * platform/graphics/transforms/TransformationMatrix.h:
        (WebCore::TransformationMatrix::TransformationMatrix):
        (WebCore::TransformationMatrix::setMatrix):
        (WebCore::TransformationMatrix::operator =):
        (WebCore::TransformationMatrix::makeIdentity):
        (WebCore::TransformationMatrix::isIdentity):
        (WebCore::TransformationMatrix::map):
        (WebCore::TransformationMatrix::m11):
        (WebCore::TransformationMatrix::setM11):
        (WebCore::TransformationMatrix::m12):
        (WebCore::TransformationMatrix::setM12):
        (WebCore::TransformationMatrix::m13):
        (WebCore::TransformationMatrix::setM13):
        (WebCore::TransformationMatrix::m14):
        (WebCore::TransformationMatrix::setM14):
        (WebCore::TransformationMatrix::m21):
        (WebCore::TransformationMatrix::setM21):
        (WebCore::TransformationMatrix::m22):
        (WebCore::TransformationMatrix::setM22):
        (WebCore::TransformationMatrix::m23):
        (WebCore::TransformationMatrix::setM23):
        (WebCore::TransformationMatrix::m24):
        (WebCore::TransformationMatrix::setM24):
        (WebCore::TransformationMatrix::m31):
        (WebCore::TransformationMatrix::setM31):
        (WebCore::TransformationMatrix::m32):
        (WebCore::TransformationMatrix::setM32):
        (WebCore::TransformationMatrix::m33):
        (WebCore::TransformationMatrix::setM33):
        (WebCore::TransformationMatrix::m34):
        (WebCore::TransformationMatrix::setM34):
        (WebCore::TransformationMatrix::m41):
        (WebCore::TransformationMatrix::setM41):
        (WebCore::TransformationMatrix::m42):
        (WebCore::TransformationMatrix::setM42):
        (WebCore::TransformationMatrix::m43):
        (WebCore::TransformationMatrix::setM43):
        (WebCore::TransformationMatrix::m44):
        (WebCore::TransformationMatrix::setM44):
        (WebCore::TransformationMatrix::a):
        (WebCore::TransformationMatrix::setA):
        (WebCore::TransformationMatrix::b):
        (WebCore::TransformationMatrix::setB):
        (WebCore::TransformationMatrix::c):
        (WebCore::TransformationMatrix::setC):
        (WebCore::TransformationMatrix::d):
        (WebCore::TransformationMatrix::setD):
        (WebCore::TransformationMatrix::e):
        (WebCore::TransformationMatrix::setE):
        (WebCore::TransformationMatrix::f):
        (WebCore::TransformationMatrix::setF):
        (WebCore::TransformationMatrix::multiply):
        (WebCore::TransformationMatrix::rotate):
        (WebCore::TransformationMatrix::skewX):
        (WebCore::TransformationMatrix::skewY):
        (WebCore::TransformationMatrix::hasPerspective):
        (WebCore::TransformationMatrix::):
        (WebCore::TransformationMatrix::isAffine):
        (WebCore::TransformationMatrix::operator==):
        (WebCore::TransformationMatrix::operator*=):
        (WebCore::TransformationMatrix::operator*):
        * rendering/RenderForeignObject.cpp:
        (WebCore::RenderForeignObject::nodeAtPoint):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateTransform):
        * rendering/RenderPath.cpp:
        (WebCore::RenderPath::mapAbsolutePointToLocal):
        * rendering/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::nodeAtPoint):
        * rendering/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::nodeAtPoint):
        * rendering/RenderSVGText.cpp:
        (WebCore::RenderSVGText::nodeAtPoint):
        * rendering/RenderSVGViewportContainer.cpp:
        (WebCore::RenderSVGViewportContainer::nodeAtPoint):
        * svg/SVGAnimateMotionElement.cpp:
        (WebCore::SVGAnimateMotionElement::resetToBaseValue):
        (WebCore::SVGAnimateMotionElement::calculateAnimatedValue):
        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::viewport):
        * svg/SVGTransform.cpp:
        (SVGTransform::setTranslate):
        (SVGTransform::setScale):
        (SVGTransform::setRotate):
        (SVGTransform::setSkewX):
        (SVGTransform::setSkewY):
        * svg/graphics/SVGResourceMarker.cpp:
        (WebCore::SVGResourceMarker::draw):

2009-02-07  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Tor Arne Vestbø.

        For the Qt port implement Image::drawPattern via
        BitmapImage::drawPatterns' implementation and implement
        Gradient::fill.

        This partially fixes rendering of generated gradient content.

        * platform/graphics/BitmapImage.h: Remove the drawPattern
        implementation for the Qt port in BitmapImage, it's been moved to
        Image::drawPattern.
        * platform/graphics/qt/GradientQt.cpp:
        (WebCore::Gradient::fill): Implement using a simple fillRect.
        * platform/graphics/qt/ImageQt.cpp:
        (WebCore::Image::drawPattern): Moved implementation from
        BitmapImage::drawPattern.

2009-02-06  Eric Seidel  <eric@webkit.org>

        Reviewed by Justin Garcia.

        DOMSelection.getRangeAt() returns a different range than the selection
        https://bugs.webkit.org/show_bug.cgi?id=23601

        Rename toRange to toNormalizedRange and add new firstRange which returns an unmodified range

        Test: fast/dom/Selection/getRangeAt.html

        * WebCore.base.exp:
        * dom/InputElement.cpp:
        (WebCore::InputElement::handleBeforeTextInsertedEvent):
        * editing/DeleteButtonController.cpp:
        (WebCore::enclosingDeletableElement):
        * editing/Editor.cpp:
        (WebCore::Editor::selectedRange):
        (WebCore::Editor::fontForSelection):
        (WebCore::Editor::applyStyleToSelection):
        (WebCore::Editor::applyParagraphStyleToSelection):
        (WebCore::Editor::insertTextWithoutSendingTextEvent):
        (WebCore::Editor::insertLineBreak):
        (WebCore::Editor::insertParagraphSeparator):
        (WebCore::Editor::ignoreSpelling):
        (WebCore::Editor::isSelectionUngrammatical):
        (WebCore::Editor::guessesForUngrammaticalSelection):
        (WebCore::markMisspellingsOrBadGrammar):
        (WebCore::Editor::rangeForPoint):
        * editing/EditorCommand.cpp:
        (WebCore::expandSelectionToGranularity):
        (WebCore::executeDeleteToMark):
        (WebCore::executeSelectToMark):
        * editing/RemoveFormatCommand.cpp:
        (WebCore::RemoveFormatCommand::doApply):
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplacementFragment::ReplacementFragment):
        * editing/Selection.cpp:
        (WebCore::Selection::firstRange):
        (WebCore::Selection::toNormalizedRange):
        * editing/Selection.h:
        * editing/SelectionController.h:
        (WebCore::SelectionController::toNormalizedRange):
        * editing/TypingCommand.cpp:
        (WebCore::TypingCommand::deleteKeyPressed):
        (WebCore::TypingCommand::forwardDeleteKeyPressed):
        * editing/markup.cpp:
        (WebCore::createMarkup):
        * loader/archive/cf/LegacyWebArchive.cpp:
        (WebCore::LegacyWebArchive::createFromSelection):
        * page/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::ariaSelectedTextDOMRange):
        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::contextMenuItemSelected):
        * page/DOMSelection.cpp:
        (WebCore::DOMSelection::getRangeAt):
        (WebCore::DOMSelection::addRange):
        (WebCore::DOMSelection::deleteFromDocument):
        (WebCore::DOMSelection::containsNode):
        (WebCore::DOMSelection::toString):
        * page/DragController.cpp:
        (WebCore::setSelectionToDragCaret):
        (WebCore::DragController::concludeEditDrag):
        (WebCore::DragController::startDrag):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::dispatchMouseEvent):
        * page/Frame.cpp:
        (WebCore::Frame::selectedText):
        (WebCore::Frame::shouldChangeSelection):
        (WebCore::Frame::shouldDeleteSelection):
        (WebCore::Frame::selectionComputedStyle):
        (WebCore::Frame::selectionTextRects):
        (WebCore::Frame::findString):
        (WebCore::Frame::respondToChangedSelection):
        * platform/ContextMenu.cpp:
        (WebCore::selectionContainsPossibleWord):

2009-02-06  Brady Eidson  <beidson@apple.com>

        Reviewed by Dan Bernstein

        <rdar://problem/6563402> - Workaround a case where ::didReceiveData() might be called on a ResourceHandleClient
        before ::didReceiveResponse().

        No layout test, as we don't have a concrete way to reproduce these conditions.  To that effect, I've added an ASSERT
        to catch the conditions before the workaround takes effect in case any WebKit Debug-build developer runs across
        this case and can come up with something more reproducible.

        * loader/MainResourceLoader.cpp:
        (WebCore::MainResourceLoader::didReceiveData): If the response is null create a dummy response.  This is much
          like the FrameLoader::init() response that is used for initial document creation.

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

        Build fix.

        * WebCore.base.exp:

2009-02-06  Xan Lopez  <xan@gnome.org>

        Reviewed by Holger Freyther.

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

        Do not use m_scrollOffset to check if we are setting the same
        value than we already have.

        m_scrollOffset starts at 0 for ScrollView, so when opening a new
        page and scrolling to 0 (the usual case) the check will fail and
        we won't update the adjustment value, resulting in a possibly
        mispositioned scrollbar. Use the adjustment value directly
        instead, which is what we are updating anyway.

        * platform/gtk/ScrollViewGtk.cpp:
        (WebCore::ScrollView::platformHandleHorizontalAdjustment):
        (WebCore::ScrollView::platformHandleVerticalAdjustment):

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

        Reviewed by Oliver Hunt.

        https://bugs.webkit.org/show_bug.cgi?id=23800
        Header elements are not always preserved during paste

        At paste time, don't merge out of header elements.  At copy time, be sure to include
        headers in the list of special common ancestor blocks, so that copying a paragraph or less
        of content inside a header will include the header element in the copied markup.

        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::areSameHeaderElements):
        (WebCore::ReplaceSelectionCommand::shouldMerge):
        * editing/markup.cpp:
        (WebCore::isSpecialAncestorBlock):
        (WebCore::createMarkup):

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

        Reviewed by Sam Weinig.

        Part III of <rdar://problem/6552272>.

        Make redirect data available to WebKit. (I tried having WebKit track this
        data for itself, but that went wrong -- it's just too hard to figure
        out the weird corners of the WebCore loader from within another framework.)

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::DocumentLoader):
        * loader/DocumentLoader.h: Store a flag indicating whether we created
        a global history entry. If we didn't, then we know that the next redirect
        should not link to us, since we're not in history.

        (WebCore::DocumentLoader::clientRedirectSourceForHistory):
        (WebCore::DocumentLoader::clientRedirectDestinationForHistory):
        (WebCore::DocumentLoader::setClientRedirectSourceForHistory):
        (WebCore::DocumentLoader::serverRedirectSourceForHistory):
        (WebCore::DocumentLoader::serverRedirectDestinationForHistory):
        (WebCore::DocumentLoader::didCreateGlobalHistoryEntry):
        (WebCore::DocumentLoader::setDidCreateGlobalHistoryEntry): Added accessors
        to help WebKit wade through the muck of WebCore history.

        * loader/EmptyClients.h:
        (WebCore::EmptyFrameLoaderClient::updateGlobalHistoryRedirectLinks): Renamed
        this client function to say what it does, instead of when it's called.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::load):
        (WebCore::FrameLoader::loadWithNavigationAction): In the case of a redirect,
        store a link to the previous history URL in the new DocumentLoader, so
        it can update WebKit with that link when the load commits.

        (WebCore::FrameLoader::updateHistory*): Use our new flags and names,
        described above.

        * loader/FrameLoader.h:
        (WebCore::FrameLoader::documentLoader):
        (WebCore::FrameLoader::policyDocumentLoader):
        (WebCore::FrameLoader::provisionalDocumentLoader):
        (WebCore::FrameLoader::state): Inlined a few trivial functions because
        performance mistakes give me the itches.

        * loader/FrameLoaderClient.h: Renamed this client function to say what
        it does, instead of when it's called.

2009-02-06  Eric Seidel  <eric@webkit.org>

        Reviewed by Justin Garcia.

        Minor refactoring and cleanup to Selection code
        https://bugs.webkit.org/show_bug.cgi?id=23774

        No functional changes, thus no tests.

        * editing/Editor.cpp:
        (WebCore::Editor::applyStyle):
        (WebCore::Editor::applyParagraphStyle):
        * editing/Selection.cpp:
        (WebCore::Selection::Selection):
        (WebCore::Selection::setBaseAndExtentToDeepEquivalents):
        (WebCore::Selection::setStartAndEndFromBaseAndExtentRespectingGranularity):
        (WebCore::Selection::updateSelectionType):
        (WebCore::Selection::validate):
        (WebCore::Selection::setWithoutValidation):
        (WebCore::Selection::adjustSelectionToAvoidCrossingEditingBoundaries):
        * editing/Selection.h:
        (WebCore::Selection::):
        (WebCore::Selection::selectionType):
        (WebCore::Selection::extent):
        (WebCore::Selection::isNone):
        (WebCore::Selection::isCaret):
        (WebCore::Selection::isRange):
        (WebCore::Selection::isCaretOrRange):
        * editing/SelectionController.h:
        (WebCore::SelectionController::selectionType):
        * editing/TypingCommand.cpp:
        (WebCore::TypingCommand::deleteKeyPressed):
        (WebCore::TypingCommand::forwardDeleteKeyPressed):
        * page/Frame.cpp:
        (WebCore::Frame::revealSelection):

2009-02-06  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=23801
        Add custom V8 bindings for SVG.

        * bindings/v8/custom/V8SVGElementInstanceCustom.cpp: Added.
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8SVGLengthCustom.cpp: Added.
        (WebCore::ACCESSOR_GETTER):
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8SVGMatrixCustom.cpp: Added.
        (WebCore::CALLBACK_FUNC_DECL):

2009-02-06  David Levin  <levin@chromium.org>

        Reviewed by Eric Seidel.

        Bug 23792: unused param is used in RenderLayer.cpp but not #include'd
        <https://bugs.webkit.org/show_bug.cgi?id=23792>

        Add include file for UnusedParam which is used in this file.

        * rendering/RenderLayer.cpp:

2009-02-06  David Levin  <levin@chromium.org>

        Reviewed by Eric Seidel.

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

        Bug 23798: KURLGoogle needs support for protocolInHTTPFamily
        <https://bugs.webkit.org/show_bug.cgi?id=23798>

        Add protocolInHTTPFamily() to the KURLGoogle implementation.
        This is another chromium build fix to mirror r40553.

        While in this file, I did some style fixes and consistency fixes:
        + fixed many_occurences_of_underscoring_naming
        + usages of NULL
        + comparisons to 0
        + changed the copyright remove an extraneous , and capitalize the (C)
          which was suggested for other files that I've submitted.

        No observable change in behavior, so no test.

        * platform/KURL.h:
        (WebCore::KURL::protocolInHTTPFamily):
        * platform/KURLGoogle.cpp:
        (WebCore::KURLCharsetConverter::ConvertFromUTF16):
        (WebCore::lowerCaseEqualsASCII):
        (WebCore::KURLGooglePrivate::KURLGooglePrivate):
        (WebCore::KURLGooglePrivate::setUtf8):
        (WebCore::KURLGooglePrivate::setAscii):
        (WebCore::KURLGooglePrivate::init):
        (WebCore::KURLGooglePrivate::initProtocolInHTTPFamily):
        (WebCore::KURLGooglePrivate::copyTo):
        (WebCore::KURLGooglePrivate::replaceComponents):
        (WebCore::KURL::KURL):
        (WebCore::KURL::createCFURL):
        (WebCore::KURL::isEmpty):
        (WebCore::KURL::protocolInHTTPFamily):
        (WebCore::KURL::query):
        (WebCore::decodeURLEscapeSequences):
        (WebCore::KURL::protocolIs):
        (WebCore::encodeWithURLEscapeSequences):
        (WebCore::KURL::invalidate):
        (WebCore::equalIgnoringRef):
        * platform/KURLGooglePrivate.h:

2009-02-06  David Kilzer  <ddkilzer@apple.com>

        Bug 23741: StyleRareNonInheritedData::operator==() should not compare ContentData objects by pointer

        Reviewed by Darin Adler.

        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::contentDataEquivalent): Moved method to
        WebCore::StyleRareNonInheritedData class.
        * rendering/style/RenderStyle.h:
        (WebCore::InheritedFlags::contentDataEquivalent): Replaced declaration
        with inline method that calls contentDataEquivalent() on
        WebCore::StyleRareNonInheritedData instead.
        * rendering/style/StyleRareNonInheritedData.cpp:
        (WebCore::StyleRareNonInheritedData::operator==): This is the bug fix!
        Replaced pointer comparison of ContentData objects with call to
        StyleRareNonInheritedData::contentDataEquivalent().
        (WebCore::StyleRareNonInheritedData::contentDataEquivalent): Added.
        * rendering/style/StyleRareNonInheritedData.h:
        (WebCore::StyleRareNonInheritedData::contentDataEquivalent): Added
        declaration.

2009-02-06  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Eric Seidel

        Factor code that checks whether the object is rooted in
        repaint() and repaintRectangle() into a common isRooted()
        method.

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::repaint):
        (WebCore::RenderObject::repaintRectangle):
        (WebCore::RenderObject::isRooted):
        * rendering/RenderObject.h:

2009-02-06  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Eric Seidel

        Expose an isRootLayer() method on RenderLayer that works whether the
        layer is rooted or not, and use that in a few places in the
        accelerated compositing code.

        * rendering/RenderLayer.h:
        (WebCore::RenderLayer::isRootLayer):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::paintingGoesToWindow):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::rebuildCompositingLayerTree):
        (WebCore::RenderLayerCompositor::requiresCompositingLayer):

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

        Reviewed by Darin Adler.

        - fix <rdar://problem/6552338> FontCache::releaseFontData() called on a small caps font that is not in the cache

        Most platforms do not retrieve the small caps font from the FontCache,
        but cross-platform code in ~SimpleFontData() assumes the the small caps
        font data did come from the cache and therefore calls releaseFontData()
        on it.

        * platform/graphics/SimpleFontData.cpp:
        (WebCore::SimpleFontData::~SimpleFontData): Reordered to call
        platformDestroy() before releasing the small caps font and pruning the
        glyph page tree. This allows platformDestroy() to reset
        m_smallCapsFontData to 0 if it was not obtained from the cache.
        * platform/graphics/chromium/SimpleFontDataLinux.cpp:
        (WebCore::SimpleFontData::platformDestroy): Set m_smallCapsFontData to
        0 after deleting it.
        * platform/graphics/gtk/SimpleFontDataGtk.cpp:
        (WebCore::SimpleFontData::platformDestroy): Ditto.
        * platform/graphics/gtk/SimpleFontDataPango.cpp:
        (WebCore::SimpleFontData::platformDestroy): Ditto.
        * platform/graphics/win/SimpleFontDataWin.cpp:
        (WebCore::SimpleFontData::platformCommonDestroy): Ditto.
        * platform/graphics/wx/SimpleFontDataWx.cpp:
        (WebCore::SimpleFontData::platformDestroy): Ditto.

2009-02-06  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Eric Seidel

        Make RenderStyle::transitionForProperty() const.

        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::transitionForProperty):
        * rendering/style/RenderStyle.h:

2009-02-06  Simon Fraser  <simon.fraser@apple.com>

        Fix build when ACCELERATED_COMPOSITING is turned on.

        Remove font smoothing changes that will be committed
        separately.

        * platform/graphics/mac/WebLayer.mm:
        (WebCore::if):

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

        Build fix.

        * bridge/npapi.h:

2009-02-06  Darin Fisher  <darin@chromium.org>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=23790
        Custom -> JSCCustom in SVGPointList.idl

        * svg/SVGPointList.idl:

2009-02-06  Anantanarayanan Iyengar  <ananta@chromium.org>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=23309
        Fix whitespace indent errors. The rest of the original patch has already
        landed.

        * platform/graphics/cairo/ImageSourceCairo.cpp:
        (WebCore::ImageSource::clear):
        * platform/graphics/cg/ImageSourceCG.cpp:
        (WebCore::ImageSource::clear):
        * platform/graphics/qt/ImageSourceQt.cpp:
        (WebCore::ImageSource::clear):
        * platform/graphics/wx/ImageSourceWx.cpp:
        (WebCore::ImageSource::clear):

2009-02-06  Dirk Schulze  <krit@webkit.org>

        Reviewed by Simon Hausmann.

        Fix bug in clearRect(). Use fillRect() instead of eraseRect() to get
        the context transparent.

        [QT] clearRect fill's a given rect with white
        https://bugs.webkit.org/show_bug.cgi?id=23728

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

2009-02-06  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dave Hyatt

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

        When the document is attached and detached, and when it becomes active/inactive
        (e.g. coming out or going into the page cache) we need to call
        RenderView::didMoveOnscreen()/willMoveOffscreen() to hook and unhook the composited
        layers.

        Also, if Document::recalcStyle() does not do a layout, it needs to
        update the compositing layers.

        * dom/Document.cpp:
        (WebCore::Document::updateRendering):
        (WebCore::Document::updateLayout):
        (WebCore::Document::attach):
        (WebCore::Document::detach):
        (WebCore::Document::documentWillBecomeInactive):
        (WebCore::Document::documentDidBecomeActive):

2009-02-06  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Tor Arne Vestbø.

        Added support for different ownership models for wrapped QObjects in
        the JavaScript environment.

        * bindings/js/ScriptControllerQt.cpp:
        (WebCore::ScriptController::createScriptInstanceForWidget): Specify
        QtOwnership for scriptable widgets.
        * bridge/npruntime_internal.h: Add "NormalState" to the list of
        undef'ed macros as an included Qt header uses "NormalState" as value
        in an enum.
        * bridge/qt/qt_instance.cpp:
        (JSC::Bindings::QtInstance::QtInstance): Save and initialize ownership
        member.
        (JSC::Bindings::QtInstance::~QtInstance): Respect
        QScriptEngine::ValueOwnership policy with regards to wrapped m_object.
        (JSC::Bindings::QtInstance::getQtInstance): Pass the ownership down to
        the instance.
        * bridge/qt/qt_instance.h:
        (JSC::Bindings::QtInstance::create): Ditto.
        * bridge/qt/qt_runtime.cpp:
        (JSC::Bindings::convertQVariantToValue): Use QtOwnership for
        automatically wrapped QObjects.
        (JSC::Bindings::QtConnectionObject::execute): Ditto.

2009-02-05  Maciej Stachowiak  <mjs@apple.com> and Brady Eidson  <beidson@apple.com>

        Reviewed by Dan Bernstein and Geoff Garen.

        - WebCore code to track per-day and per-week visit counts in history

        The basic idea is as follows: we track daily visits for up to 13
        days, and weekly visits for up to 5 weeks past the end of the
        current daily visits. As soon as the number of daily counts goes
        over 13, we squish them down into weeks, and then prune the excess weeks.

        * history/HistoryItem.cpp:
        (WebCore::HistoryItem::HistoryItem): Remove bogus whitespace.
        (WebCore::timeToDay): Helper function: convert time to days from the epoch.
        (WebCore::HistoryItem::padDailyCountsForNewVisit): Insert 0 counts if
        a site is visited after a span of days.
        (WebCore::HistoryItem::collapseDailyVisitsToWeekly): Core day/week upgrade
        algorithm as described above.
        (WebCore::HistoryItem::recordVisitAtTime): Use above helpers to record all
        info about a visit to this history item.
        (WebCore::HistoryItem::setLastVisitedTime): Updated.
        (WebCore::HistoryItem::visited): Updated.
        (WebCore::HistoryItem::recordInitialVisit): New function to
        handle recording data about the very first visit, replacing the
        prior practice of explicitly setting visit count to 1.
        (WebCore::HistoryItem::adoptVisitCounts): Take ownership of
        daily and weekly visit count vectors.
        (WebCore::HistoryItem::mergeAutoCompleteHints): Added a comment
        noting that this function doesn't work properly now (though
        this shouldn't matter much in practice.)
        * history/HistoryItem.h:
        (WebCore::HistoryItem::dailyVisitCounts): Accessor for daily counts.
        (WebCore::HistoryItem::weeklyVisitCounts): Ditto for weekly counts.
        * WebCore.base.exp: Add new symbols and sort.

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

        Reviewed by Darin Adler.

        <rdar://problem/6438271> Improve backspace handling of accented characters

        Test: platform/mac/editing/deleting/backward-delete.html

        This change makes WebKit behave like AppKit on the Mac. Other platforms are not affected,
        because the current behavior matches their standards (tested on Windows, assumed elsewhere).

        * dom/Position.cpp:
        (WebCore::Position::previous):
        (WebCore::Position::next):
        (WebCore::Position::uncheckedPreviousOffsetForBackwardDeletion):
        * dom/Position.h:
        Added a new option for previous(), used to move to a next position for backward deletion.
        Renamed EUsingComposedCharacters to PositionMoveType.

        * editing/TypingCommand.cpp: (WebCore::TypingCommand::deleteKeyPressed):
        Use previous(BackwardDeletion) to find a proper range to delete. Also, simplified a check
        surrounding this code a little.

        * editing/htmlediting.cpp:
        (WebCore::nextVisuallyDistinctCandidate):
        (WebCore::previousVisuallyDistinctCandidate):
        Adjusted for renamed enum values.

        * rendering/RenderObject.cpp:
        * rendering/RenderObject.h:
        * rendering/RenderText.h:
        Added previousOffsetForBackwardDeletion().

        * rendering/RenderText.cpp: (WebCore::RenderText::previousOffsetForBackwardDeletion):
        On PLATFORM(MAC), use an algorithm that matches the one AppKit has for backward deletion.

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

        Fix a crash in RenderWidget::destroy when navigating away from a page
        with an <iframe>

        This was a regression caused by r40679

        Reviewed by Dave Hyatt.

        Tested by many many tests.

        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::destroy): Only deref the RenderWidget after we
        finish accessing its members.

2009-02-05  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Anders Carlsson

        getAnimatedStyleForRenderer() should not create a new
        CompositeAnimation if the object isn't already animating, and
        it should just fall back to returning renderer->style().

        * page/animation/AnimationController.cpp:
        (WebCore::AnimationControllerPrivate::getAnimatedStyleForRenderer):

2009-02-05  Simon Fraser  <simon.fraser@apple.com>

        Fix build when ACCELERATED_COMPOSITING is turned on.

        Give RenderLayerBacking some love after the great
        RenderBoxModelObject split.

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateLayerTransform):
        (WebCore::RenderLayerBacking::updateGraphicsLayerGeometry):
        (WebCore::RenderLayerBacking::contentsBox):
        (WebCore::RenderLayerBacking::paintIntoLayer):
        (WebCore::RenderLayerBacking::startAnimation):
        (WebCore::RenderLayerBacking::startTransition):
        * rendering/RenderLayerBacking.h:
        (WebCore::RenderLayerBacking::renderer):

2009-02-05  Simon Fraser  <simon.fraser@apple.com>

        Fix build when ACCELERATED_COMPOSITING is turned on.

        writeIndent() needs to be static to avoid warnings on some OSes,
        and remove unused CAToTransform3D() method.

        * platform/graphics/GraphicsLayer.cpp:
        (WebCore::writeIndent):
        * platform/graphics/mac/GraphicsLayerCA.mm:

2009-02-05  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Anders Carlsson

        Add some methods to the TransformOperation classes that are required
        by GraphicsLayer when ACCELERATED_COMPOSITING is turned on.

        * platform/graphics/transforms/MatrixTransformOperation.h:
        (WebCore::MatrixTransformOperation::create):
        (WebCore::MatrixTransformOperation::MatrixTransformOperation):
        * platform/graphics/transforms/ScaleTransformOperation.h:
        (WebCore::ScaleTransformOperation::x):
        (WebCore::ScaleTransformOperation::y):
        * platform/graphics/transforms/TranslateTransformOperation.h:
        (WebCore::TranslateTransformOperation::x):
        (WebCore::TranslateTransformOperation::y):

2009-02-05  Simon Fraser  <simon.fraser@apple.com>

        Minor clenaup: fix brace style in CompositeAnimationPrivate::updateTransitions(),
        and correct a usage of UNUSED_PARAM().

        * page/animation/CompositeAnimation.cpp:
        (WebCore::CompositeAnimationPrivate::updateTransitions):
        * page/animation/ImplicitAnimation.cpp:
        (WebCore::ImplicitAnimation::startAnimation):

2009-02-05  Simon Fraser  <simon.fraser@apple.com>

        Fix build when ACCELERATED_COMPOSITING is turned on.

        animationOfPropertyIsAccelerated() needs to be public because
        it is called from AnimationController.

        * page/animation/AnimationBase.h:

2009-02-05  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Anders Carlsson

        Fix mis-typed enum value which is hidden inside #ifdefs so didn't break
        the build.

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

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

        Reviewed by Geoffrey Garen.

        Fix missing checked toRenderBlock casts.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::clearFloats):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::availableHeightUsing):

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

        Patch from Darin Adler.
        Reviewed by Sam Weinig.

        Fix case where we were casting to RenderView.

        No test case possible.

        * editing/mac/SelectionControllerMac.mm:
        (WebCore::SelectionController::notifyAccessibilityForSelectionChange):

2009-02-05  Aaron Boodman  <aa@chromium.org>

        Reviewed by Dave Hyatt.

        https://bugs.webkit.org/show_bug.cgi?id=23708
        Adds documentElementAvailable() callback to FrameLoaderClient.

        * dom/XMLTokenizerLibxml2.cpp:
        (WebCore::XMLTokenizer::startElementNs):
        Add call to dispatchDocumentElementAvailable()
        * dom/XMLTokenizerQt.cpp:
        (WebCore::XMLTokenizer::parseStartElement):
        Ditto.
        * html/HTMLParser.cpp:
        (WebCore::HTMLParser::insertNode):
        Ditto.
        * loader/EmptyClients.h:
        (WebCore::EmptyFrameLoaderClient::documentElementAvailable):
        Stub out documentElementAvailable().
        * loader/FrameLoader.cpp:
        documentElementAvailable() callback plumbing.
        * loader/FrameLoader.h:
        Ditto.
        * loader/FrameLoaderClient.h:
        Add new documentElementAvailable() callback.

2009-02-05  Scott Violet  <sky@google.com>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=23766
        CanvasRenderingContext2D::setShadow needs else for other platforms.

        Implements the CMYK variant of CanvasRenderingContext2D::setShadow for
        other platforms using the CMYK color constructor.

        * html/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::setShadow):

2009-02-05  Scott Violet  <sky@google.com>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=23687
        Wires up Skia'a ImageBuffer::toDataURL to support pngs.
        This helps Chromium pass a couple of layout tests.

        * platform/graphics/skia/ImageBufferSkia.cpp:
        (WebCore::ImageBuffer::toDataURL):
        * platform/image-encoders: Added.
        * platform/image-encoders/skia: Added.
        * platform/image-encoders/skia/PNGImageEncoder.cpp: Added.
        (WebCore::):
        (WebCore::PngEncoderState::EncoderWriteCallback):
        (WebCore::PngEncoderState::ConvertBGRAtoRGB):
        (WebCore::PngEncoderState::PngWriteStructDestroyer::PngWriteStructDestroyer):
        (WebCore::PngEncoderState::PngWriteStructDestroyer::~PngWriteStructDestroyer):
        (WebCore::PNGImageEncoder::encode):
        * platform/image-encoders/skia/PNGImageEncoder.h: Added.

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

        Reviewed by Darin Adler.

        Fix missing checked cast.

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

2009-02-05  Nikolas Zimmermann  <nikolas.zimmermann@torchmobile.com>

        Not reviewed. Fix WML enabled builds.

        FrameLoader::load() got an additional 'lockHistory' parameter, pass 'false'.

        * wml/WMLGoElement.cpp:
        (WebCore::WMLGoElement::executeTask):

2009-02-05  Scott Violet  <sky@google.com>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=23625
        Additional fix: Skia platform doesn't render text to a canvas or support clipping to an image buffer

        Fixes three bugs in PlatformContextSkia:

        * When a new layer was started clipped to an image we used the
          assignment operator to copy the SkBitmap. If the SkBitmap owns it's
          pixels, this is not the right thing to do. Instead we need to create
          a copy of the image.
        * State holds an SkBitmap by value. State's copy constructor does a
          memcpy. This is confusing and subtle, I've converted to use a member
          initializer list which I think is clearer and less error prone.
        * When creating a new layer there is no need to copy the clip image.

        * platform/graphics/skia/PlatformContextSkia.cpp:
        (PlatformContextSkia::State::State):
        (PlatformContextSkia::save):
        (PlatformContextSkia::beginLayerClippedToImage):

2009-02-05  Scott Violet  <sky@google.com>

        Reviewed by George Staikos.

        https://bugs.webkit.org/show_bug.cgi?id=23462
        Changes call from setFillColor to setStrokeColor.

        * html/CanvasStyle.cpp:
        (WebCore::CanvasStyle::applyStrokeColor):

2009-02-05  David Hyatt  <hyatt@apple.com>

        Fix crash on svg custom stop test.  A virtual function didn't get patched properly.

        Reviewed by Sam Weinig

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::clippedOverflowRectForRepaint):
        * rendering/RenderSVGGradientStop.h:
        (WebCore::RenderSVGGradientStop::clippedOverflowRectForRepaint):

2009-02-05  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dave Hyatt

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

        Add toRenderBoxModelObject() so that we can cast objects that
        can have layers.

        Fix getComputedStyle to return the current value of style
        properties that are undergoing accelerated animations, by
        asking the AnimationController if the property has accelerated
        animations, and, if so, asking it to generate an appropriate
        style.

        Tightened up some type safety (CSSPropertyID), and code clarity
        (replace bool with enum).

        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::hasCompositedLayer):
        (WebCore::computedTransform):
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * page/animation/AnimationController.cpp:
        (WebCore::AnimationControllerPrivate::isAnimatingPropertyOnRenderer):
        (WebCore::AnimationController::isAnimatingPropertyOnRenderer):
        (WebCore::AnimationController::supportsAcceleratedAnimationOfProperty):
        * page/animation/AnimationController.h:
        * page/animation/AnimationControllerPrivate.h:
        * page/animation/ImplicitAnimation.cpp:
        (WebCore::ImplicitAnimation::startAnimation):
        (WebCore::ImplicitAnimation::endAnimation):
        * page/animation/KeyframeAnimation.cpp:
        (WebCore::KeyframeAnimation::startAnimation):
        (WebCore::KeyframeAnimation::endAnimation):
        * rendering/RenderBoxModelObject.h:
        (WebCore::RenderBoxModelObject::isBoxModelObject):
        (WebCore::toRenderBoxModelObject):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateLayerTransform):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::isBoxModelObject):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::applyTransform):
        * rendering/style/RenderStyle.h:
        (WebCore::InheritedFlags::):

2009-02-05  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=23767
        Add custom V8 bindings for HTML5 database.

        * bindings/v8/custom/V8CustomSQLStatementCallback.cpp: Added.
        (WebCore::V8CustomSQLStatementCallback::V8CustomSQLStatementCallback):
        (WebCore::V8CustomSQLStatementCallback::~V8CustomSQLStatementCallback):
        (WebCore::V8CustomSQLStatementCallback::handleEvent):
        * bindings/v8/custom/V8CustomSQLStatementCallback.h: Added.
        (WebCore::V8CustomSQLStatementCallback::create):
        * bindings/v8/custom/V8CustomSQLStatementErrorCallback.cpp: Added.
        (WebCore::V8CustomSQLStatementErrorCallback::V8CustomSQLStatementErrorCallback):
        (WebCore::V8CustomSQLStatementErrorCallback::~V8CustomSQLStatementErrorCallback):
        (WebCore::V8CustomSQLStatementErrorCallback::handleEvent):
        * bindings/v8/custom/V8CustomSQLStatementErrorCallback.h: Added.
        (WebCore::V8CustomSQLStatementErrorCallback::create):
        * bindings/v8/custom/V8CustomSQLTransactionCallback.cpp: Added.
        (WebCore::V8CustomSQLTransactionCallback::V8CustomSQLTransactionCallback):
        (WebCore::V8CustomSQLTransactionCallback::~V8CustomSQLTransactionCallback):
        (WebCore::V8CustomSQLTransactionCallback::handleEvent):
        * bindings/v8/custom/V8CustomSQLTransactionCallback.h: Added.
        (WebCore::V8CustomSQLTransactionCallback::create):
        * bindings/v8/custom/V8CustomSQLTransactionErrorCallback.cpp: Added.
        (WebCore::V8CustomSQLTransactionErrorCallback::V8CustomSQLTransactionErrorCallback):
        (WebCore::V8CustomSQLTransactionErrorCallback::~V8CustomSQLTransactionErrorCallback):
        (WebCore::V8CustomSQLTransactionErrorCallback::handleEvent):
        * bindings/v8/custom/V8CustomSQLTransactionErrorCallback.h: Added.
        (WebCore::V8CustomSQLTransactionErrorCallback::create):
        * bindings/v8/custom/V8CustomVoidCallback.cpp: Added.
        (WebCore::V8CustomVoidCallback::V8CustomVoidCallback):
        (WebCore::V8CustomVoidCallback::~V8CustomVoidCallback):
        (WebCore::V8CustomVoidCallback::handleEvent):
        (WebCore::invokeCallback):
        * bindings/v8/custom/V8CustomVoidCallback.h: Added.
        (WebCore::V8CustomVoidCallback::create):
        * bindings/v8/custom/V8DatabaseCustom.cpp: Added.
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8SQLResultSetRowListCustom.cpp: Added.
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8SQLTransactionCustom.cpp: Added.
        (WebCore::CALLBACK_FUNC_DECL):

2009-02-05  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=23747
        Add Chromium threading-related files.

        * platform/chromium/TemporaryLinkStubs.cpp: Removed theading-related stubs.

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

        Reviewed by Adam Roben.

        Add toRenderButton methods for casting RenderObjects to RenderButtons. The methods will assert if the object
        is not a RenderButton. Also add a toRenderButton method that takes a RenderButton but returns void and that
        is unimplemented. This method will catch anyone trying to do a cast when the object is already a RenderButton.

        * rendering/RenderButton.h:
        (WebCore::RenderButton::isRenderButton):
        (WebCore::toRenderButton):
        * rendering/RenderFileUploadControl.cpp:
        (WebCore::RenderFileUploadControl::paintObject):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::isRenderButton):

2009-02-05  David Hyatt  <hyatt@apple.com>

        Move the m_layer member variable of RenderBox up into RenderBoxModelObject.  Refactor styleDidChange'
        of RenderObject, RenderBoxModelObject and RenderBox to get more of the code in the correct subclass.
        In order to set the various RenderObject bits properly prior to the test for whether a layer is
        required, I added an additional method, updateBoxModelInfoAfterStyleChange, that is responsible
        for setting all of the bits.

        Eliminate hasStaticX/Y, staticX/Y, and setStaticX/Y from the render tree.  Move hasStaticX/Y to
        RenderStyle, and just use the corresponding layer() methods for the
        staticX/Y getters/setters.

        Reviewed by Sam Weinig

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::layoutBlock):
        (WebCore::RenderBlock::adjustPositionedBlock):
        (WebCore::RenderBlock::layoutOnlyPositionedObjects):
        (WebCore::RenderBlock::layoutPositionedObjects):
        (WebCore::RenderBlock::paintObject):
        (WebCore::RenderBlock::nodeAtPoint):
        (WebCore::RenderBlock::offsetForContents):
        (WebCore::RenderBlock::calcPrefWidths):
        (WebCore::RenderBlock::baselinePosition):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::RenderBox):
        (WebCore::RenderBox::destroy):
        (WebCore::RenderBox::styleWillChange):
        (WebCore::RenderBox::styleDidChange):
        (WebCore::RenderBox::updateBoxModelInfoFromStyle):
        (WebCore::RenderBox::scrollWidth):
        (WebCore::RenderBox::scrollHeight):
        (WebCore::RenderBox::scrollLeft):
        (WebCore::RenderBox::scrollTop):
        (WebCore::RenderBox::setScrollLeft):
        (WebCore::RenderBox::setScrollTop):
        (WebCore::RenderBox::getOverflowClipRect):
        (WebCore::RenderBox::localToAbsolute):
        (WebCore::RenderBox::absoluteToLocal):
        (WebCore::RenderBox::localToContainerQuad):
        (WebCore::RenderBox::position):
        (WebCore::RenderBox::computeRectForRepaint):
        (WebCore::RenderBox::calcAbsoluteHorizontal):
        (WebCore::RenderBox::calcAbsoluteVertical):
        (WebCore::RenderBox::calcAbsoluteHorizontalReplaced):
        (WebCore::RenderBox::calcAbsoluteVerticalReplaced):
        * rendering/RenderBox.h:
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::RenderBoxModelObject):
        (WebCore::RenderBoxModelObject::destroy):
        (WebCore::RenderBoxModelObject::styleWillChange):
        (WebCore::RenderBoxModelObject::styleDidChange):
        (WebCore::RenderBoxModelObject::updateBoxModelInfoFromStyle):
        * rendering/RenderBoxModelObject.h:
        (WebCore::RenderBoxModelObject::layer):
        (WebCore::RenderBoxModelObject::requiresLayer):
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::layoutBlock):
        (WebCore::RenderFlexibleBox::layoutHorizontalBox):
        (WebCore::RenderFlexibleBox::layoutVerticalBox):
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::updateBoxModelInfoFromStyle):
        (WebCore::RenderInline::styleDidChange):
        (WebCore::RenderInline::relativePositionedInlineOffset):
        * rendering/RenderInline.h:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::setStaticY):
        (WebCore::RenderLayer::updateLayerPosition):
        * rendering/RenderLayer.h:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::setStyle):
        (WebCore::RenderObject::styleDidChange):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::markContainingBlocksForLayout):
        * rendering/RenderTableRow.cpp:
        (WebCore::RenderTableRow::paint):
        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::destroy):
        * rendering/bidi.cpp:
        (WebCore::appendRunsForObject):
        (WebCore::RenderBlock::layoutInlineChildren):
        (WebCore::RenderBlock::skipTrailingWhitespace):
        (WebCore::RenderBlock::skipLeadingWhitespace):
        (WebCore::RenderBlock::findNextLineBreak):
        * rendering/style/RenderStyle.h:
        (WebCore::InheritedFlags::hasStaticX):
        (WebCore::InheritedFlags::hasStaticY):

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

        Fix the windows build.

        * bindings/scripts/CodeGeneratorCOM.pm:
        * dom/Node.idl:

2009-02-05  Anders Carlsson  <andersca@apple.com>

        Reviewed by Kevin Decker.

        Update to match Gecko.

        * bridge/npapi.h:
        * plugins/npfunctions.h:

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

        Reviewed by Darin Adler.

        Finish merging EventTargetNode up into Node.

        This also fixes a small recently introduced issue where EventListeners
        would not be removed from the document if they were attached to comment
        nodes outside of the documentElement.

        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.scons:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * bindings/js/JSEventTargetNodeCustom.cpp: Removed.
        * bindings/js/JSNodeCustom.cpp:
        (WebCore::JSNode::addEventListener):
        (WebCore::JSNode::removeEventListener):
        (WebCore::JSNode::pushEventHandlerScope):
        * bindings/scripts/CodeGenerator.pm:
        * dom/CharacterData.cpp:
        (WebCore::CharacterData::CharacterData):
        (WebCore::CharacterData::rendererIsNeeded):
        * dom/CharacterData.h:
        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::willRemove):
        (WebCore::ContainerNode::attach):
        (WebCore::ContainerNode::detach):
        (WebCore::ContainerNode::insertedIntoDocument):
        (WebCore::ContainerNode::removedFromDocument):
        (WebCore::ContainerNode::setFocus):
        (WebCore::ContainerNode::setActive):
        (WebCore::ContainerNode::setHovered):
        (WebCore::dispatchChildInsertionEvents):
        (WebCore::dispatchChildRemovalEvents):
        * dom/ContainerNode.h:
        (WebCore::ContainerNode::ContainerNode):
        * dom/Document.cpp:
        (WebCore::Document::removeAllEventListenersFromAllNodes):
        (WebCore::Document::removeAllDisconnectedNodeEventListeners):
        (WebCore::Document::setFocusedNode):
        * dom/EventTargetNode.cpp: Removed.
        * dom/EventTargetNode.h: Removed.
        * dom/Node.cpp:
        (WebCore::Node::scriptExecutionContext):
        (WebCore::Node::eventListeners):
        (WebCore::Node::insertedIntoDocument):
        (WebCore::Node::removedFromDocument):
        (WebCore::Node::willMoveToNewOwnerDocument):
        (WebCore::Node::didMoveToNewOwnerDocument):
        (WebCore::updateSVGElementInstancesAfterEventListenerChange):
        (WebCore::Node::addEventListener):
        (WebCore::Node::removeEventListener):
        (WebCore::Node::removeAllEventListenersSlowCase):
        (WebCore::Node::handleLocalEvents):
        (WebCore::eventTargetAsSVGElementInstance):
        (WebCore::eventTargetRespectingSVGTargetRules):
        (WebCore::Node::dispatchEvent):
        (WebCore::Node::dispatchGenericEvent):
        (WebCore::Node::dispatchSubtreeModifiedEvent):
        (WebCore::Node::dispatchWindowEvent):
        (WebCore::Node::dispatchUIEvent):
        (WebCore::Node::dispatchKeyEvent):
        (WebCore::Node::dispatchMouseEvent):
        (WebCore::Node::dispatchSimulatedMouseEvent):
        (WebCore::Node::dispatchSimulatedClick):
        (WebCore::Node::dispatchWheelEvent):
        (WebCore::Node::dispatchWebKitAnimationEvent):
        (WebCore::Node::dispatchWebKitTransitionEvent):
        (WebCore::Node::dispatchFocusEvent):
        (WebCore::Node::dispatchBlurEvent):
        (WebCore::Node::dispatchEventForType):
        (WebCore::Node::dispatchProgressEvent):
        (WebCore::Node::dispatchStorageEvent):
        (WebCore::Node::removeInlineEventListenerForType):
        (WebCore::Node::setInlineEventListenerForType):
        (WebCore::Node::setInlineEventListenerForTypeAndAttribute):
        (WebCore::Node::inlineEventListenerForType):
        (WebCore::Node::disabled):
        (WebCore::Node::defaultEventHandler):
        (WebCore::Node::onabort):
        (WebCore::Node::setOnabort):
        (WebCore::Node::onblur):
        (WebCore::Node::setOnblur):
        (WebCore::Node::onchange):
        (WebCore::Node::setOnchange):
        (WebCore::Node::onclick):
        (WebCore::Node::setOnclick):
        (WebCore::Node::oncontextmenu):
        (WebCore::Node::setOncontextmenu):
        (WebCore::Node::ondblclick):
        (WebCore::Node::setOndblclick):
        (WebCore::Node::onerror):
        (WebCore::Node::setOnerror):
        (WebCore::Node::onfocus):
        (WebCore::Node::setOnfocus):
        (WebCore::Node::oninput):
        (WebCore::Node::setOninput):
        (WebCore::Node::onkeydown):
        (WebCore::Node::setOnkeydown):
        (WebCore::Node::onkeypress):
        (WebCore::Node::setOnkeypress):
        (WebCore::Node::onkeyup):
        (WebCore::Node::setOnkeyup):
        (WebCore::Node::onload):
        (WebCore::Node::setOnload):
        (WebCore::Node::onmousedown):
        (WebCore::Node::setOnmousedown):
        (WebCore::Node::onmousemove):
        (WebCore::Node::setOnmousemove):
        (WebCore::Node::onmouseout):
        (WebCore::Node::setOnmouseout):
        (WebCore::Node::onmouseover):
        (WebCore::Node::setOnmouseover):
        (WebCore::Node::onmouseup):
        (WebCore::Node::setOnmouseup):
        (WebCore::Node::onmousewheel):
        (WebCore::Node::setOnmousewheel):
        (WebCore::Node::onbeforecut):
        (WebCore::Node::setOnbeforecut):
        (WebCore::Node::oncut):
        (WebCore::Node::setOncut):
        (WebCore::Node::onbeforecopy):
        (WebCore::Node::setOnbeforecopy):
        (WebCore::Node::oncopy):
        (WebCore::Node::setOncopy):
        (WebCore::Node::onbeforepaste):
        (WebCore::Node::setOnbeforepaste):
        (WebCore::Node::onpaste):
        (WebCore::Node::setOnpaste):
        (WebCore::Node::ondragenter):
        (WebCore::Node::setOndragenter):
        (WebCore::Node::ondragover):
        (WebCore::Node::setOndragover):
        (WebCore::Node::ondragleave):
        (WebCore::Node::setOndragleave):
        (WebCore::Node::ondrop):
        (WebCore::Node::setOndrop):
        (WebCore::Node::ondragstart):
        (WebCore::Node::setOndragstart):
        (WebCore::Node::ondrag):
        (WebCore::Node::setOndrag):
        (WebCore::Node::ondragend):
        (WebCore::Node::setOndragend):
        (WebCore::Node::onreset):
        (WebCore::Node::setOnreset):
        (WebCore::Node::onresize):
        (WebCore::Node::setOnresize):
        (WebCore::Node::onscroll):
        (WebCore::Node::setOnscroll):
        (WebCore::Node::onsearch):
        (WebCore::Node::setOnsearch):
        (WebCore::Node::onselect):
        (WebCore::Node::setOnselect):
        (WebCore::Node::onselectstart):
        (WebCore::Node::setOnselectstart):
        (WebCore::Node::onsubmit):
        (WebCore::Node::setOnsubmit):
        (WebCore::Node::onunload):
        (WebCore::Node::setOnunload):
        * dom/Node.h:
        * editing/Editor.cpp:
        (WebCore::Editor::dispatchCPPEvent):
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::handleLocalEvents):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::defaultEventHandler):
        * html/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::notifyFinished):
        * loader/MediaDocument.cpp:
        (WebCore::MediaDocument::defaultEventHandler):
        * page/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::mouseButtonListener):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::dispatchDragEvent):
        (WebCore::EventHandler::updateMouseEventTargetNode):
        (WebCore::EventHandler::dispatchMouseEvent):
        (WebCore::EventHandler::handleWheelEvent):
        (WebCore::EventHandler::canMouseDownStartSelect):
        (WebCore::EventHandler::canMouseDragExtendSelect):
        (WebCore::eventTargetNodeForDocument):
        (WebCore::EventHandler::keyEvent):
        * page/FrameView.cpp:
        (WebCore::FrameView::scheduleEvent):
        (WebCore::FrameView::updateOverflowStatus):
        * page/FrameView.h:
        * page/Page.cpp:
        (WebCore::networkStateChanged):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::scrollToOffset):
        (WebCore::RenderLayer::updateOverflowStatus):
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::valueChanged):
        * rendering/RenderMedia.h:
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::selectionChanged):
        * svg/SVGElementInstance.h:
        (WebCore::SVGElementInstance::toNode):
        * xml/XPathExpression.cpp:
        (WebCore::XPathExpression::evaluate):
        * xml/XPathResult.cpp:
        (WebCore::XPathResult::XPathResult):

2009-02-05  Adam Treat  <adam.treat@torchmobile.com>

        Fix the Qt build now that EventTargetNode.idl was removed in r40672.

        * WebCore.pro:

2009-02-05  Scott Violet  <sky@google.com>

        Reviewed by Sam Weinig.

        Bug 23462: Add RGB -> CMYK conversion algorithm
        <https://bugs.webkit.org/show_bug.cgi?id=23462>

        Adds an RGB -> CMYK converter. This isn't perfect, but better than
        nothing.

        * html/CanvasStyle.cpp:
        (WebCore::CanvasStyle::applyStrokeColor):
        (WebCore::CanvasStyle::applyFillColor):
        (WebCore::CanvasStyle::cmykToRGB):
        * html/CanvasStyle.h:

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

        Reviewed by Darin Adler.

        First stage of merging EventTargetNode up into Node. The intent of this change
        is to both simplify the inheritance hierarchy (at the same time making it more
        closely match the spec which states that all Nodes are EventTargets) and save
        4 bytes per Node that the polymorphic multiple-inheritance was costing us.

        This does the bare minimum to get things compiling, the next patch will clean

        * DerivedSources.make:
        * WebCore.base.exp:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSDocumentCustom.cpp:
        (WebCore::JSDocument::mark):
        * bindings/js/JSEventListener.cpp:
        (WebCore::JSLazyEventListener::parseCode):
        * bindings/js/JSEventTarget.cpp:
        (WebCore::toEventTarget):
        * bindings/js/JSEventTarget.h:
        * bindings/js/JSEventTargetNodeCustom.cpp:
        (WebCore::JSNode::addEventListener):
        (WebCore::JSNode::removeEventListener):
        (WebCore::JSNode::pushEventHandlerScope):
        * bindings/js/JSStyleSheetCustom.cpp:
        * bindings/scripts/CodeGeneratorJS.pm:
        * bindings/scripts/CodeGeneratorObjC.pm:
        * dom/Attr.idl:
        * dom/CharacterData.h:
        * dom/CharacterData.idl:
        * dom/Document.idl:
        * dom/DocumentFragment.idl:
        * dom/Element.idl:
        * dom/EventTarget.cpp:
        (WebCore::EventTarget::toNode):
        * dom/EventTarget.h:
        * dom/EventTarget.idl:
        * dom/EventTargetNode.cpp:
        (WebCore::Node::scriptExecutionContext):
        (WebCore::Node::eventListeners):
        (WebCore::Node::insertedIntoDocument):
        (WebCore::Node::removedFromDocument):
        (WebCore::Node::willMoveToNewOwnerDocument):
        (WebCore::Node::didMoveToNewOwnerDocument):
        (WebCore::Node::addEventListener):
        (WebCore::Node::removeEventListener):
        (WebCore::Node::removeAllEventListenersSlowCase):
        (WebCore::Node::handleLocalEvents):
        (WebCore::Node::dispatchEvent):
        (WebCore::Node::dispatchGenericEvent):
        (WebCore::Node::dispatchSubtreeModifiedEvent):
        (WebCore::Node::dispatchWindowEvent):
        (WebCore::Node::dispatchUIEvent):
        (WebCore::Node::dispatchKeyEvent):
        (WebCore::Node::dispatchMouseEvent):
        (WebCore::Node::dispatchSimulatedMouseEvent):
        (WebCore::Node::dispatchSimulatedClick):
        (WebCore::Node::dispatchWheelEvent):
        (WebCore::Node::dispatchWebKitAnimationEvent):
        (WebCore::Node::dispatchWebKitTransitionEvent):
        (WebCore::Node::dispatchFocusEvent):
        (WebCore::Node::dispatchBlurEvent):
        (WebCore::Node::dispatchEventForType):
        (WebCore::Node::dispatchProgressEvent):
        (WebCore::Node::dispatchStorageEvent):
        (WebCore::Node::removeInlineEventListenerForType):
        (WebCore::Node::setInlineEventListenerForType):
        (WebCore::Node::setInlineEventListenerForTypeAndAttribute):
        (WebCore::Node::inlineEventListenerForType):
        (WebCore::Node::disabled):
        (WebCore::Node::defaultEventHandler):
        (WebCore::Node::onabort):
        (WebCore::Node::setOnabort):
        (WebCore::Node::onblur):
        (WebCore::Node::setOnblur):
        (WebCore::Node::onchange):
        (WebCore::Node::setOnchange):
        (WebCore::Node::onclick):
        (WebCore::Node::setOnclick):
        (WebCore::Node::oncontextmenu):
        (WebCore::Node::setOncontextmenu):
        (WebCore::Node::ondblclick):
        (WebCore::Node::setOndblclick):
        (WebCore::Node::onerror):
        (WebCore::Node::setOnerror):
        (WebCore::Node::onfocus):
        (WebCore::Node::setOnfocus):
        (WebCore::Node::oninput):
        (WebCore::Node::setOninput):
        (WebCore::Node::onkeydown):
        (WebCore::Node::setOnkeydown):
        (WebCore::Node::onkeypress):
        (WebCore::Node::setOnkeypress):
        (WebCore::Node::onkeyup):
        (WebCore::Node::setOnkeyup):
        (WebCore::Node::onload):
        (WebCore::Node::setOnload):
        (WebCore::Node::onmousedown):
        (WebCore::Node::setOnmousedown):
        (WebCore::Node::onmousemove):
        (WebCore::Node::setOnmousemove):
        (WebCore::Node::onmouseout):
        (WebCore::Node::setOnmouseout):
        (WebCore::Node::onmouseover):
        (WebCore::Node::setOnmouseover):
        (WebCore::Node::onmouseup):
        (WebCore::Node::setOnmouseup):
        (WebCore::Node::onmousewheel):
        (WebCore::Node::setOnmousewheel):
        (WebCore::Node::onbeforecut):
        (WebCore::Node::setOnbeforecut):
        (WebCore::Node::oncut):
        (WebCore::Node::setOncut):
        (WebCore::Node::onbeforecopy):
        (WebCore::Node::setOnbeforecopy):
        (WebCore::Node::oncopy):
        (WebCore::Node::setOncopy):
        (WebCore::Node::onbeforepaste):
        (WebCore::Node::setOnbeforepaste):
        (WebCore::Node::onpaste):
        (WebCore::Node::setOnpaste):
        (WebCore::Node::ondragenter):
        (WebCore::Node::setOndragenter):
        (WebCore::Node::ondragover):
        (WebCore::Node::setOndragover):
        (WebCore::Node::ondragleave):
        (WebCore::Node::setOndragleave):
        (WebCore::Node::ondrop):
        (WebCore::Node::setOndrop):
        (WebCore::Node::ondragstart):
        (WebCore::Node::setOndragstart):
        (WebCore::Node::ondrag):
        (WebCore::Node::setOndrag):
        (WebCore::Node::ondragend):
        (WebCore::Node::setOndragend):
        (WebCore::Node::onreset):
        (WebCore::Node::setOnreset):
        (WebCore::Node::onresize):
        (WebCore::Node::setOnresize):
        (WebCore::Node::onscroll):
        (WebCore::Node::setOnscroll):
        (WebCore::Node::onsearch):
        (WebCore::Node::setOnsearch):
        (WebCore::Node::onselect):
        (WebCore::Node::setOnselect):
        (WebCore::Node::onselectstart):
        (WebCore::Node::setOnselectstart):
        (WebCore::Node::onsubmit):
        (WebCore::Node::setOnsubmit):
        (WebCore::Node::onunload):
        (WebCore::Node::setOnunload):
        * dom/EventTargetNode.h:
        (WebCore::toEventTargetNode):
        (WebCore::EventTargetNodeCast):
        * dom/EventTargetNode.idl: Removed.
        * dom/MouseEvent.cpp:
        (WebCore::MouseEvent::MouseEvent):
        (WebCore::MouseEvent::initMouseEvent):
        (WebCore::MouseEvent::toElement):
        (WebCore::MouseEvent::fromElement):
        * dom/MouseEvent.h:
        (WebCore::MouseEvent::create):
        (WebCore::MouseEvent::relatedTarget):
        * dom/Node.cpp:
        (WebCore::Node::~Node):
        * dom/Node.h:
        (WebCore::Node::isEventTargetNode):
        (WebCore::Node::toNode):
        (WebCore::Node::removeAllEventListeners):
        (WebCore::Node::refEventTarget):
        (WebCore::Node::derefEventTarget):
        * dom/Node.idl:
        * page/EventHandler.h:
        * page/FrameView.h:
        * xml/XPathResult.h:
        (WebCore::XPathResult::create):

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

        Convert RenderLayer from having a RenderBox* m_renderer to having a RenderBoxModelObject*.  The
        container-relative repaint methods all had to be changed as a result to use RenderBoxModelObject* also.

        All of RenderLayer.cpp now uses what will be the new style for dealing with an object that can be a block
        or an inline flow.  x()/y()/width()/height() can't be queried on an inline flow, nor can many other
        properties (like scrollWidth() / scrollHeight()), so the code has to be tightened up to convert to RenderBox
        under the right conditions.

        There was a bogus subtraction of renderer()->y() in localBounding box for RenderInlines.  Since y was always
        0, this subtraction wasn't necessary.  It has been removed.

        Reviewed by Adam Roben

        * page/animation/AnimationBase.cpp:
        * rendering/RenderBR.h:
        (WebCore::RenderBR::selectionRectForRepaint):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::selectionGapRectsForRepaint):
        (WebCore::RenderBlock::rectWithOutlineForRepaint):
        * rendering/RenderBlock.h:
        (WebCore::RenderBlock::selectionRectForRepaint):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::outlineBoundsForRepaint):
        (WebCore::RenderBox::localToContainerQuad):
        (WebCore::RenderBox::clippedOverflowRectForRepaint):
        (WebCore::RenderBox::computeRectForRepaint):
        * rendering/RenderBox.h:
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::relativePositionOffsetX):
        (WebCore::RenderBoxModelObject::relativePositionOffsetY):
        * rendering/RenderBoxModelObject.h:
        (WebCore::RenderBoxModelObject::relativePositionOffset):
        * rendering/RenderForeignObject.cpp:
        (WebCore::RenderForeignObject::computeRectForRepaint):
        * rendering/RenderForeignObject.h:
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::clippedOverflowRectForRepaint):
        (WebCore::RenderInline::rectWithOutlineForRepaint):
        * rendering/RenderInline.h:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::RenderLayer):
        (WebCore::RenderLayer::updateLayerPositions):
        (WebCore::RenderLayer::updateTransform):
        (WebCore::RenderLayer::setHasVisibleContent):
        (WebCore::RenderLayer::updateLayerPosition):
        (WebCore::RenderLayer::scrollToOffset):
        (WebCore::RenderLayer::scrollRectToVisible):
        (WebCore::resizerCornerRect):
        (WebCore::RenderLayer::scrollbarCornerPresent):
        (WebCore::RenderLayer::invalidateScrollbarRect):
        (WebCore::RenderLayer::positionOverflowControls):
        (WebCore::RenderLayer::computeScrollDimensions):
        (WebCore::RenderLayer::updateScrollInfoAfterLayout):
        (WebCore::RenderLayer::paintScrollCorner):
        (WebCore::RenderLayer::paintResizer):
        (WebCore::RenderLayer::isPointInResizeControl):
        (WebCore::RenderLayer::hitTestOverflowControls):
        (WebCore::RenderLayer::paintLayer):
        (WebCore::RenderLayer::hitTestLayer):
        (WebCore::RenderLayer::localBoundingBox):
        * rendering/RenderLayer.h:
        (WebCore::RenderLayer::renderer):
        (WebCore::RenderLayer::renderBox):
        (WebCore::RenderLayer::renderBoxX):
        (WebCore::RenderLayer::renderBoxY):
        * rendering/RenderListMarker.cpp:
        (WebCore::RenderListMarker::selectionRectForRepaint):
        * rendering/RenderListMarker.h:
        * rendering/RenderMarquee.cpp:
        (WebCore::RenderMarquee::computePosition):
        (WebCore::RenderMarquee::timerFired):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::containerForRepaint):
        (WebCore::RenderObject::repaintUsingContainer):
        (WebCore::RenderObject::repaint):
        (WebCore::RenderObject::repaintRectangle):
        (WebCore::RenderObject::repaintAfterLayoutIfNeeded):
        (WebCore::RenderObject::rectWithOutlineForRepaint):
        (WebCore::RenderObject::clippedOverflowRectForRepaint):
        (WebCore::RenderObject::computeRectForRepaint):
        (WebCore::RenderObject::localToContainerQuad):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::selectionRectForRepaint):
        (WebCore::RenderObject::outlineBoundsForRepaint):
        * rendering/RenderPath.cpp:
        (WebCore::RenderPath::clippedOverflowRectForRepaint):
        (WebCore::RenderPath::outlineBoundsForRepaint):
        * rendering/RenderPath.h:
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::selectionRectForRepaint):
        (WebCore::RenderReplaced::clippedOverflowRectForRepaint):
        * rendering/RenderReplaced.h:
        * rendering/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::clippedOverflowRectForRepaint):
        (WebCore::RenderSVGContainer::outlineBoundsForRepaint):
        * rendering/RenderSVGContainer.h:
        * rendering/RenderSVGHiddenContainer.cpp:
        (WebCore::RenderSVGHiddenContainer::clippedOverflowRectForRepaint):
        * rendering/RenderSVGHiddenContainer.h:
        * rendering/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::clippedOverflowRectForRepaint):
        * rendering/RenderSVGImage.h:
        * rendering/RenderSVGInlineText.cpp:
        (WebCore::RenderSVGInlineText::selectionRectForRepaint):
        (WebCore::RenderSVGInlineText::computeRepaintRectForRange):
        * rendering/RenderSVGInlineText.h:
        * rendering/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::clippedOverflowRectForRepaint):
        * rendering/RenderSVGRoot.h:
        * rendering/RenderSVGText.cpp:
        (WebCore::RenderSVGText::clippedOverflowRectForRepaint):
        * rendering/RenderSVGText.h:
        * rendering/RenderSelectionInfo.h:
        (WebCore::RenderSelectionInfoBase::repaintContainer):
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::clippedOverflowRectForRepaint):
        (WebCore::RenderTableCell::computeRectForRepaint):
        (WebCore::RenderTableCell::localToContainerQuad):
        * rendering/RenderTableCell.h:
        * rendering/RenderTableCol.cpp:
        (WebCore::RenderTableCol::clippedOverflowRectForRepaint):
        * rendering/RenderTableCol.h:
        * rendering/RenderTableRow.cpp:
        (WebCore::RenderTableRow::clippedOverflowRectForRepaint):
        * rendering/RenderTableRow.h:
        * rendering/RenderText.cpp:
        (WebCore::RenderText::clippedOverflowRectForRepaint):
        (WebCore::RenderText::selectionRectForRepaint):
        * rendering/RenderText.h:
        * rendering/RenderTreeAsText.cpp:
        (WebCore::write):
        * rendering/RenderView.cpp:
        (WebCore::RenderView::localToContainerQuad):
        (WebCore::RenderView::computeRectForRepaint):
        * rendering/RenderView.h:

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

        Build fix.

        * page/animation/KeyframeAnimation.h: A function prototype had two "fromStyle" arguments.

2009-02-05  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Alexey Proskuryakov.
        Landed by Simon Hausmann.

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

        Use a 2 arguments constructor for KURL to avoid ASSERT failure.

        * page/SecurityOrigin.cpp:
        (WebCore::SecurityOrigin::createFromDatabaseIdentifier):

2009-02-04  Feng Qian  <feng@chromium.org>

        Reviewed by Darin Adler.

        Add Android-specific files to WebCore/editing directory.
        https://bugs.webkit.org/show_bug.cgi?id=23294

        * editing/android: Added.
        * editing/android/EditorAndroid.cpp: Added.
        (WebCore::Editor::newGeneralClipboard):

2009-02-04  Dean Jackson  <dino@apple.com>

        Reviewed by Darin Adler.

        Remove -webkit-animation-play-state
        The AnimationController still has the code to execute the property, but
        it is no longer parsed or recorded.
        https://bugs.webkit.org/show_bug.cgi?id=22907

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::):
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::parseAnimationProperty):
        * css/CSSParser.h:
        * css/CSSPropertyNames.in:
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        * css/CSSStyleSelector.h:
        * platform/animation/Animation.h:
        * rendering/style/RenderStyleConstants.h:

2009-02-04  Tor Arne Vestbø  <tavestbo@trolltech.com>

        Reviewed by Darin Adler.

        Make sure we don't load on removing the media element from the document
        https://bugs.webkit.org/show_bug.cgi?id=22105

        Test: media/remove-from-document-no-load.html

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::removedFromDocument):

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

        Add a new RenderBoxModelObject class that will eventually act as the direct base class for RenderInlines.  For
        now just adding the class and putting it in between RenderObject and RenderBox in the hierarchy.  RenderInline remains
        derived from RenderBox for now.

        Reviewed by Sam Weinig

        * WebCore.xcodeproj/project.pbxproj:
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::RenderBox):
        (WebCore::RenderBox::destroy):
        (WebCore::RenderBox::styleWillChange):
        (WebCore::RenderBox::styleDidChange):
        (WebCore::RenderBox::computeRectForRepaint):
        * rendering/RenderBox.h:
        * rendering/RenderBoxModelObject.cpp: Added.
        (WebCore::RenderBoxModelObject::RenderBoxModelObject):
        (WebCore::RenderBoxModelObject::~RenderBoxModelObject):
        * rendering/RenderBoxModelObject.h: Added.
        * rendering/RenderObject.h:

2009-02-04  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Dave Hyatt

        Added accelerated animation support to AnimationController and friends. The primary
        changes are:
        * accelerated animations get their start time from the compositing engine, so we
          wait for a callback (notifyAnimationStarted()) in order to get the start time.
        * if software and accelerated animations start in the same cycle, they all need
          to use the same start time, which is that of the accelerated animations.

        Added AnimationControllerPrivate to preserve the encapsulation under
        AnimationController.

        * GNUmakefile.am:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * page/animation/AnimationBase.cpp:
        (WebCore::PropertyWrapperBase::animationIsAccelerated):
        (WebCore::PropertyWrapperAcceleratedOpacity::PropertyWrapperAcceleratedOpacity):
        (WebCore::PropertyWrapperAcceleratedOpacity::animationIsAccelerated):
        (WebCore::PropertyWrapperAcceleratedOpacity::blend):
        (WebCore::PropertyWrapperAcceleratedTransform::PropertyWrapperAcceleratedTransform):
        (WebCore::PropertyWrapperAcceleratedTransform::animationIsAccelerated):
        (WebCore::PropertyWrapperAcceleratedTransform::blend):
        (WebCore::ensurePropertyMap):
        (WebCore::AnimationBase::AnimationBase):
        (WebCore::AnimationBase::~AnimationBase):
        (WebCore::AnimationBase::blendProperties):
        (WebCore::AnimationBase::animationOfPropertyIsAccelerated):
        (WebCore::AnimationBase::updateStateMachine):
        (WebCore::AnimationBase::fireAnimationEventsIfNeeded):
        (WebCore::AnimationBase::willNeedService):
        (WebCore::AnimationBase::getTimeToNextEvent):
        (WebCore::AnimationBase::goIntoEndingOrLoopingState):
        (WebCore::AnimationBase::beginAnimationUpdateTime):
        * page/animation/AnimationBase.h:
        (WebCore::AnimationBase::onAnimationStartResponse):
        (WebCore::AnimationBase::getAnimatedStyle):
        (WebCore::AnimationBase::isAnimatingProperty):
        (WebCore::AnimationBase::endAnimation):
        (WebCore::AnimationBase::isFallbackAnimating):
        * page/animation/AnimationController.cpp:
        (WebCore::AnimationControllerPrivate::AnimationControllerPrivate):
        (WebCore::AnimationControllerPrivate::accessCompositeAnimation):
        (WebCore::AnimationControllerPrivate::addNodeChangeToDispatch):
        (WebCore::AnimationControllerPrivate::animationTimerFired):
        (WebCore::AnimationControllerPrivate::pauseAnimationAtTime):
        (WebCore::AnimationControllerPrivate::pauseTransitionAtTime):
        (WebCore::AnimationControllerPrivate::beginAnimationUpdateTime):
        (WebCore::AnimationControllerPrivate::getAnimatedStyleForRenderer):
        (WebCore::AnimationControllerPrivate::styleAvailable):
        (WebCore::AnimationControllerPrivate::addToStartTimeResponseWaitList):
        (WebCore::AnimationControllerPrivate::removeFromStartTimeResponseWaitList):
        (WebCore::AnimationControllerPrivate::startTimeResponse):
        (WebCore::AnimationController::getAnimatedStyleForRenderer):
        (WebCore::AnimationController::notifyAnimationStarted):
        (WebCore::AnimationController::endAnimationUpdate):
        * page/animation/AnimationController.h:
        * page/animation/AnimationControllerPrivate.h: Added.
        (WebCore::AnimationControllerPrivate::hasAnimations):
        (WebCore::AnimationControllerPrivate::setBeginAnimationUpdateTime):
        (WebCore::AnimationControllerPrivate::endAnimationUpdate):
        (WebCore::AnimationControllerPrivate::receivedStartTimeResponse):
        * page/animation/CompositeAnimation.cpp:
        (WebCore::CompositeAnimationPrivate::CompositeAnimationPrivate):
        (WebCore::CompositeAnimationPrivate::animationControllerPriv):
        (WebCore::CompositeAnimationPrivate::updateTransitions):
        (WebCore::CompositeAnimationPrivate::updateKeyframeAnimations):
        (WebCore::CompositeAnimationPrivate::animate):
        (WebCore::CompositeAnimationPrivate::getAnimatedStyle):
        (WebCore::CompositeAnimationPrivate::addToStartTimeResponseWaitList):
        (WebCore::CompositeAnimationPrivate::removeFromStartTimeResponseWaitList):
        (WebCore::CompositeAnimation::CompositeAnimation):
        (WebCore::CompositeAnimation::animationControllerPriv):
        (WebCore::CompositeAnimation::getAnimatedStyle):
        (WebCore::CompositeAnimation::addToStartTimeResponseWaitList):
        (WebCore::CompositeAnimation::removeFromStartTimeResponseWaitList):
        * page/animation/CompositeAnimation.h:
        (WebCore::CompositeAnimation::create):
        * page/animation/ImplicitAnimation.cpp:
        (WebCore::ImplicitAnimation::shouldSendEventForListener):
        (WebCore::ImplicitAnimation::animate):
        (WebCore::ImplicitAnimation::getAnimatedStyle):
        (WebCore::ImplicitAnimation::startAnimation):
        (WebCore::ImplicitAnimation::endAnimation):
        (WebCore::ImplicitAnimation::sendTransitionEvent):
        (WebCore::ImplicitAnimation::willNeedService):
        * page/animation/ImplicitAnimation.h:
        * page/animation/KeyframeAnimation.cpp:
        (WebCore::KeyframeAnimation::getKeyframeAnimationInterval):
        (WebCore::KeyframeAnimation::animate):
        (WebCore::KeyframeAnimation::getAnimatedStyle):
        (WebCore::KeyframeAnimation::startAnimation):
        (WebCore::KeyframeAnimation::endAnimation):
        (WebCore::KeyframeAnimation::shouldSendEventForListener):
        (WebCore::KeyframeAnimation::sendAnimationEvent):
        (WebCore::KeyframeAnimation::willNeedService):
        * page/animation/KeyframeAnimation.h:
        * platform/graphics/GraphicsLayerClient.h:
        * platform/graphics/mac/GraphicsLayerCA.mm:
        (-[WebAnimationDelegate animationDidStart:]):
        * rendering/RenderLayerBacking.h:

2009-02-04  Dimitri Glazkov  <dglazkov@chromium.org>

        Not reviewed, build fix.

        Remove duplicate definition of msSans in FontCache::alternateFamilyName.

        * platform/graphics/FontCache.cpp:
        (WebCore::alternateFamilyName):

2009-02-04  Eric Seidel  <eric@webkit.org>

        Reviewed by George Staikos.

        Reverse the meaning of the if check so that Android
        (dpad devices) do not scroll on focus and normal platforms do
        http://trac.webkit.org/changeset/40647

        This was caught by George Staikos, and I wrote the patch.

        * dom/Element.cpp:
        (WebCore::Element::updateFocusAppearance):

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

        Eliminate RenderContainer.

        Reviewed by Sam and Anders

        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::RenderBlock):
        (WebCore::RenderBlock::destroy):
        (WebCore::RenderBlock::styleWillChange):
        (WebCore::RenderBlock::styleDidChange):
        (WebCore::RenderBlock::addChild):
        (WebCore::RenderBlock::dirtyLineBoxes):
        (WebCore::RenderBlock::createInlineBox):
        (WebCore::RenderBlock::removeChild):
        (WebCore::RenderBlock::setSelectionState):
        (WebCore::RenderBlock::avoidsFloats):
        (WebCore::RenderBlock::positionForCoordinates):
        (WebCore::RenderBlock::calcInlinePrefWidths):
        (WebCore::RenderBlock::baselinePosition):
        (WebCore::RenderBlock::getBaselineOfFirstLineBox):
        (WebCore::RenderBlock::getBaselineOfLastLineBox):
        (WebCore::RenderBlock::rectWithOutlineForRepaint):
        (WebCore::RenderBlock::hoverAncestor):
        (WebCore::RenderBlock::updateDragState):
        (WebCore::RenderBlock::localCaretRect):
        * rendering/RenderBlock.h:
        (WebCore::RenderBlock::virtualChildren):
        (WebCore::RenderBlock::children):
        * rendering/RenderContainer.cpp: Removed.
        * rendering/RenderContainer.h: Removed.
        * rendering/RenderFrameSet.cpp:
        (WebCore::RenderFrameSet::RenderFrameSet):
        (WebCore::RenderFrameSet::nodeAtPoint):
        (WebCore::RenderFrameSet::layout):
        * rendering/RenderFrameSet.h:
        (WebCore::RenderFrameSet::virtualChildren):
        (WebCore::RenderFrameSet::children):
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::RenderInline):
        (WebCore::RenderInline::destroy):
        (WebCore::RenderInline::styleDidChange):
        (WebCore::nextContinuation):
        (WebCore::RenderInline::continuationBefore):
        (WebCore::RenderInline::addChildIgnoringContinuation):
        (WebCore::RenderInline::splitInlines):
        (WebCore::RenderInline::splitFlow):
        (WebCore::RenderInline::addChildToContinuation):
        (WebCore::RenderInline::offsetLeft):
        (WebCore::RenderInline::offsetTop):
        (WebCore::RenderInline::positionForCoordinates):
        (WebCore::RenderInline::clippedOverflowRectForRepaint):
        (WebCore::RenderInline::rectWithOutlineForRepaint):
        (WebCore::RenderInline::updateDragState):
        (WebCore::RenderInline::childBecameNonInline):
        * rendering/RenderInline.h:
        (WebCore::RenderInline::virtualChildren):
        (WebCore::RenderInline::children):
        (WebCore::RenderInline::continuation):
        (WebCore::RenderInline::setContinuation):
        * rendering/RenderLineBoxList.h:
        * rendering/RenderObject.h:
        * rendering/RenderObjectChildList.h:
        * rendering/RenderSVGInlineText.cpp:
        (WebCore::RenderSVGInlineText::computeRepaintRectForRange):
        * rendering/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::RenderSVGRoot):
        (WebCore::RenderSVGRoot::applyContentTransforms):
        (WebCore::RenderSVGRoot::paint):
        (WebCore::RenderSVGRoot::absoluteTransform):
        (WebCore::RenderSVGRoot::nodeAtPoint):
        (WebCore::RenderSVGRoot::position):
        * rendering/RenderSVGRoot.h:
        (WebCore::RenderSVGRoot::virtualChildren):
        (WebCore::RenderSVGRoot::children):
        * rendering/RenderSVGText.cpp:
        (WebCore::RenderSVGText::absoluteRects):
        (WebCore::RenderSVGText::absoluteQuads):
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::addChild):
        (WebCore::RenderTable::removeChild):
        * rendering/RenderTableCol.cpp:
        (WebCore::RenderTableCol::RenderTableCol):
        * rendering/RenderTableCol.h:
        (WebCore::RenderTableCol::virtualChildren):
        (WebCore::RenderTableCol::children):
        * rendering/RenderTableRow.cpp:
        (WebCore::RenderTableRow::RenderTableRow):
        (WebCore::RenderTableRow::destroy):
        (WebCore::RenderTableRow::styleWillChange):
        (WebCore::RenderTableRow::addChild):
        * rendering/RenderTableRow.h:
        (WebCore::RenderTableRow::virtualChildren):
        (WebCore::RenderTableRow::children):
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::RenderTableSection):
        (WebCore::RenderTableSection::destroy):
        (WebCore::RenderTableSection::addChild):
        (WebCore::RenderTableSection::removeChild):
        (WebCore::RenderTableSection::lowestPosition):
        (WebCore::RenderTableSection::rightmostPosition):
        (WebCore::RenderTableSection::leftmostPosition):
        * rendering/RenderTableSection.h:
        (WebCore::RenderTableSection::virtualChildren):
        (WebCore::RenderTableSection::children):

2009-02-04  Mads Adger  <mad@chromium.org>

        Reviewed by Antti Koivisto.

        Bug 23180 Reading freed memory at DocumentLoader::checkForPendingPreloads
        https://bugs.webkit.org/show_bug.cgi?id=23180

        Added a protector for the document potentially holding on the last reference to the loader we are interating with.

        * loader/loader.cpp:
        (WebCore::Loader::Host::didFinishLoading):
        (WebCore::Loader::Host::didFail):

2009-02-04  Cary Clark  <caryclark@google.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=23163
        Don't scroll to show current focus on devices that use
        directional pads for navigation.

        * dom/Element.cpp:
        (WebCore::Element::updateFocusAppearance):

2009-02-04  Cary Clark  <caryclark@google.com>

        Reviewed by Darin Adler.

        Change RenderBlock::columnGap() access permissions from protected to
        public. ANDROID creates an array of focus rectangles for navigation
        with a trackball or directional pad, and needs access to the column gap
        to implement this logic.

        Android has no testing harness @ webkit.org, thus no tests.

        * rendering/RenderBlock.h:

2009-02-04  Cary Clark  <caryclark@google.com>

        Reviewed by Darin Adler and Eric Seidel.

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

        Add ENABLE_ON_FIRST_TEXTAREA_FOCUS_SELECT_ALL to permit the ANDROID
        platform to select all when focusing on a textarea. This matches
        the user interface guidelines other applications on the platform.

        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::updateFocusAppearance):

2009-02-04  Beth Dakin  <bdakin@apple.com>

        Reviewed by Dave Hyatt.

        Fix for <rdar://problem/6386112> Some inline-elements are not
        becoming proper dashboard-regions

        RenderInline needs its own implementation of addDashboardRegions
        because otherwise all of the coordinate calculations are
        inaccurate.

        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::addDashboardRegions):
        * rendering/RenderInline.h:
        * rendering/RenderObject.h:

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

        Move addChild/removeChild from RenderContainer to RenderObject.

        Reviewed by Sam Weinig

        * rendering/RenderContainer.cpp:
        * rendering/RenderContainer.h:
        * rendering/RenderObject.cpp:
        (WebCore::updateListMarkerNumbers):
        (WebCore::RenderObject::addChild):
        (WebCore::RenderObject::removeChild):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::addChildIgnoringContinuation):
        * rendering/RenderSVGContainer.cpp:
        * rendering/RenderSVGContainer.h:

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

        Reviewed by Sam Weinig

        <rdar://problem/3541409> - Further HistoryItem / BF cache cleanup

        * history/CachedFrame.cpp:
        (WebCore::CachedFrame::CachedFrame):
        (WebCore::CachedFrame::restore):
        * history/CachedFrame.h:

        * history/CachedPage.cpp:
        (WebCore::CachedPage::restore):
        * history/CachedPage.h:
        (WebCore::CachedPage::mainFrameView):

        * history/HistoryItem.cpp:
        (WebCore::HistoryItem::HistoryItem):
        (WebCore::HistoryItem::~HistoryItem):
        * history/HistoryItem.h:
        (WebCore::HistoryItem::isInPageCache):

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

2009-02-04  Peter Kasting  <pkasting@google.com>

        Reviewed by David Hyatt.

        https://bugs.webkit.org/show_bug.cgi?id=23743
        Fix memory corruption with open-source GIF decoders.

        * platform/image-decoders/ImageDecoder.h:
        (WebCore::RGBA32Buffer::clear):
        * platform/image-decoders/gif/GIFImageDecoder.cpp:
        (WebCore::GIFImageDecoder::clearFrameBufferCache):
        * platform/image-decoders/skia/GIFImageDecoder.cpp:
        (WebCore::GIFImageDecoder::clearFrameBufferCache):
        (WebCore::GIFImageDecoder::initFrameBuffer):
        * platform/image-decoders/skia/ImageDecoder.h:
        (WebCore::RGBA32Buffer::clear):

2009-02-04  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dave Hyatt

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

        When using accelerated compositing, make repaints use the correct
        repaint container. Hook up the RenderLayerCompositor in RenderView,
        and add to RenderView a method that repaints both the view
        contents, and any intersecting composited layers.

        Make enclosingCompositingLayer() a method on RenderObject, and update
        the compositor to use that. Add a helper method on the compositor to
        get the non-self compositing ancestor: ancestorCompositingLayer().

        Call repaintRectangleInViewAndCompositedLayers() in places that don't do
        container-relative repainting: selection redraw on focus change, caret,
        and widget updates.

        Fix a bug in RenderLayerCompositor where the m_compositingLayersNeedUpdate flag
        would get cleared for partial updates, thus preventing subsequent full updates.

        Fix a bug in RenderLayer::ensureBacking() that made new backing every time.

        * WebCore.xcodeproj/project.pbxproj:
        * editing/SelectionController.cpp:
        (WebCore::SelectionController::recomputeCaretRect):
        (WebCore::SelectionController::invalidateCaretRect):
        (WebCore::SelectionController::focusedOrActiveStateChanged):
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::clippedOverflowRectForRepaint):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::RenderLayer):
        (WebCore::RenderLayer::compositor):
        (WebCore::RenderLayer::updateLayerPositions):
        (WebCore::RenderLayer::removeChild):
        (WebCore::RenderLayer::ensureBacking):
        * rendering/RenderLayer.h:
        (WebCore::RenderLayer::backing):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateGraphicsLayerGeometry):
        (WebCore::RenderLayerBacking::paintIntoLayer):
        (WebCore::RenderLayerBacking::notifyTransitionStarted):
        (WebCore::RenderLayerBacking::notifyAnimationStarted):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::updateCompositingLayers):
        (WebCore::RenderLayerCompositor::updateLayerCompositingState):
        (WebCore::RenderLayerCompositor::layerWillBeRemoved):
        (WebCore::RenderLayerCompositor::ancestorCompositingLayer):
        (WebCore::RenderLayerCompositor::clippedByAncestor):
        * rendering/RenderLayerCompositor.h:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::enclosingCompositingLayer):
        (WebCore::RenderObject::containingBlockWidth):
        (WebCore::RenderObject::containingBlockHeight):
        (WebCore::RenderObject::containerForRepaint):
        (WebCore::RenderObject::repaintUsingContainer):
        * rendering/RenderObject.h:
        * rendering/RenderView.cpp:
        (WebCore::RenderView::shouldRepaint):
        (WebCore::RenderView::repaintViewRectangle):
        (WebCore::RenderView::repaintRectangleInViewAndCompositedLayers):
        (WebCore::RenderView::setMaximalOutlineSize):
        (WebCore::RenderView::usesCompositing):
        (WebCore::RenderView::compositor):
        (WebCore::RenderView::didMoveOnscreen):
        (WebCore::RenderView::willMoveOffscreen):
        * rendering/RenderView.h:
        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::updateWidgetPosition):

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

        Reviewed by David Hyatt.

        Add toRenderImage methods for casting RenderObjects to RenderImages.  The methods will assert if the object
        is not a RenderImage.  Also add a toRenderImage method that takes a RenderImage but returns void and that
        is unimplemented.  This method will catch anyone trying to do a cast when the object is already a RenderImage.

        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::defaultEventHandler):
        * html/HTMLEmbedElement.cpp:
        (WebCore::HTMLEmbedElement::attach):
        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::parseMappedAttribute):
        (WebCore::HTMLImageElement::attach):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::parseMappedAttribute):
        (WebCore::HTMLInputElement::attach):
        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::attach):
        * html/HTMLVideoElement.cpp:
        (WebCore::HTMLVideoElement::attach):
        * loader/ImageLoader.cpp:
        (WebCore::ImageLoader::setImage):
        (WebCore::ImageLoader::updateFromElement):
        (WebCore::ImageLoader::notifyFinished):
        * page/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::accessibilityIsIgnored):
        (WebCore::AccessibilityRenderObject::addChildren):
        * page/DragController.cpp:
        (WebCore::getCachedImage):
        (WebCore::getImage):
        * platform/mac/PasteboardMac.mm:
        (WebCore::Pasteboard::writeImage):
        * rendering/RenderImage.h:
        (WebCore::toRenderImage):
        * wml/WMLImageElement.cpp:
        (WebCore::WMLImageElement::parseMappedAttribute):
        (WebCore::WMLImageElement::attach):

2009-02-04  Jungshik Shin  <jshin@chromium.org>

        Reviewed by Eric Seidel and Dave Hyatt.

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

        Make alternateFamilyName customized for Windows and Chromium.

        * platform/graphics/FontCache.cpp:
        (WebCore::alternateFamilyName):

2009-02-04  Jungshik Shin <jshin@chromium.org>

        Reviewed by Eric Seidel.

        This comes from Chromium patch (http://codereview.chromium.org/17624).

        Add m_disableFontFallback to UniscriberHelper class and set it
        to true when filling up glyph pages for non-BMP code points.
        When it's set true, UniscriberHelper does not do its own font
        fallback. Neither does it do glyph placement. Font fallback
        will be taken care of in the simple script font path and glyph
        placement is not necessary for simple scripts.

        Layout test is missing at the moment due to the lack of freely
        distributable font covering a non-BMP code page. A test page
        is available at http://i18nl10n.com/webkit/nonbmp2.html

        See also https://bugs.webkit.org/show_bug.cgi?id=23602

        * platform/graphics/chromium/GlyphPageTreeNodeChromiumWin.cpp:
        (WebCore::fillNonBMPGlyphs):
        * platform/graphics/chromium/UniscribeHelper.cpp:
        (WebCore::UniscribeHelper::UniscribeHelper):
        (WebCore::UniscribeHelper::shape):
        (WebCore::UniscribeHelper::fillShapes):
        * platform/graphics/chromium/UniscribeHelper.h:
        (WebCore::UniscribeHelper::setDisableFontFallback):

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

        Reviewed by David Hyatt.

        Remove some unnecessary #includes of RenderStyle.h

        * css/CSSPrimitiveValueMappings.h:
        * css/SVGCSSComputedStyleDeclaration.cpp:
        * dom/Node.h:
        * rendering/PointerEventsHitRules.h:
        * rendering/RenderImageGeneratedContent.h:
        * rendering/RenderMarquee.h:
        * rendering/RenderScrollbar.h:

2009-02-04  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=23657
        Clean up WebCore/storage IDLs.

        * storage/SQLError.idl: Changed to match spec.
        * storage/SQLResultSet.idl: Changed to match spec.
        * storage/SQLStatementCallback.idl: Removed.
        * storage/SQLStatementErrorCallback.idl: Removed.
        * storage/SQLTransactionCallback.idl: Removed.
        * storage/SQLTransactionErrorCallback.idl: Removed.

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

        Fix for https://bugs.webkit.org/show_bug.cgi?id=23734, blank content on blogs.msdn.com.

        Add debugging code that will catch the incorrect dirtying of a table section immediately if it happens
        during calcRowHeight or layoutRows.  This should make it possible to discover future bugs where table sections don't
        paint.

        The bug in blogs.msdn.com, which was caused by a bad setNeedsLayout in RenderLayer::updateScrollInfoAtferLayout.  Make
        sure to do only a local setNeedsLayout inside that function.

        Reviewed by Beth Dakin

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateScrollInfoAfterLayout):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::RenderObject):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::isSetNeedsLayoutForbidden):
        (WebCore::RenderObject::setNeedsLayoutIsForbidden):
        (WebCore::RenderObject::setNeedsLayout):
        (WebCore::RenderObject::setChildNeedsLayout):
        (WebCore::RenderObject::markContainingBlocksForLayout):
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::layout):
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::calcRowHeight):
        (WebCore::RenderTableSection::layoutRows):

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

        Reviewed by David Hyatt.

        Rename RenderStyle::Diff to StyleDifference and move it to
        RenderStyleConstants.h.

        * rendering/RenderBR.cpp:
        (WebCore::RenderBR::styleDidChange):
        * rendering/RenderBR.h:
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::styleWillChange):
        (WebCore::RenderBlock::styleDidChange):
        * rendering/RenderBlock.h:
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::styleWillChange):
        (WebCore::RenderBox::styleDidChange):
        * rendering/RenderBox.h:
        * rendering/RenderButton.cpp:
        (WebCore::RenderButton::styleWillChange):
        (WebCore::RenderButton::styleDidChange):
        * rendering/RenderButton.h:
        * rendering/RenderFieldset.cpp:
        (WebCore::RenderFieldset::styleDidChange):
        * rendering/RenderFieldset.h:
        * rendering/RenderFileUploadControl.cpp:
        (WebCore::RenderFileUploadControl::styleDidChange):
        * rendering/RenderFileUploadControl.h:
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::styleDidChange):
        * rendering/RenderInline.h:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::styleChanged):
        * rendering/RenderLayer.h:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::updateLayerCompositingState):
        (WebCore::RenderLayerCompositor::rebuildCompositingLayerTree):
        * rendering/RenderLayerCompositor.h:
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::styleDidChange):
        * rendering/RenderListBox.h:
        * rendering/RenderListItem.cpp:
        (WebCore::RenderListItem::styleDidChange):
        * rendering/RenderListItem.h:
        * rendering/RenderListMarker.cpp:
        (WebCore::RenderListMarker::styleWillChange):
        (WebCore::RenderListMarker::styleDidChange):
        * rendering/RenderListMarker.h:
        * rendering/RenderMenuList.cpp:
        (WebCore::RenderMenuList::styleDidChange):
        * rendering/RenderMenuList.h:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::setStyle):
        (WebCore::RenderObject::styleWillChange):
        (WebCore::RenderObject::styleDidChange):
        * rendering/RenderObject.h:
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::styleDidChange):
        * rendering/RenderReplaced.h:
        * rendering/RenderSVGGradientStop.cpp:
        (WebCore::RenderSVGGradientStop::styleDidChange):
        * rendering/RenderSVGGradientStop.h:
        * rendering/RenderSVGInlineText.cpp:
        (WebCore::RenderSVGInlineText::styleDidChange):
        * rendering/RenderSVGInlineText.h:
        * rendering/RenderScrollbarPart.cpp:
        (WebCore::RenderScrollbarPart::styleWillChange):
        (WebCore::RenderScrollbarPart::styleDidChange):
        * rendering/RenderScrollbarPart.h:
        * rendering/RenderSlider.cpp:
        (WebCore::RenderSlider::styleDidChange):
        * rendering/RenderSlider.h:
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::styleDidChange):
        * rendering/RenderTable.h:
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::styleWillChange):
        (WebCore::RenderTableCell::styleDidChange):
        * rendering/RenderTableCell.h:
        * rendering/RenderTableRow.cpp:
        (WebCore::RenderTableRow::styleWillChange):
        * rendering/RenderTableRow.h:
        * rendering/RenderText.cpp:
        (WebCore::RenderText::styleDidChange):
        * rendering/RenderText.h:
        (WebCore::RenderText::styleWillChange):
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::styleDidChange):
        * rendering/RenderTextControl.h:
        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::styleDidChange):
        * rendering/RenderTextControlSingleLine.h:
        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::styleDidChange):
        * rendering/RenderWidget.h:
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::diff):
        (WebCore::RenderStyle::setClip):
        * rendering/style/RenderStyle.h:
        * rendering/style/RenderStyleConstants.h:
        (WebCore::):

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

        Reviewed by David Hyatt.

        Move PseudoId enum out of RenderStyle and into RenderStyleConstants.h

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::matchRulesForList):
        (WebCore::CSSStyleSelector::initForStyleResolve):
        (WebCore::CSSStyleSelector::SelectorChecker::SelectorChecker):
        (WebCore::CSSStyleSelector::SelectorChecker::checkSelector):
        (WebCore::CSSStyleSelector::styleForElement):
        (WebCore::CSSStyleSelector::pseudoStyleForElement):
        (WebCore::CSSStyleSelector::checkSelector):
        (WebCore::CSSStyleSelector::SelectorChecker::checkOneSelector):
        (WebCore::CSSStyleSelector::SelectorChecker::checkScrollbarPseudoClass):
        (WebCore::CSSStyleSelector::applyProperty):
        * css/CSSStyleSelector.h:
        * dom/Node.cpp:
        (WebCore::Node::diff):
        * page/FrameView.cpp:
        (WebCore::FrameView::createScrollbar):
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paint):
        * rendering/MediaControlElements.cpp:
        (WebCore::MediaTextDisplayElement::MediaTextDisplayElement):
        (WebCore::MediaTimeDisplayElement::MediaTimeDisplayElement):
        (WebCore::MediaControlInputElement::MediaControlInputElement):
        (WebCore::MediaControlMuteButtonElement::MediaControlMuteButtonElement):
        (WebCore::MediaControlPlayButtonElement::MediaControlPlayButtonElement):
        (WebCore::MediaControlSeekButtonElement::MediaControlSeekButtonElement):
        (WebCore::MediaControlTimelineElement::MediaControlTimelineElement):
        (WebCore::MediaControlFullscreenButtonElement::MediaControlFullscreenButtonElement):
        * rendering/MediaControlElements.h:
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::styleDidChange):
        (WebCore::RenderBlock::updateBeforeAfterContent):
        (WebCore::RenderBlock::firstLineBlock):
        (WebCore::RenderBlock::updateFirstLetter):
        * rendering/RenderBlock.h:
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::isAfterContent):
        * rendering/RenderButton.cpp:
        (WebCore::RenderButton::updateBeforeAfterContent):
        * rendering/RenderButton.h:
        * rendering/RenderFileUploadControl.cpp:
        (WebCore::RenderFileUploadControl::createButtonStyle):
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::styleDidChange):
        (WebCore::isAfterContent):
        (WebCore::RenderInline::addChildIgnoringContinuation):
        (WebCore::RenderInline::splitInlines):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::createScrollbar):
        (WebCore::RenderLayer::updateScrollCornerStyle):
        (WebCore::RenderLayer::updateResizerStyle):
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::createScrollbar):
        * rendering/RenderMedia.cpp:
        (WebCore::RenderMedia::createPanel):
        (WebCore::RenderMedia::createTimelineContainer):
        * rendering/RenderMenuList.cpp:
        (WebCore::RenderMenuList::createScrollbar):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::selectionBackgroundColor):
        (WebCore::RenderObject::selectionForegroundColor):
        (WebCore::RenderObject::firstLineStyleSlowCase):
        (WebCore::RenderObject::getCachedPseudoStyle):
        (WebCore::RenderObject::getUncachedPseudoStyle):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::isAnonymousBlock):
        * rendering/RenderObjectChildList.cpp:
        (WebCore::RenderObjectChildList::destroyLeftoverChildren):
        (WebCore::beforeAfterContainer):
        (WebCore::RenderObjectChildList::invalidateCounters):
        (WebCore::RenderObjectChildList::updateBeforeAfterContent):
        * rendering/RenderObjectChildList.h:
        * rendering/RenderScrollbar.cpp:
        (WebCore::RenderScrollbar::getScrollbarPseudoStyle):
        (WebCore::pseudoForScrollbarPart):
        * rendering/RenderScrollbar.h:
        * rendering/RenderSlider.cpp:
        (WebCore::RenderSlider::createThumbStyle):
        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::createInnerTextStyle):
        (WebCore::RenderTextControlSingleLine::createResultsButtonStyle):
        (WebCore::RenderTextControlSingleLine::createCancelButtonStyle):
        (WebCore::RenderTextControlSingleLine::createScrollbar):
        * rendering/style/RenderStyle.cpp:
        (WebCore::pseudoBit):
        * rendering/style/RenderStyle.h:
        (WebCore::):
        * rendering/style/RenderStyleConstants.h:
        (WebCore::):

2009-02-04  David Kilzer  <ddkilzer@apple.com>

        CrashTracer: [REGRESSION] 53 crashes in Safari at com.apple.WebCore: WebCore::LegacyWebArchive::create + 2706

        <rdar://problem/6509514>

        Reviewed by Mark Rowe.

        * loader/archive/cf/LegacyWebArchive.cpp:
        (WebCore::LegacyWebArchive::create): Fix it correctly this time.
        Check for the value returned from WebCore::IconDatabase::iconForPageURL(),
        not WebCore::Image::data().

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

        Rename removeFromObjectLists and move it into RenderBox, since it only applies to boxes.

        Reviewed by Adam Roben

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::removeFloatingOrPositionedChildFromBlockLists):
        (WebCore::RenderBox::styleWillChange):
        * rendering/RenderBox.h:
        * rendering/RenderContainer.cpp:
        (WebCore::RenderContainer::removeChild):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::styleWillChange):
        * rendering/RenderObject.h:
        * rendering/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::removeChild):

2009-02-04  Jeremy Moskovich  <jeremy@chromium.org>

        Reviewed by Dave Hyatt.

        https://bugs.webkit.org/show_bug.cgi?id=23471
        Fix text-overflow:ellipsis; for RTL case.

        Test: fast/css/text-overflow-ellipses.html

        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::placeEllipsisBox): Add support for rtl placement.
        (WebCore::InlineTextBox::paintDecoration): Correctly draw decorations
        for rtl truncation.

2009-02-04  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=23700
        Upstream local changes to due to unforking of SimpleFontData
        (corresponds to Chromium check-in http://src.chromium.org/viewvc/chrome?view=rev&revision=8646).

        * platform/graphics/chromium/GlyphPageTreeNodeChromiumWin.cpp:
        (WebCore::fillBMPGlyphs): Removed extra checks for ZWS chars.

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

        <rdar://problem/6554115> REGRESSION (r40475): World leak (JS global object) after viewing a photo on Facebook

        Fix a ginormous leak. (GINORMOUS!) Make sure to disconnect the event listeners attached to the Document,
        because, like, they point to a lot of stuff... like ... everything...

        Reviewed by Darin Adler

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

2009-02-04  Darin Fisher  <darin@chromium.org>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=23731
        Add JSCCustom and V8Custom as extended IDL attributes

        This helps avoid having to add #ifdefs to the IDL files to support V8 bindings.

        * bindings/scripts/CodeGeneratorJS.pm:
        * dom/Document.idl:
        * dom/Node.idl:
        * svg/SVGPathSegList.idl:
        * svg/SVGPointList.idl:
        * svg/SVGTransformList.idl:

2009-02-04  Dan Bernstein  <mitz@apple.com>

        - build fix

        * rendering/RenderImageGeneratedContent.h:

2009-02-04  miggilin  <mr.diggilin@gmail.com>

        Reviewed by Kevin Ollivier.

        Switch to using a ref-counted wxFont pointer for FontPlatformData to fix a crash
        with assigning to uninitialized HashTable buckets.

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

        * platform/graphics/SimpleFontData.h:
        (WebCore::SimpleFontData::getWxFont):
        * platform/graphics/wx/FontPlatformData.h:
        (WebCore::):
        (WebCore::FontPlatformData::FontPlatformData):
        (WebCore::FontPlatformData::font):
        (WebCore::FontPlatformData::operator==):
        * platform/graphics/wx/FontPlatformDataWx.cpp:
        (WebCore::FontPlatformData::FontPlatformData):
        (WebCore::FontPlatformData::computeHash):
        (WebCore::FontPlatformData::~FontPlatformData):
        * platform/graphics/wx/SimpleFontDataWx.cpp:
        (WebCore::SimpleFontData::platformInit):
        (WebCore::SimpleFontData::determinePitch):
        (WebCore::SimpleFontData::platformWidthForGlyph):
        * platform/wx/wxcode/gtk/non-kerned-drawing.cpp:
        (WebCore::drawTextWithSpacing):

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

        Fix a crash in generated content when a generated image with an already-cached background image gets
        created.  It's not completely clear how to reproduce this crash.

        Reviewed by Adam Roben

        * rendering/RenderImageGeneratedContent.h:
        (WebCore::RenderImageGeneratedContent::imagePtr):

2009-02-04  Simon Hausmann  <simon.hausmann@nokia.com>

        Unreviewed Qt build fix.

        Changed ASSERT(image) to ASSERT(!image.isNull()).

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

2009-02-04  Trenton Schulz <trenton.schulz@nokia.com>

        Reviewed by Simon Hausmann.

        Fix implementation of PluginViewMac::invalidateRect to update only the
        specified rect, not the entire browser window.

        * plugins/mac/PluginViewMac.cpp:
        (WebCore::PluginView::invalidateRect):

2009-02-04  Holger Hans Peter Freyther  <zecke@selfish.org>

        Rubber stamped by Mark Rowe.

        FramePrivate was removed in r40024 remove the forward
        declaration as well.

        * page/Frame.h:

2009-02-04  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Sam Weinig.

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

        Make isFrameSet virtual and by default return false. Reimplement
        it in HTMLDocument.

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

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

        Reviewed by John Sullivan.

        <rdar://problem/6554092> Slow script dialog starts coming up over and over again

        Work around <rdar://problem/6554067> by consuming any exceptions that are
        thrown by _web_localizedDescription

        * platform/network/mac/ResourceErrorMac.mm:
        (WebCore::ResourceError::platformLazyInit):

2009-02-03  David Hyatt  <hyatt@apple.com>

        Move the isRenderInline checks for clientWidth/Height and scrollWidth/Height to the DOM element
        versions of the functions.  Since internal render tree usage doesn't ever (incorrectly) call these
        functions on RenderInlines, this manages to get virtual function calls out of contentWidth/Height and
        availableWidth/Height.

        Reviewed by Mark Rowe

        * dom/Element.cpp:
        (WebCore::Element::clientWidth):
        (WebCore::Element::clientHeight):
        (WebCore::Element::scrollWidth):
        (WebCore::Element::scrollHeight):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::clientWidth):
        (WebCore::RenderBox::clientHeight):
        (WebCore::RenderBox::scrollWidth):
        (WebCore::RenderBox::scrollHeight):

2009-02-03  Brad Garcia  <bgarcia@google.com>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=20443
        Remove call to canResize when trying to determine if pointer
        is within a frame.
        Also removed the implementation of canResize as it is no longer used.

        Test: fast/frames/frame-dead-region.html

        * rendering/RenderFrameSet.cpp:
        (WebCore::RenderFrameSet::nodeAtPoint):
        * rendering/RenderFrameSet.h:

2009-02-03  David Hyatt  <hyatt@apple.com>

        Reduce the number of calls to virtualChildren (indirectly made via RenderObject::firstChild()).
        This is a small gain on the PLT.

        Reviewed by Mark Rowe

        * rendering/bidi.cpp:
        (WebCore::inlineWidth):
        (WebCore::bidiNext):

2009-02-03  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dave Hyatt

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

        Fix selection repainting to do container-relative repaints. RenderView now
        repaints the selection using the containerForRepaint() for each RenderSelectionInfo.
        selectionRect() is now a wrapper for selectionRectForRepaint() with no container.

        Pull SelectionInfo out of RenderObject.h, and BlockSelectionInfo out
        of RenderBlock.h and move them into RenderSelectionInfo.h, with some
        sharing and refactoring.

        RenderBlock::selectionGapRectsForRepaint() is not yet container-aware.

        * GNUmakefile.am:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * rendering/RenderBR.h:
        (WebCore::RenderBR::selectionRectForRepaint):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::selectionGapRectsForRepaint):
        * rendering/RenderBlock.h:
        (WebCore::RenderBlock::selectionRectForRepaint):
        * rendering/RenderListMarker.cpp:
        (WebCore::RenderListMarker::paint):
        (WebCore::RenderListMarker::selectionRectForRepaint):
        * rendering/RenderListMarker.h:
        * rendering/RenderObject.h:
        (WebCore::RenderObject::selectionRect):
        (WebCore::RenderObject::selectionRectForRepaint):
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::selectionRectForRepaint):
        * rendering/RenderReplaced.h:
        * rendering/RenderSVGInlineText.cpp:
        (WebCore::RenderSVGInlineText::absoluteRects):
        (WebCore::RenderSVGInlineText::absoluteQuads):
        (WebCore::RenderSVGInlineText::selectionRectForRepaint):
        (WebCore::RenderSVGInlineText::computeRepaintRectForRange):
        * rendering/RenderSVGInlineText.h:
        * rendering/RenderSelectionInfo.h: Added.
        (WebCore::RenderSelectionInfoBase::RenderSelectionInfoBase):
        (WebCore::RenderSelectionInfoBase::object):
        (WebCore::RenderSelectionInfoBase::repaintContainer):
        (WebCore::RenderSelectionInfoBase::state):
        (WebCore::RenderSelectionInfo::RenderSelectionInfo):
        (WebCore::RenderSelectionInfo::repaint):
        (WebCore::RenderSelectionInfo::rect):
        (WebCore::RenderBlockSelectionInfo::RenderBlockSelectionInfo):
        (WebCore::RenderBlockSelectionInfo::repaint):
        (WebCore::RenderBlockSelectionInfo::block):
        (WebCore::RenderBlockSelectionInfo::rects):
        * rendering/RenderText.cpp:
        (WebCore::RenderText::selectionRectForRepaint):
        * rendering/RenderText.h:
        * rendering/RenderView.cpp:
        (WebCore::RenderView::selectionBounds):
        (WebCore::RenderView::setSelection):
        * rendering/RenderView.h:
        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::paint):

2009-02-03  David Hyatt  <hyatt@apple.com>

        Add inline capacity back to CSSMutableStyleDeclaration now that the bug in Vector has been fixed.

        Reviewed by Darin Adler & Sam Weinig

        * css/CSSMutableStyleDeclaration.cpp:
        (WebCore::CSSMutableStyleDeclaration::removePropertiesInSet):
        * css/CSSMutableStyleDeclaration.h:

2009-02-03  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=13490
        Implement execCommand("styleWithCSS", ...)

        Determine whether or not to use HTML formatting tags for styling on the new
        boolean on Editor instead of whether or not the document is quirks mode.

        * editing/ApplyStyleCommand.cpp:
        (WebCore::StyleChange::StyleChange):
        (WebCore::StyleChange::init):
        (WebCore::ApplyStyleCommand::applyBlockStyle):
        (WebCore::ApplyStyleCommand::applyTextDecorationStyle):
        (WebCore::ApplyStyleCommand::addInlineStyleIfNeeded):
        * editing/Editor.cpp:
        (WebCore::Editor::Editor):
        (WebCore::Editor::clear):
        * editing/Editor.h:
        (WebCore::Editor::setShouldStyleWithCSS):
        (WebCore::Editor::shouldStyleWithCSS):
        * editing/EditorCommand.cpp:
        (WebCore::executeStyleWithCSS):
        (WebCore::stateStyleWithCSS):
        (WebCore::CommandEntry::):

2009-02-03  Dirk Schulze  <krit@webkit.org>

        Reviewed by Sam Weinig.

        This is a follow up of r40546. Call toImage() once speeds up ImageBuffer::getImageData()

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

2009-02-03  Anders Carlsson  <andersca@apple.com>

        Reviewed by Kevin Decker.

        - Fix for <rdar://problem/6549743>

        On Tiger, create an autorelease pool before creating the NSGraphicsContext and drain it immediately
        after the call to -[NSView displayRectIgnoringOpacity:inContext:].

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

2009-02-03  David Hyatt  <hyatt@apple.com>

        Back this change out since it is causing layout tests to crash.  There is something subtle going on
        here.

        Reviewed by Darin Adler

        * css/CSSMutableStyleDeclaration.cpp:
        (WebCore::CSSMutableStyleDeclaration::removePropertiesInSet):
        * css/CSSMutableStyleDeclaration.h:

2009-02-03  David Hyatt  <hyatt@apple.com>

        Give the properties vector of mutable style declarations an initial inline capacity to reduce malloc churn.

        Reviewed by Sam Weinig

        * css/CSSMutableStyleDeclaration.cpp:
        (WebCore::CSSMutableStyleDeclaration::removePropertiesInSet):
        * css/CSSMutableStyleDeclaration.h:

2009-02-03  David Hyatt  <hyatt@apple.com>

        Avoid creating extra copies of NSURLRequests for non-HTTP URLs.  Only mark platform requests
        as needing updating when HTTP fields change if the scheme of the URL is actually HTTP or HTTPS.
        Thus cuts down significantly on the number of copied NSURLRequests and is about a 1% gain on the PLT.

        Reviewed by Darin Adler

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::addExtraFieldsToRequest):
        * platform/KURL.cpp:
        (WebCore::KURL::invalidate):
        (WebCore::KURL::KURL):
        * platform/KURL.h:
        (WebCore::KURL::isHTTPOrHTTPS):
        * platform/network/ResourceRequestBase.cpp:
        (WebCore::ResourceRequestBase::setCachePolicy):
        (WebCore::ResourceRequestBase::setTimeoutInterval):
        (WebCore::ResourceRequestBase::setMainDocumentURL):
        (WebCore::ResourceRequestBase::setHTTPMethod):
        (WebCore::ResourceRequestBase::setHTTPHeaderField):
        (WebCore::ResourceRequestBase::setResponseContentDispositionEncodingFallbackArray):
        (WebCore::ResourceRequestBase::setHTTPBody):
        (WebCore::ResourceRequestBase::setAllowHTTPCookies):

2009-02-03  Xan Lopez  <xan@gnome.org>

        Reviewed by Holger Freyther.

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

        Add manual test for floating divs with scrollbars.

        * manual-tests/gtk/floatingdiv.html: Added.

2009-02-03  Xan Lopez  <xan@gnome.org>

        Reviewed by Holger Freyther.

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

        There's no need to hold an extra ref to the scrollbar, calling
        setPlatformWidget takes ownership of it.

        Also do not disconnect the signals when destroying the widget,
        it's superfluous.

        * platform/gtk/ScrollbarGtk.cpp:
        (ScrollbarGtk::ScrollbarGtk):
        * platform/gtk/ScrollbarGtk.h:

2009-02-03  Xan Lopez  <xan@gnome.org>

        Reviewed by Holger Freyther.

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

        Declare scrollBar as GtkWidget* to avoid needless
        casting.

        * platform/gtk/ScrollbarGtk.cpp:
        (ScrollbarGtk::ScrollbarGtk):
        (ScrollbarGtk::~ScrollbarGtk):

2009-02-03  Xan Lopez  <xan@gnome.org>

        Reviewed by Holger Freyther.

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

        Properly calculate the scrollbar location for their
        usage in RenderLayout.

        * platform/gtk/ScrollbarGtk.cpp:
        (ScrollbarGtk::frameRectsChanged):

2009-02-03  David Hyatt  <hyatt@apple.com>

        Rename addLineBoxRects to absoluteRectsForRange, and do the same thing for the corresponding quads methods.  Move the RenderContainer implementations
        of these methods up to RenderObject.

        Reviewed by Beth Dakin

        * bindings/objc/DOM.mm:
        (-[DOMNode lineBoxRects]):
        * dom/Range.cpp:
        (WebCore::Range::addLineBoxRects):
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::drawNodeHighlight):
        * rendering/RenderContainer.cpp:
        * rendering/RenderContainer.h:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::absoluteRectsForRange):
        (WebCore::RenderObject::absoluteQuadsForRange):
        * rendering/RenderObject.h:
        * rendering/RenderText.cpp:
        (WebCore::RenderText::absoluteRectsForRange):
        (WebCore::RenderText::absoluteQuadsForRange):
        * rendering/RenderText.h:

2009-02-03  Dirk Schulze  <krit@webkit.org>

        Reviewed by Sam Weinig and Oliver Hunt.

        Added getImageData() support for QtWebKit.

        [QT] lacks getImageData / putImageData support in Canvas
        https://bugs.webkit.org/show_bug.cgi?id=22186

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

2009-02-03  Eric Roman  <eroman@chromium.org>

        Reviewed by Holger Freyther.

        Fix FrameChromium.cpp following r40473 which moved Frame::adjustPageHeight to FrameView::adjustPageHeight.

        * page/chromium/FrameChromium.cpp:
        (WebCore::computePageRectsForFrame):

2009-02-02  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dave Hyatt

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

        Hook accelerated compositing into RenderLayer.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::RenderLayer):
        (WebCore::RenderLayer::~RenderLayer):
        Init and clean up backing and the hasCompositingDescendant bit.

        (WebCore::RenderLayer::compositor):
        Shortcut to get to the RenderLayerCompositor.

        (WebCore::RenderLayer::updateLayerPositions):
        We need to let full repaints propagate to all compositing layers, and
        update the backing after layout here.

        (WebCore::RenderLayer::transparentAncestor):
        (WebCore::transparencyClipBox):
        (WebCore::RenderLayer::beginTransparencyLayers):
        Account for the fact that opacity may be rendered via the compositing
        layer sometimes.

        (WebCore::RenderLayer::addChild):
        (WebCore::RenderLayer::removeChild):
        (WebCore::RenderLayer::removeOnlyThisLayer):
        Tell the compositor when the RenderLayer hierarchy changes.

        (WebCore::RenderLayer::scrollToOffset):
        Update layer geometry after scrolling.

        (WebCore::RenderLayer::paintLayer):
        We short-circuit painting on composited layers, because these layers
        are painted on a callback from the compositing system.

        (WebCore::RenderLayer::hitTestLayer):
        Only apply transforms if we are rendering them in software.

        (WebCore::RenderLayer::localBoundingBox):
        (WebCore::RenderLayer::boundingBox):
        (WebCore::RenderLayer::absoluteBoundingBox):
        Refactor bounding box code that we can compute local, and ancestor-relative
        bounding box, as well as absolute.

        (WebCore::RenderLayer::ensureBacking):
        (WebCore::RenderLayer::clearBacking):
        RenderLayerBacking creation and destruction.

        (WebCore::RenderLayer::setParent):
        Tell the compositor when the RenderLayer hierarchy changes.

        (WebCore::RenderLayer::dirtyZOrderLists):
        (WebCore::RenderLayer::dirtyStackingContextZOrderLists):
        (WebCore::RenderLayer::dirtyOverflowList):
        When the z-order and overflow lists change, we need to tell the
        compositor that the composited layers need to be rejiggered soon.

        (WebCore::RenderLayer::updateZOrderLists):
        Whitespace cleanup.

        (WebCore::RenderLayer::setBackingNeedsRepaint):
        (WebCore::RenderLayer::setBackingNeedsRepaintInRect):
        Dirty composited layer contents for painting.

        (WebCore::RenderLayer::styleChanged):
        Update the layer backing after style changes.

        * rendering/RenderLayer.h:
        (WebCore::RenderLayer::isComposited):
        (WebCore::RenderLayer::backing):
        Accessors for testing and getting the backing for this RenderLayer.

        (WebCore::RenderLayer::paintsWithTransparency):
        (WebCore::RenderLayer::paintsWithTransform):
        Transform and opacity can be applied via the compositing layer, or rendered
        in software. These methods tell us if we need to account for them in the
        non-compositing path.

        (WebCore::RenderLayer::hasCompositingDescendant):
        (WebCore::RenderLayer::setHasCompositingDescendant):
        Maintain a bit to tell if this layer has composited descendants.

2009-02-03  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dave Hyatt

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

        Hook up accelerated compositing layers the native
        view system on Mac.

        * WebCore.base.exp:
        Export new Page methods.

        * page/ChromeClient.h:
        (WebCore::ChromeClient::attachRootGraphicsLayer):
        (WebCore::ChromeClient::setNeedsOneShotDrawingSynchronization):
        New methods for attaching/detaching the root GraphicsLayer, and
        synchronizing layer changes with window drawing.

        * page/FrameView.h:
        * page/FrameView.cpp:
        (WebCore::FrameView::updateCompositingLayers):
        (WebCore::FrameView::setNeedsOneShotDrawingSynchronization):
        (WebCore::FrameView::didMoveOnscreen):
        (WebCore::FrameView::willMoveOffscreen):
        New methods to update the compositing layer hierarchy,
        and pass-throughs to the RenderLayerCompositor.

        (WebCore::FrameView::layout):
        Update compositing layers after layout() and updateLayerPositions().

        * page/Page.cpp:
        (WebCore::Page::didMoveOnscreen):
        (WebCore::Page::willMoveOffscreen):
        * page/Page.h:
        New methods to allow the native view system to tell the Page when it
        starts to be presented on-screen, and when it will be hidden.

        * rendering/RenderLayerCompositor.h:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::updateLayerCompositingState):
        (WebCore::RenderLayerCompositor::didMoveOnscreen):
        (WebCore::RenderLayerCompositor::willMoveOffscreen):
        (WebCore::RenderLayerCompositor::ensureRootPlatformLayer):
        Rename 'attached' methods to 'moveOnscreen/moveOffscreen' to match
        the calls through from Page, FrameView.

        (WebCore::RenderLayerCompositor::layerWillBeRemoved):
        Dont' try to repaint or update layers if the document is being torn
        down.

        * rendering/RenderView.cpp:
        (WebCore::RenderView::didMoveOnscreen):
        (WebCore::RenderView::willMoveOffscreen):
        * rendering/RenderView.h:
        New methods.

2009-02-03  Dirk Schulze  <krit@webkit.org>

        Reviewed by Holger Hans Peter Freyther.

        Fixed getImageData and putImageData and respect pre-
        multiplied colors.

        Cairo's ImageBuffer::getImageData() does not handle alpha=0 case correctly
        https://bugs.webkit.org/show_bug.cgi?id=21575

        * platform/graphics/cairo/ImageBufferCairo.cpp:
        (WebCore::ImageBuffer::getImageData):
        (WebCore::ImageBuffer::putImageData):

2009-02-03  Dan Bernstein  <mitz@apple.com>

        Reviewed by Brady Eidson.

        - fix <rdar://problem/6550530> REGRESSION (r40508): Window opened with window.open has no initial history item (global and back/forward)

        Test: fast/history/window-open.html

        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::createWindow): Pass the missing lockBackForwardList parameter
        to FrameLoader::changeLocation().

2009-02-03  Adam Treat  <adam.treat@torchmobile.com>

        Fix the Qt build after r40536.

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

2009-02-03  Dan Bernstein  <mitz@apple.com>

        - fix -Wmissing-prototypes builds

        * loader/WorkerThreadableLoader.cpp:
        (WebCore::workerContextDidSendData): Marked this function static.
        (WebCore::workerContextDidReceiveResponse): Ditto.
        (WebCore::workerContextDidReceiveData): Ditto.
        (WebCore::workerContextDidFinishLoading): Ditto.
        (WebCore::workerContextDidFail): Ditto.
        (WebCore::workerContextDidGetCancelled): Ditto.
        (WebCore::workerContextDidReceiveAuthenticationCancellation): Ditto.

2009-02-03  David Kilzer  <ddkilzer@apple.com>

        CrashTracer: [REGRESSION] 53 crashes in Safari at com.apple.WebCore: WebCore::LegacyWebArchive::create + 2706

        <rdar://problem/6509514>

        Reviewed by Adam Roben.

        * loader/archive/cf/LegacyWebArchive.cpp:
        (WebCore::LegacyWebArchive::create): Null check the value returned
        from WebCore::IconDatabase::iconForPageURL().

2009-02-03  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Tor Arne Vestbø.

        Fix conversion of QByteArray to JavaScript and back. Instead of
        converting it to a String (data loss!) we now map it to JSByteArray.

        * bridge/qt/qt_runtime.cpp:
        (JSC::Bindings::):
        (JSC::Bindings::valueRealType): Added JSByteArray as converstion type.
        (JSC::Bindings::convertValueToQVariant): Convert from JSByteArray to
        QVariant(QByteArray).
        (JSC::Bindings::convertQVariantToValue): Convert from
        QVariant::ByteArray to jsByteArray.

2009-02-03  Alexey Proskuryakov  <ap@webkit.org>

        Build fix.

        * GNUmakefile.am: Removed WorkerTask.{h,cpp}.

2009-02-03  Dmitry Titov  <dimich@chromium.org>

        Reviewed by Alexey Proskuryakov.

        https://bugs.webkit.org/show_bug.cgi?id=22718
        Implement WindowTimers interface in Workers.

        This patch moves timeoutID from Document to ScriptExecutionContext
        and exposes JS methods setTimeout/setInterval/clearTimeout/clearInterval inside of a Worker.
        Also added a test for those methods.

        Test: fast/workers/worker-timeout.html

        * bindings/js/JSWorkerContextCustom.cpp:
        (WebCore::setTimeoutOrInterval):
        Creates ScheduledAction and calls WorkerContext::installTimeout to actually add a timer.

        (WebCore::JSWorkerContext::setTimeout):
        (WebCore::JSWorkerContext::clearTimeout):
        (WebCore::JSWorkerContext::setInterval):
        (WebCore::JSWorkerContext::clearInterval):
        Added methods exposed to JS.

        * dom/Document.cpp:
        * dom/Document.h:
        * dom/ScriptExecutionContext.cpp:
        (WebCore::ScriptExecutionContext::addTimeout):
        (WebCore::ScriptExecutionContext::removeTimeout):
        (WebCore::ScriptExecutionContext::findTimeout):
        * dom/ScriptExecutionContext.h:
        The timerID map moves from Document to ScriptExecutionContext,
        to be available to Document and to WorkerContext.

        * dom/WorkerContext.cpp:
        (WebCore::WorkerContext::installTimeout): Adds a DOMTimeout.
        (WebCore::WorkerContext::removeTimeout): Removes a DOMTimeout.
        * dom/WorkerContext.h:

        * page/DOMTimer.cpp:
        (WebCore::DOMTimer::DOMTimer):
        (WebCore::DOMTimer::~DOMTimer):
        (WebCore::DOMTimer::removeById):
        Code change here reflects move of timeoutID map to the ScriptExecutionContext.
        Some checks and casts are no longer needed.

2009-02-03  Dmitry Titov  <dimich@chromium.org>

        Reviewed by Alexey Proskuryakov.

        https://bugs.webkit.org/show_bug.cgi?id=23560
        Implement SharedTimer for Workers.

        * dom/WorkerRunLoop.cpp:
        Added private class WorkerSharedTimer that implements SharedTimer interface for worker threads.
        (WebCore::WorkerSharedTimer::WorkerSharedTimer):
        (WebCore::WorkerSharedTimer::setFiredFunction):
        (WebCore::WorkerSharedTimer::setFireTime):
        (WebCore::WorkerSharedTimer::stop):
        (WebCore::WorkerSharedTimer::isActive):
        (WebCore::WorkerSharedTimer::fireTime):
        (WebCore::WorkerSharedTimer::fire):
        (WebCore::WorkerRunLoop::WorkerRunLoop):
        Initializes a WorkerSharedTimer instance.
        (WebCore::WorkerRunLoop::~WorkerRunLoop):
        The destructor is here so compiler is ok with having OwnPtr<WorkerSharedTimer> in .h file w/o defining WorkerSharedTimer.
        (WebCore::WorkerRunLoop::run):
        Set/reset shared timer interface on ThreadTimers, use MessageQueue::waitForMessageTimed() if timer is active.
        * dom/WorkerRunLoop.h:
        Add member of type OwnPtr<WorkerSharedTimer>

2009-02-03  Steve Falkenburg  <sfalken@apple.com>

        Build fix.

        * WebCore.vcproj/WebCore.vcproj:

2009-02-03  Alexey Proskuryakov  <ap@webkit.org>

        Windows build fix.

        * dom/CrossThreadCopier.h: Changed forward declarations to use struct instead of class where
        appropriate.

2009-02-02  David Levin  <levin@chromium.org>

        Reviewed by Alexey Proskuryakov.

        Bug 23636: Make the async api of ThreadableLoader functional for the worker context.
        <https://bugs.webkit.org/show_bug.cgi?id=23636>

        Enable the async portion of ThreadableLoader for workers.

        No observable change in behavior, so no test.

        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.scons:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * dom/CrossThreadCopier.h:
        * dom/GenericWorkerTask.h:
        * dom/WorkerThread.cpp:
        * loader/ThreadableLoader.cpp:
        (WebCore::ThreadableLoader::create):
        * loader/ThreadableLoaderClient.h:
        (WebCore::ThreadableLoaderClient::didFinishLoading):
        * loader/ThreadableLoaderClientWrapper.h: Added.
        (WebCore::ThreadableLoaderClientWrapper::create):
        (WebCore::ThreadableLoaderClientWrapper::clearClient):
        (WebCore::ThreadableLoaderClientWrapper::didSendData):
        (WebCore::ThreadableLoaderClientWrapper::didReceiveResponse):
        (WebCore::ThreadableLoaderClientWrapper::didReceiveData):
        (WebCore::ThreadableLoaderClientWrapper::didFinishLoading):
        (WebCore::ThreadableLoaderClientWrapper::didFail):
        (WebCore::ThreadableLoaderClientWrapper::didGetCancelled):
        (WebCore::ThreadableLoaderClientWrapper::didReceiveAuthenticationCancellation):
        (WebCore::ThreadableLoaderClientWrapper::ThreadableLoaderClientWrapper):
        * loader/WorkerThreadableLoader.cpp: Added.
        (WebCore::WorkerThreadableLoader::WorkerThreadableLoader):
        (WebCore::WorkerThreadableLoader::~WorkerThreadableLoader):
        (WebCore::WorkerThreadableLoader::cancel):
        (WebCore::WorkerThreadableLoader::MainThreadBridge::MainThreadBridge):
        (WebCore::WorkerThreadableLoader::MainThreadBridge::~MainThreadBridge):
        (WebCore::WorkerThreadableLoader::MainThreadBridge::mainThreadCreateLoader):
        (WebCore::WorkerThreadableLoader::MainThreadBridge::mainThreadDestroy):
        (WebCore::WorkerThreadableLoader::MainThreadBridge::destroy):
        (WebCore::WorkerThreadableLoader::MainThreadBridge::mainThreadCancel):
        (WebCore::WorkerThreadableLoader::MainThreadBridge::cancel):
        (WebCore::WorkerThreadableLoader::MainThreadBridge::clearClientWrapper):
        (WebCore::workerContextDidSendData):
        (WebCore::WorkerThreadableLoader::MainThreadBridge::didSendData):
        (WebCore::workerContextDidReceiveResponse):
        (WebCore::WorkerThreadableLoader::MainThreadBridge::didReceiveResponse):
        (WebCore::workerContextDidReceiveData):
        (WebCore::WorkerThreadableLoader::MainThreadBridge::didReceiveData):
        (WebCore::workerContextDidFinishLoading):
        (WebCore::WorkerThreadableLoader::MainThreadBridge::didFinishLoading):
        (WebCore::workerContextDidFail):
        (WebCore::WorkerThreadableLoader::MainThreadBridge::didFail):
        (WebCore::workerContextDidGetCancelled):
        (WebCore::WorkerThreadableLoader::MainThreadBridge::didGetCancelled):
        (WebCore::workerContextDidReceiveAuthenticationCancellation):
        (WebCore::WorkerThreadableLoader::MainThreadBridge::didReceiveAuthenticationCancellation):
        * loader/WorkerThreadableLoader.h: Added.
        (WebCore::WorkerThreadableLoader::create):
        (WebCore::WorkerThreadableLoader::refThreadableLoader):
        (WebCore::WorkerThreadableLoader::derefThreadableLoader):

2009-02-02  David Levin  <levin@chromium.org>

        Reviewed by Alexey Proskuryakov.

        Bug 23636: Make the async api of ThreadableLoader functional for the worker context.
        <https://bugs.webkit.org/show_bug.cgi?id=23636>

        No observable change in behavior, so no test.

        * WebCore.xcodeproj/project.pbxproj:
        * dom/Worker.cpp:
        * dom/Worker.h:
        * dom/WorkerContext.cpp:
        (WebCore::WorkerContext::addMessage):
        (WebCore::WorkerContext::postTask):
        (WebCore::WorkerContext::postTaskToWorkerObject):
        * dom/WorkerContext.h:
        * dom/WorkerMessagingProxy.cpp:
        (WebCore::MessageWorkerContextTask::performTask):
        (WebCore::WorkerMessagingProxy::postMessageToWorkerContext):
        (WebCore::WorkerMessagingProxy::postTaskToWorkerContext):
        Expose postTaskToWorkerContext for use by the worker object thread.

        (WebCore::WorkerMessagingProxy::postTaskToWorkerObject):
        Change the name of postTaskToParentContext to postTaskToWorkerObject for consistency
        with postMessageToWorkerObject.

        * dom/WorkerMessagingProxy.h:
        * dom/WorkerRunLoop.cpp:
        (WebCore::WorkerRunLoop::run):
        (WebCore::WorkerRunLoop::postTask):
        * dom/WorkerRunLoop.h:
        * dom/WorkerTask.cpp: Removed.
        * dom/WorkerTask.h: Removed.
        Removed WorkerTask and replaced with the existing ScriptExecutionContext::Task.

        The resulted in the class going away along with an adapter that made
        a ScriptExecutionContext::Task look like a WorkerTask.

        * dom/WorkerThread.cpp:
        * dom/WorkerThread.h:

2009-02-02  David Levin  <levin@chromium.org>

        Reviewed by Alexey Proskuryakov.

        Bug 23618: Templated worker tasks should be more error proof to use.
        <https://bugs.webkit.org/show_bug.cgi?id=23618>

        Add the generic worker tasks templates needed for the WorkerThreadableLoader.

        No observable change in behavior, so no test.

        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.scons:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * dom/CrossThreadCopier.cpp: Added.
        * dom/CrossThreadCopier.h: Added.
        (WebCore::CrossThreadCopierPassThrough::copy):
        * dom/GenericWorkerTask.h:
        Stop doing the WorkerMessagingProxy::askedToTerminate call automatically
        in performTask because was not obvious that it would be done and not always needed.

        (WebCore::GenericWorkerTask1::create):
        (WebCore::GenericWorkerTask1::GenericWorkerTask1):
        (WebCore::GenericWorkerTask1::performTask):
        (WebCore::GenericWorkerTask2::create):
        (WebCore::GenericWorkerTask2::GenericWorkerTask2):
        (WebCore::GenericWorkerTask2::performTask):
        (WebCore::GenericWorkerTask3::create):
        (WebCore::GenericWorkerTask3::GenericWorkerTask3):
        (WebCore::GenericWorkerTask3::performTask):
        (WebCore::GenericWorkerTask4::create):
        (WebCore::GenericWorkerTask4::GenericWorkerTask4):
        (WebCore::GenericWorkerTask4::performTask):
        (WebCore::GenericWorkerTask5::create):
        (WebCore::GenericWorkerTask5::GenericWorkerTask5):
        (WebCore::GenericWorkerTask5::performTask):
        (WebCore::GenericWorkerTask6::create):
        (WebCore::GenericWorkerTask6::GenericWorkerTask6):
        (WebCore::GenericWorkerTask6::performTask):
        (WebCore::GenericWorkerTask7::create):
        (WebCore::GenericWorkerTask7::GenericWorkerTask7):
        (WebCore::GenericWorkerTask7::performTask):
        (WebCore::createCallbackTask):
        * dom/WorkerContext.cpp:
        (WebCore::addMessageTask):
        (WebCore::WorkerContext::addMessage):
        * dom/WorkerMessagingProxy.h:
        (WebCore::WorkerMessagingProxy::askedToTerminate):

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

        Reviewed by David "The Barnabas Jones" Hyatt.

        Move removeChildNode, appendChildNode and insertChildNode from
        RenderContainer into RenderObjectChildList.  Make moveChildNode
        static in RenderBlock, as that was the only user.

        * rendering/RenderBlock.cpp:
        (WebCore::moveChild):
        (WebCore::RenderBlock::makeChildrenNonInline):
        (WebCore::RenderBlock::removeChild):
        (WebCore::RenderBlock::handleRunInChild):
        * rendering/RenderContainer.cpp:
        (WebCore::RenderContainer::addChild):
        (WebCore::RenderContainer::removeChild):
        * rendering/RenderContainer.h:
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::splitInlines):
        (WebCore::RenderInline::splitFlow):
        (WebCore::RenderInline::childBecameNonInline):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::handleDynamicFloatPositionChange):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::createsAnonymousWrapper):
        * rendering/RenderObjectChildList.cpp:
        (WebCore::updateListMarkerNumbers):
        (WebCore::RenderObjectChildList::removeChildNode):
        (WebCore::RenderObjectChildList::appendChildNode):
        (WebCore::RenderObjectChildList::insertChildNode):
        * rendering/RenderObjectChildList.h:
        * rendering/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::addChild):
        (WebCore::RenderSVGContainer::removeChild):
        * rendering/RenderSVGContainer.h:
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::removeChild):
        * rendering/RenderTable.h:
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::removeChild):
        * rendering/RenderTableSection.h:

2009-02-02  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin Alder.

        https://bugs.webkit.org/show_bug.cgi?id=23697
        Leaks seen on Worker tests

        * dom/WorkerMessagingProxy.cpp: (WebCore::WorkerMessagingProxy::workerContextDestroyedInternal):
        Zero out m_workerThread, so that the proxy could be deleted once workerObjectDestroyed()
        is called.

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

        Move positionForCoordinates up from RenderContainer into RenderBox.

        Reviewed by Sam Weinig

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

2009-02-02  Hiroaki Nakamura <hnakamur@gmail.com>

        Reviewed by Adam Roben.

        Fixes https://bugs.webkit.org/show_bug.cgi?id=15813
        Modify pre-build step to properly handle the errorlevel
        shell command.

        * WebCore.vcproj/WebCore.vcproj: Change errorlevel handling
        for all targets so prefast is only enabled in builds
        where /analyze is available.

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

        Refactor the handling of before/after content and generated content.  Move most of the functions from
        RenderContainer into RenderObjectChildList.

        Reviewed by Sam Weinig

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::updateBeforeAfterContent):
        * rendering/RenderBlock.h:
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::isAfterContent):
        * rendering/RenderBox.h:
        * rendering/RenderButton.cpp:
        (WebCore::RenderButton::updateBeforeAfterContent):
        * rendering/RenderContainer.cpp:
        * rendering/RenderContainer.h:
        * rendering/RenderCounter.cpp:
        (WebCore::destroyCounterNodeChildren):
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::styleDidChange):
        (WebCore::RenderInline::addChildIgnoringContinuation):
        (WebCore::RenderInline::splitInlines):
        * rendering/RenderObject.h:
        * rendering/RenderObjectChildList.cpp:
        (WebCore::beforeAfterContainer):
        (WebCore::findBeforeAfterParent):
        (WebCore::invalidateCountersInContainer):
        (WebCore::RenderObjectChildList::invalidateCounters):
        (WebCore::RenderObjectChildList::updateBeforeAfterContent):
        * rendering/RenderObjectChildList.h:

2009-02-02  Dmitry Titov  <dimich@chromium.org>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=23661
        Fix Chromium build.

        * history/HistoryItem.h: need to include <wtf/OwnPtr.h>

        * rendering/RenderThemeChromiumMac.mm:
        (WebCore::RenderThemeChromiumMac::adjustMenuListStyle): isEnabled() is now on FormControlElement.

2009-02-02  Geoffrey Garen  <ggaren@apple.com>

        Build fix.

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

2009-02-02  Geoffrey Garen  <ggaren@apple.com>

        Build fix.

        * WebCore.base.exp:

2009-02-02  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig.

        Track redirects in global history.

        * WebCore.base.exp: Renamed some exports.

        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::createWindow):
        (windowProtoFuncOpen):
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::setLocation):
        * bindings/js/JSDocumentCustom.cpp:
        (WebCore::JSDocument::setLocation):
        * bindings/js/JSHTMLFormElementCustom.cpp:
        (WebCore::JSHTMLFormElement::submit):
        * bindings/js/JSLocationCustom.cpp:
        (WebCore::JSLocation::setHref):
        (WebCore::JSLocation::setProtocol):
        (WebCore::JSLocation::setHost):
        (WebCore::JSLocation::setHostname):
        (WebCore::JSLocation::setPort):
        (WebCore::JSLocation::setPathname):
        (WebCore::JSLocation::setSearch):
        (WebCore::JSLocation::setHash):
        (WebCore::JSLocation::assign): Treat any navigation that is not initiated
        by the user as a redirect from the perspective of global history.

        * history/HistoryItem.cpp:
        (WebCore::HistoryItem::addRedirectURL): Store the last URL in the redirect
        chain.

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::DocumentLoader):
        * loader/DocumentLoader.h:
        (WebCore::DocumentLoader::urlForHistoryReflectsServerRedirect):
        (WebCore::DocumentLoader::urlForHistoryReflectsClientRedirect):
        (WebCore::DocumentLoader::setURLForHistoryReflectsClientRedirect): Sadly,
        added yet another way to track redirect state during loading, since none
        of the others did what I wanted, and I didn't want to cause behavior
        changes in existing code.

        * loader/EmptyClients.h:
        (WebCore::EmptyFrameLoaderClient::updateGlobalHistoryForRedirectWithoutHistoryItem):
        Stubbed out a client function to keep things building.

        * loader/FrameLoader.cpp:
        (WebCore::isBackForwardLoadType):
        (WebCore::FrameLoader::restoreDocumentState): Renamed FrameLoadTypeRedirect =>
        FrameLoadTypeRedirectWithLockedBackForwardList, to distinguish from all
        the other meanings of "redirect" in the loading code.

        (WebCore::FrameLoader::scheduleHTTPRedirection): Treat any HTTP refresh
        redirect as a redirect from the perspective of global history.

        (WebCore::FrameLoader::loadURLIntoChildFrame): Updated for rename and extra
        parameter.

        (WebCore::FrameLoader::startRedirectionTimer): Removed unused parameter.

        (WebCore::FrameLoader::loadFrameRequestWithFormAndValues):
        (WebCore::FrameLoader::loadURL):
        (WebCore::FrameLoader::load): Updated for rename and extra parameter.

        (WebCore::FrameLoader::loadWithNavigationAction): Track redirect status
        in the DocumentLoader, so it's accessible to WebKit's global history code.

        (WebCore::FrameLoader::clientRedirected): Ignore lockHistory, since it
        only has meaning to global history, and m_quickRedirectComing pertains
        to other kinds of history.

        (WebCore::FrameLoader::loadPostRequest):
        (WebCore::FrameLoader::loadEmptyDocumentSynchronously):
        (WebCore::FrameLoader::continueFragmentScrollAfterNavigationPolicy):
        (WebCore::FrameLoader::continueLoadAfterNewWindowPolicy):
        (WebCore::FrameLoader::loadItem): Updated for extra parameter and rename.

        (WebCore::FrameLoader::updateHistory*): Notify WebKit about redirect
        navigations even if they don't create new history items, so we can track
        the redirect in the existing history item.

        * loader/FrameLoader.h: See above.

        * loader/FrameLoaderClient.h: New client interface used by
        FrameLoader::updateHistory* to record a redirect even if it doesn't create
        a new history item of its own.

        * loader/FrameLoaderTypes.h: See above.
        (WebCore::):

        * page/DragController.cpp:
        (WebCore::DragController::performDrag):
        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::dataChanged): Updated for extra parameter.

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

        Make calcPrefWidths non-abstract on RenderBox and just give it RenderContainer's implementation.
        Remove RenderSVGContainer's implementation, since it was never called.

        Reviewed by Beth Dakin

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::minPrefWidth):
        * rendering/RenderBox.h:
        (WebCore::RenderBox::calcPrefWidths):
        * rendering/RenderContainer.h:
        (WebCore::RenderContainer::moveChildNode):
        * rendering/RenderSVGContainer.h:

2009-02-02  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Add jsObjectForPluginElement to ScriptController, and have createScriptObjectForPluginElement call it.

        * WebCore.LP64.exp:
        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::createScriptObjectForPluginElement):
        (WebCore::ScriptController::jsObjectForPluginElement):
        * bindings/js/ScriptController.h:

2009-02-02  Darin Fisher  <darin@chromium.org>

        Reviewed by Eric Seidel (and Ojan Vafai).

        https://bugs.webkit.org/show_bug.cgi?id=23696
        Select element doesn't show new value when focus is switched in
        onchange event.

        Fix PopupMenuChromium to hide itself before calling valueChanged.  This
        better matches the behavior of the other ports.

        * platform/chromium/PopupMenuChromium.cpp:
        (WebCore::PopupListBox::create):
        (WebCore::PopupContainer::PopupContainer):
        (WebCore::PopupContainer::showPopup):
        (WebCore::PopupContainer::hidePopup):
        (WebCore::PopupListBox::abandon):
        (WebCore::PopupListBox::acceptIndex):
        (WebCore::PopupMenu::show):
        (WebCore::PopupMenu::hide):

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

        Make sure scrollWidth/Height just return 0 for inline flows.

        Reviewed by Beth Dakin

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::scrollWidth):
        (WebCore::RenderBox::scrollHeight):

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

        Reviewed by Dave Hyatt.

        Bug 23676: Speed up uses of reserveCapacity on new vectors by adding a new reserveInitialCapacity
        https://bugs.webkit.org/show_bug.cgi?id=23676

        * bindings/js/JSCSSStyleDeclarationCustom.cpp:
        (WebCore::cssPropertyName):
        * css/CSSMutableStyleDeclaration.cpp:
        (WebCore::CSSMutableStyleDeclaration::CSSMutableStyleDeclaration):
        (WebCore::CSSMutableStyleDeclaration::removePropertiesInSet):
        * css/CSSPrimitiveValue.cpp:
        (WebCore::CSSPrimitiveValue::cssText):
        * css/CSSStyleDeclaration.cpp:
        (WebCore::CSSStyleDeclaration::copyPropertiesInSet):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::sortMatchedRules):
        * dom/Document.cpp:
        (WebCore::Document::formElementsState):
        * dom/NamedAttrMap.h:
        (WebCore::NamedAttrMap::reserveInitialCapacity):
        * editing/TextIterator.cpp:
        (WebCore::CharacterIterator::string):
        (WebCore::SearchBuffer::SearchBuffer):
        (WebCore::plainTextToMallocAllocatedBuffer):
        * editing/markup.cpp:
        (WebCore::joinMarkups):
        * history/HistoryItem.cpp:
        (WebCore::HistoryItem::HistoryItem):
        * html/HTMLTokenizer.cpp:
        (WebCore::Token::addAttribute):
        * loader/appcache/DOMApplicationCache.cpp:
        (WebCore::DOMApplicationCache::items):
        * page/SecurityOrigin.cpp:
        (WebCore::SecurityOrigin::toString):
        * page/mac/AccessibilityObjectWrapper.mm:
        (convertToVector):
        * platform/graphics/FontCache.cpp:
        (WebCore::FontCache::purgeInactiveFontData):
        (WebCore::FontCache::invalidate):
        * platform/network/FormData.cpp:
        (WebCore::FormData::deepCopy):
        * platform/network/HTTPHeaderMap.cpp:
        (WebCore::HTTPHeaderMap::copyData):
        * platform/network/ResourceRequestBase.cpp:
        (WebCore::ResourceRequestBase::copyData):
        * platform/network/mac/FormDataStreamMac.mm:
        (WebCore::formCreate):
        * xml/XPathNodeSet.cpp:
        (WebCore::XPath::NodeSet::sort):
        Use reserveInitialCapacity instead of of reserveCapacity in all these call sites,
        which are working on new vectors that are guaranteed not to be empty.

2009-02-26  Jon Honeycutt  <jhoneycutt@apple.com>

        Build fix after r40486.

        Rubber-stamped by Ada Chan.

        * dom/Document.h: Changed HitTestRequest to a class from a struct.
        * page/EventHandler.h: Ditto.
        * rendering/EllipsisBox.h: Ditto.
        * rendering/InlineBox.h: Ditto.
        * rendering/InlineFlowBox.h: Ditto.
        * rendering/RenderLayer.h: Ditto.

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

        Reviewed by Anders Carlsson.

        Bug 23694: REGRESSION: Running svg/custom tests crashes, randomly, depending on the order of tests
        https://bugs.webkit.org/show_bug.cgi?id=23694

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::insertedIntoDocument): Added back the call through to EventTargetNode.
        (WebCore::ContainerNode::removedFromDocument): Ditto.
        * dom/EventTargetNode.cpp:
        (WebCore::EventTargetNode::insertedIntoDocument): Changed this to not call through to Node.
        (WebCore::EventTargetNode::removedFromDocument): Ditto.
        * dom/Node.cpp:
        (WebCore::Node::insertedIntoDocument): Updated comment.
        (WebCore::Node::removedFromDocument): Ditto.

2009-02-02  Anders Carlsson  <andersca@apple.com>

        Reviewed by Dan Bernstein.

        More plug-in cleanup.

        * WebCore.NPAPI.exp:
        Add new symbols.

        * bindings/objc/DOM.mm:
        * bindings/objc/DOMPrivate.h:
        Remove methods that WebKit doesn't use anymore.

2009-02-02  Jay Campan  <jcampan@chromium.org>

        Reviewed by Eric Seidel.

        Clean up PopupMenuChromium a little.
        https://bugs.webkit.org/show_bug.cgi?id=23653

        No functional changes, only code cleanup, thus no tests.

        * platform/chromium/PopupMenuChromium.cpp:
        (WebCore::):
        (WebCore::PopupListBox::PopupListBox):
        (WebCore::PopupContainer::create):
        (WebCore::PopupContainer::PopupContainer):
        (WebCore::PopupContainer::showPopup):
        (WebCore::PopupListBox::handleKeyEvent):
        (WebCore::PopupListBox::isSelectableItem):
        (WebCore::PopupListBox::selectNextRow):
        (WebCore::PopupListBox::selectPreviousRow):
        (WebCore::PopupMenu::show):
        * platform/chromium/PopupMenuChromium.h:

2009-02-02  Anders Carlsson  <andersca@apple.com>

        Reviewed by Dan Bernstein.

        Change createPlugin to take a HTMLPlugInElement, and createJavaAppletWidget to take a HTMLAppletElement.

        * WebCore.xcodeproj/project.pbxproj:
        * loader/EmptyClients.h:
        (WebCore::EmptyFrameLoaderClient::createPlugin):
        (WebCore::EmptyFrameLoaderClient::createJavaAppletWidget):
        * loader/FrameLoader.cpp:
        (WebCore::toPlugInElement):
        (WebCore::FrameLoader::loadPlugin):
        (WebCore::FrameLoader::loadItem):
        * loader/FrameLoader.h:
        * loader/FrameLoaderClient.h:

2009-02-02  Genevieve Mak  <gen@staikos.net>

        Reviewed by George Staikos.

        https://bugs.webkit.org/show_bug.cgi?id=23508
        Returns Blank Page for all "about" protocols

        * loader/MainResourceLoader.cpp:
        Fix shouldLoadAsEmptyDocument() to return a blank page for an empty
        url or about:blank only (for now, exclusively for Torch Mobile platform).

2009-02-02  Brent Fulgham  <bfulgham@webkit.org>

        Reviewed by George Staikos.

        Fixes https://bugs.webkit.org/show_bug.cgi?id=23691.
        Correct build break caused by @r40366 by moving the
        common code implmentations from GraphicsContextCGWin.cpp
        into the base Windows class (GraphicsContextWin.cpp).  Also
        move inTransparencyLayer since it is identical in both
        children.

        * platform/graphics/cairo/GraphicsContextPlatformPrivateCairo.h:
          Added member m_shouldIncludeChildWindows to Windows version,
          similar to GraphicsContextPlatformPrivateCG.h.
        * platform/graphics/win/GraphicsContextCGWin.cpp: Remove the
          implementations of shouldIncludeChildWindows,
          setShouldIncludeChildWindows, and inTransparencyLayer.
        * platform/graphics/win/GraphicsContextCairoWin.cpp: Remove
          the implementation of inTransparencyLayer.
        * platform/graphics/win/GraphicsContextWin.cpp: Move common code
          from GraphicsContextCGWin.cpp and GraphicsContextCairoWin.cpp.
        (WebCore::GraphicsContext::inTransparencyLayer):
        (WebCore::GraphicsContext::setShouldIncludeChildWindows):
        (WebCore::GraphicsContext::shouldIncludeChildWindows):

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

        Try to fix Wx build, and maybe Chromium build too.

        * WebCore.scons: Added IdentifierRep.cpp.
        * WebCoreSources.bkl: Ditto.

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

        Try to fix Wx build.

        * html/HTMLAreaElement.cpp: Added missing include of "Path.h".

2009-02-02  Adam Treat  <adam.treat@torchmobile.com>

        Reviewed by Nikolas Zimmermann.

        https://bugs.webkit.org/show_bug.cgi?id=23587
        Refactor HitTestRequest to eliminate all the ugly boolean arguments and
        use an enum bitflag instead.  Cleanup all the code that constructs the
        various HitTestRequests to make the code more readable.

        * dom/Document.cpp:
        (WebCore::Document::elementFromPoint):
        (WebCore::Document::prepareMouseEvent):
        * editing/SelectionController.cpp:
        (WebCore::SelectionController::contains):
        * page/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::visiblePositionForPoint):
        (WebCore::AccessibilityRenderObject::doAccessibilityHitTest):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::eventMayStartDrag):
        (WebCore::EventHandler::updateSelectionForMouseDrag):
        (WebCore::EventHandler::hitTestResultAtPoint):
        (WebCore::EventHandler::handleMousePressEvent):
        (WebCore::EventHandler::handleMouseDoubleClickEvent):
        (WebCore::EventHandler::handleMouseMoveEvent):
        (WebCore::EventHandler::handleMouseReleaseEvent):
        (WebCore::EventHandler::updateDragAndDrop):
        (WebCore::EventHandler::handleWheelEvent):
        (WebCore::EventHandler::sendContextMenuEvent):
        (WebCore::EventHandler::hoverTimerFired):
        (WebCore::EventHandler::handleDrag):
        * page/EventHandler.h:
        * rendering/HitTestRequest.h:
        (WebCore::HitTestRequest::):
        (WebCore::HitTestRequest::HitTestRequest):
        (WebCore::HitTestRequest::readOnly):
        (WebCore::HitTestRequest::active):
        (WebCore::HitTestRequest::mouseMove):
        (WebCore::HitTestRequest::mouseUp):
        (WebCore::HitTestRequest::ignoreClipping):
        * rendering/RenderFrameSet.cpp:
        (WebCore::RenderFrameSet::nodeAtPoint):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::hitTest):
        (WebCore::RenderLayer::hitTestLayer):
        (WebCore::RenderLayer::updateHoverActiveState):

2009-02-02  George Staikos  <george.staikos@torchmobile.com>

        Reviewed by Niko Zimmermann.

        Fix WML build by including the inlined renderStyle().

        * wml/WMLOptGroupElement.cpp:
        * wml/WMLOptionElement.cpp:

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

        Reviewed by Niko Zimmermann.

        Bug 23686: REGRESSION (r40475): Failure in fast/xpath/4XPath/Core/test_core_functions.html
        https://bugs.webkit.org/show_bug.cgi?id=23686
        rdar://problem/6547971

        Also fix other XPath tests that are crashing.

        * xml/XPathFunctions.cpp:
        (WebCore::XPath::FunLang::evaluate): Fix order of arguments when creating QualifiedName.
        * xml/XPathStep.cpp:
        (WebCore::XPath::Step::nodesInAxis): Use createAttrIfNeeded() rather than attr() since we
        need to make Attr nodes here. Yuck!

2009-02-02  Yichao Yin  <yichao.yin@torchmobile.com.cn>

        Reviewed by Niko Zimmermann.

        Test: wml/input-format.html

        * wml/WMLInputElement.cpp:
        (WebCore::WMLInputElement::WMLInputElement):
        (WebCore::formatCodes):
        (WebCore::WMLInputElement::dispatchBlurEvent):
        (WebCore::WMLInputElement::parseMappedAttribute):
        (WebCore::WMLInputElement::attach):
        (WebCore::WMLInputElement::defaultEventHandler):
        (WebCore::WMLInputElement::init):
        (WebCore::WMLInputElement::validateInputMask):
        (WebCore::WMLInputElement::isConformedToInputMask):
        (WebCore::WMLInputElement::cursorPositionToMaskIndex):
        * wml/WMLInputElement.h:

2009-02-02  Brent Fulgham  <bfulgham@webkit.org>

        Build fix only, no review.

        Fixes https://bugs.webkit.org/show_bug.cgi?id=23685.
        Correct build break caused by @r40473.

        * page/win/FrameWin.cpp: Correct access for adjustPageHeight.
        (WebCore::computePageRectsForFrame):

2009-02-02  Nikolas Zimmermann  <nikolas.zimmermann@torchmobile.com>

        Not reviewed. Fix WML enabled builds.
        FrameLoader::urlSelected() got a new parameter: lockBackForwardList. Pass 'false', as HTMLAnchorElement does.

        * wml/WMLAElement.cpp:
        (WebCore::WMLAElement::defaultEventHandler):

2009-02-02  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin Adler.

        <rdar://problem/6451610> Reloading a AppCache page doesn't ever hit the server

        Not easily testable.

        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::ApplicationCacheGroup::createResourceHandle): A new method that creates a resource
        handle in a manner that is closer to what CachedResource does. We now make conditional
        requests for better performance, and set max-age to ensure that stale responses are not used.
        (WebCore::ApplicationCacheGroup::update): Use the new createResourceHandle() method.
        (WebCore::ApplicationCacheGroup::didReceiveResponse): If the response code for the resource
        is 304, take it from the newest cache.
        (WebCore::ApplicationCacheGroup::didFail): Pre-compute request URL.
        (WebCore::ApplicationCacheGroup::didReceiveManifestResponse): Don't create a resource for
        the manifest if the response code was 304 - it won't be needed.
        (WebCore::ApplicationCacheGroup::didReceiveManifestData): Replaced an assertion that
        m_manifestResource is not null with a check.
        (WebCore::ApplicationCacheGroup::didFinishLoadingManifest): Treat null m_manifestResource as
        an indication that the response was 304.
        (WebCore::ApplicationCacheGroup::startLoadingEntry): Use createResourceHandle().

        * loader/appcache/ApplicationCacheGroup.h: Added createResourceHandle().

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

        Reviewed by Dave Hyatt.

        Bug 23674: Speed up some things based on profiling the page load test
        https://bugs.webkit.org/show_bug.cgi?id=23674

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::canShareStyleWithElement): Use the newly named cssTarget instead
        of the old name, getCSSTarget.
        (WebCore::CSSStyleSelector::SelectorChecker::checkOneSelector): Ditto.

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::insertedIntoDocument): Moved code from Node in here rather than
        calling through to EventTargetNode::insertedIntoDocument.
        (WebCore::ContainerNode::removedFromDocument): Ditto.
        (WebCore::ContainerNode::insertedIntoTree): Tweaked a bit.
        (WebCore::ContainerNode::removedFromTree): Ditto.

        * dom/ContainerNode.h: Moved the constructor definition here and made it inline.

        * dom/Document.cpp:
        (WebCore::Document::removeAllEventListenersFromAllNodes): Iterate the document element and
        its contents only to avoid the document type node. This allows us to remove the virtual
        function call to isEventTargetNode from the loop.
        (WebCore::Document::setCSSTarget): Changed argument to be an Element rather than Node.

        * dom/Document.h: Changed CSS target to be an Element rather than a Node. Renamed
        getCSSTarget to cssTarget.

        * dom/EventTargetNode.cpp:
        (WebCore::EventTargetNode::removeAllEventListenersSlowCase): Renamed and turned the
        rare data check into an assertion.

        * dom/EventTargetNode.h: Made the fast case of removeAllEventListeners be inline.
        Also moved the constructor definition here and made it inline. And added toEventTargetNode,
        matching the design of the render tree checked casts. Later we can migrate all callers
        from EventTargetNodeCast to toEventTargetNode.

        * dom/NamedAttrMap.cpp:
        (WebCore::NamedAttrMap::detachAttributesFromElement): Added. Factored out from
        clearAttributes, so we could use this loop in cases where we're not clearing the attributes.
        (WebCore::NamedAttrMap::~NamedAttrMap): Call detachAttributesFromElement instead of
        clearAttributes here.
        (WebCore::NamedAttrMap::clearAttributes): Call detachAttributesFromElement here.
        (WebCore::NamedAttrMap::detachFromElement): Call detachAttributesFromElement instead of
        clearAttributes. We don't need to clear the attributes array just because the element is
        going away, so don't.
        (WebCore::NamedAttrMap::virtualLength): Added.

        * dom/NamedAttrMap.h: Made all the virtual functions inherited from NamedNodeMap be private.
        These are all unnecessarily inefficient for use outside the DOM. Changed length to be a
        non-virtual function. This was a fairly hot function.

        * dom/NamedMappedAttrMap.cpp:
        (WebCore::NamedMappedAttrMap::setClass): Changed to use element() function now that the
        m_element data member is private.

        * dom/NamedMappedAttrMap.h: Made a few functions private. Made the
        hasMappedAttributes function non-virtual.

        * dom/NamedNodeMap.h: Made length a non-virtual inline function that calls a virtual
        function, name virtualLength. This lets NamedAttrMap::length be a non-virtual function.

        * dom/Node.cpp:
        (WebCore::Node::insertedIntoDocument): Removed call to insertedIntoTree, since it's
        only non-empty in subclasses of ContainerNode.
        (WebCore::Node::removedFromDocument): Ditto. Also removed setCSSTarget. Since a CSS
        target has to be an Element, this can be moved down to ContainerNode (or it could be
        moved down to Element for that matter).

        * dom/QualifiedName.cpp:
        (WebCore::QualifiedName::QualifiedName): Removed double initialization of m_impl.

        * dom/QualifiedName.h: Moved the destructor, copy constructor, assignment operator, and
        setPrefix function definitions into the header and made them inline.

        * html/HTMLAreaElement.cpp:
        (WebCore::HTMLAreaElement::mapMouseEvent): Updated since the stored region is now
        an OwnPtr.
        (WebCore::HTMLAreaElement::accessKey): Use AtomicString.
        (WebCore::HTMLAreaElement::setAccessKey): Ditto.
        (WebCore::HTMLAreaElement::alt): Ditto.
        (WebCore::HTMLAreaElement::setAlt): Ditto.
        (WebCore::HTMLAreaElement::coords): Ditto.
        (WebCore::HTMLAreaElement::setCoords): Ditto.
        (WebCore::HTMLAreaElement::setHref): Ditto.
        (WebCore::HTMLAreaElement::shape): Ditto.
        (WebCore::HTMLAreaElement::setShape): Ditto.
        (WebCore::HTMLAreaElement::setTarget): Ditto.

        * html/HTMLAreaElement.h: Use AtomicString in the getter and setter DOM operations.
        Change the region data member to be an OwnPtr<Path> instead of a Path to optimize
        the common case where an area element is parsed but never hit-tested. This could
        also have been done by changing the Path class's null case to be more efficient,
        but this seems fine.

        * html/HTMLViewSourceDocument.cpp:
        (WebCore::HTMLViewSourceDocument::createContainingTable): Use addAttribute instead
        of insertAttribute.
        (WebCore::HTMLViewSourceDocument::addSpanWithClassName): Ditto.
        (WebCore::HTMLViewSourceDocument::addLine): Ditto.
        (WebCore::HTMLViewSourceDocument::addLink): Ditto.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::gotoAnchor): Use cssTarget under its new name instead
        of its old name getCSSTarget.

        * platform/graphics/GlyphWidthMap.cpp:
        (WebCore::GlyphWidthMap::locatePageSlowCase): Refactored from locatePage.

        * platform/graphics/GlyphWidthMap.h: Made most of this class inline.
        Changed m_pages to use OwnPtr.

        * platform/text/PlatformString.h: Remove include no longer needed since
        StringImpl.h includes it.

        * platform/text/StringImpl.cpp:
        (WebCore::StringImpl::createStrippingNullCharactersSlowCase): Refactored
        from createStrippingNullCharacters.
        * platform/text/StringImpl.h: Moved the definition of
        createStrippingNullCharacters here and made it inline.

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::firstLineStyleSlowCase): Refactored from
        firstLineStyle.

        * rendering/RenderObject.h: Moved the definition of the firstLineStyle
        function here and made it inline. Moved the definition of the
        documentBeingDestroyed function here and made it inline.

        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::getCTM): Use getAttributeItem instead of
        getNamedItem here since it accomplishes the same thing but is more efficient.
        (WebCore::SVGSVGElement::getScreenCTM): Ditto.
        * svg/SVGStyledElement.cpp:
        (WebCore::SVGStyledElement::getPresentationAttribute): Ditto.

        * xml/XPathFunctions.cpp:
        (WebCore::XPath::FunLang::evaluate): Use getAttributeItem instead of
        getNamedItemNS.

        * xml/XPathStep.cpp:
        (WebCore::XPath::Step::nodesInAxis): Use attributeItem instead of item here.

2009-02-02  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Darin Adler.

        Move Frame::forceLayout, Frame::adjustPageHeight and Frame::forceLayoutWithPageWidthRange to FrameView

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

        FrameView::forceLayout could be killed but the comment might
        contain a value over the the plain FrameView::layout...

        Adjust the WebCore/WebKit consumers of these methods.

        * WebCore.base.exp:
        * page/Frame.cpp:
        (WebCore::Frame::setPrinting):
        * page/Frame.h:
        * page/FrameView.cpp:
        (WebCore::FrameView::forceLayout):
        (WebCore::FrameView::forceLayoutWithPageWidthRange):
        (WebCore::FrameView::adjustPageHeight):
        * page/FrameView.h:
        * page/PrintContext.cpp:
        (WebCore::PrintContext::computePageRects):

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

        Reviewed by John Sullivan.

        - fix <rdar://problem/6546625> REGRESSION (r40432): iframes added to global history at haaretz.co.il

        Fixes http/tests/navigation/multiple-back-forward-entries.html

        r40432 added a parameter to FrameLoader::scheduleLocationChange() and
        failed to update all call sites.

        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::createWindow): Pass the lockBackForwardHistory parameter,
        giving it the same value as the lockHistory parameter.
        (windowProtoFuncOpen): Ditto.
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::setLocation): Ditto.
        * bindings/js/JSDocumentCustom.cpp:
        (WebCore::JSDocument::setLocation): Ditto.
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::requestFrame): Ditto.

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

        Reviewed by Oliver Hunt.

        - fix <rdar://problem/6546549> Eliminate some RenderText::width() overhead from findNextLineBreak()

        On the PLT, this results in 0.36x the number of virtual function calls
        to RenderText::width() and 0.69x the number of calls to
        Font::isFixedPitch(), but makes 1.0004x the number of calls to
        Font::width().

        * rendering/RenderText.cpp:
        (WebCore::RenderText::width): Replaced bounds checks on 'from' and 'len'
        with an assertion.
        * rendering/bidi.cpp:
        (WebCore::textWidth): Added this inlined helper function which calls
        Font::width() directly in the non-fixed-pitch, non-full-range case, and
        otherwise calls RenderText::width().
        (WebCore::RenderBlock::findNextLineBreak): Cache whether the font has
        fixed pitch (in which case RenderText::width() will be called in order
        to take advantage of the widthFromCache() optimization for fixed-pitch
        fonts). Replaced all calls to RenderText::width() with calls to the
        textWidth() helper function.

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

        Inline all of the setNeedsLayout method and its associated functions.  Also inline setChildNeedsLayout
        and setNeedsPositionedMovementLayout.

        Reviewed by Dan Bernstein

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::setLayerNeedsFullRepaint):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::setNeedsLayout):
        (WebCore::RenderObject::setChildNeedsLayout):
        (WebCore::RenderObject::setNeedsPositionedMovementLayout):
        (WebCore::objectIsRelayoutBoundary):
        (WebCore::RenderObject::markContainingBlocksForLayout):

2009-01-31  Darin Adler  <darin@apple.com>

        Fix Mac build.

        * loader/FrameLoader.cpp: Moved FrameLoaderClient::hasHTMLView in here.
        We need it to not be an inline. Sadly, FrameLoaderClient.cpp was prematurely
        deleted and I don't want to bring it back just to fix the build.

        * loader/FrameLoaderClient.h: Rearrange virtual functions and corrected
        a possibly-confusing comment.

2009-01-31  Adam Treat  <adam.treat@torchmobile.com>

        Reviewed by David Hyatt.

        https://bugs.webkit.org/show_bug.cgi?id=23664
        Remove unused dead code from RenderTable class.  The dead code includes
        two enums and the associated member variables as well as one getter function.

        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::RenderTable):
        * rendering/RenderTable.h:

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

        More removal of code from RenderContainer.  Move removeLeftoverAnonymousBlock down into RenderBlock.
        Move destroyLeftoverChildren into the RenderObjectChildList.  Convert all containers to use the
        RenderObjectChildList.

        Reviewed by Sam Weinig

        * WebCore.xcodeproj/project.pbxproj:
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::destroy):
        (WebCore::RenderBlock::addChild):
        (WebCore::RenderBlock::removeLeftoverAnonymousBlock):
        (WebCore::RenderBlock::layoutPositionedObjects):
        (WebCore::RenderBlock::childBecameNonInline):
        * rendering/RenderBlock.h:
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::layout):
        * rendering/RenderBox.h:
        (WebCore::RenderBox::firstChildBox):
        (WebCore::RenderBox::lastChildBox):
        * rendering/RenderContainer.cpp:
        (WebCore::RenderContainer::addChild):
        (WebCore::RenderContainer::removeChildNode):
        (WebCore::RenderContainer::updateBeforeAfterContentForContainer):
        (WebCore::RenderContainer::appendChildNode):
        (WebCore::RenderContainer::insertChildNode):
        (WebCore::RenderContainer::positionForCoordinates):
        (WebCore::RenderContainer::addLineBoxRects):
        (WebCore::RenderContainer::collectAbsoluteLineBoxQuads):
        * rendering/RenderContainer.h:
        (WebCore::RenderContainer::virtualChildren):
        (WebCore::RenderContainer::children):
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::destroy):
        * rendering/RenderInline.h:
        (WebCore::RenderInline::layout):
        * rendering/RenderMedia.cpp:
        (WebCore::RenderMedia::destroy):
        (WebCore::RenderMedia::children):
        * rendering/RenderMedia.h:
        (WebCore::RenderMedia::virtualChildren):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::destroy):
        (WebCore::RenderObject::layout):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::firstChild):
        (WebCore::RenderObject::lastChild):
        (WebCore::RenderObject::virtualChildren):
        (WebCore::RenderObject::canHaveChildren):
        * rendering/RenderObjectChildList.cpp: Added.
        (WebCore::RenderObjectChildList::destroyLeftoverChildren):
        * rendering/RenderObjectChildList.h:
        * rendering/RenderReplaced.h:
        (WebCore::RenderReplaced::canHaveChildren):
        * rendering/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::RenderSVGContainer):
        (WebCore::RenderSVGContainer::destroy):
        (WebCore::RenderSVGContainer::removeChildNode):
        (WebCore::RenderSVGContainer::appendChildNode):
        (WebCore::RenderSVGContainer::insertChildNode):
        * rendering/RenderSVGContainer.h:
        (WebCore::RenderSVGContainer::virtualChildren):
        (WebCore::RenderSVGContainer::children):

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

        Fix for https://bugs.webkit.org/show_bug.cgi?id=11363

        Remove the hacks in table code around the DeleteButtonController and fix tables so that positioned children don't get wrapped in anonymous objects.
        With the removal of a non-positioned DeleteButtonController renderer, table layout can be tightened up to only lay out table sections.  Table section
        layout is tightened up to ignore non-table rows.  When a table has multiple captions, only the real one will do a layout now.  The other ones will
        be properly ignored.

        Reviewed by Oliver Hunt

        * editing/DeleteButtonController.cpp:
        (WebCore::DeleteButtonController::createDeletionUI):
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::addChild):
        (WebCore::RenderTable::layout):
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::layout):
        * rendering/RenderTableSection.h:

2009-01-31  Adam Treat  <adam.treat@torchmobile.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=23663
        Add a void toRenderBox() method which catches unnecessary casts at compile
        time and also fix the four cases where this was happening.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::determineHorizontalPosition):
        * rendering/RenderBox.h:
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::layoutHorizontalBox):
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::updateHitTestResult):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateLayerPosition):

2009-01-30  Adam Barth  <abarth@webkit.org>

        Reviewed by Sam Weinig.

        Add a pref to disable web security.

        * WebCore.base.exp:
        * dom/Document.cpp:
        (WebCore::Document::initSecurityContext):
        * page/SecurityOrigin.cpp:
        (WebCore::SecurityOrigin::SecurityOrigin):
        (WebCore::SecurityOrigin::canAccess):
        (WebCore::SecurityOrigin::canRequest):
        (WebCore::SecurityOrigin::grantUniversalAccess):
        * page/SecurityOrigin.h:
        * page/Settings.cpp:
        (WebCore::Settings::Settings):
        (WebCore::Settings::setWebSecurityEnabled):
        * page/Settings.h:
        (WebCore::Settings::isWebSecurityEnabled):

2009-01-30  Holger Hans Peter Freyther  <zecke@selfish.org>

        Build fix.

        Move the inline virtual destructor after a non-inline virtual
        function so that the symbol for the vtable is not marked as a
        weakly exported symbol.

        This trick was previously used at revision 36122 in JSObject.h

        * loader/FrameLoaderClient.h:
        (WebCore::FrameLoaderClient::~FrameLoaderClient):

2009-01-30  Oliver Hunt  <oliver@apple.com>

        Reviewed by Stephanie Lewis

        Inline SimpleFontData::widthForGlyph for a minor page load improvement.

        * platform/graphics/SimpleFontData.cpp:
        * platform/graphics/SimpleFontData.h:
        (WebCore::SimpleFontData::widthForGlyph):

2009-01-30  Holger Hans Peter Freyther  <zecke@selfish.org>

        Build fix for WX and maybe even Windows.

        * WebCore.vcproj/WebCore.vcproj:
        * WebCoreSources.bkl:

2009-01-30  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Darin Adler.

        Move Frame::sendResizeEvent and Frame::sendScrollEvent to EventHandler

        Carry out the move and catch up in two call sites.

        * WebCore.base.exp:
        * page/EventHandler.cpp:
        (WebCore::EventHandler::sendResizeEvent):
        (WebCore::EventHandler::sendScrollEvent):
        * page/EventHandler.h:
        * page/Frame.cpp:
        * page/Frame.h:
        * page/FrameView.cpp:
        (WebCore::FrameView::performPostLayoutTasks):
        (WebCore::FrameView::valueChanged):

2009-01-30  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Darin Adler.

        Move Frame::isFrameSet to Document::isFrameSet

        Changed the FrameLoader callsite. I assume that as this
        point m_frame.document() might return a null pointer. Change
        the condition to either not having a document or not having a
        frame set. This should be semantically equivalent to the
        old code.

        Make Document::body() const to be able to call it from within
        Document::isFrameSet. Leave the isHTMLDocument() check as this
        is a stronger condition than simply having a HTMLElement in the
        DOM.

        * WebCore.base.exp:
        * dom/Document.cpp:
        (WebCore::Document::isFrameSet):
        (WebCore::Document::body):
        * dom/Document.h:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::shouldScrollToAnchor):
        * loader/archive/cf/LegacyWebArchive.cpp:
        (WebCore::LegacyWebArchive::createFromSelection):
        * page/Frame.cpp:
        * page/Frame.h:

2009-01-30  Aurelian Maga  <aurelianmaga@yahoo.com>

        Reviewed by Holger Freyther.

        [GTK] Logic fixes and build fixes

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

        Catch up with the internal GeoLocation API and fix the logic of
        the previous version.

        * platform/gtk/GeolocationServiceGtk.cpp:
        (WebCore::GeolocationServiceGtk::startUpdating):
        (WebCore::GeolocationServiceGtk::updateLocationInformation):
        (WebCore::GeolocationServiceGtk::position_changed):

2009-01-30  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Nikolas Zimmermann.

        [GTK] Implement GeolocationService using the Geoclue library

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

        Untested implementation of the GeolocationService using the geoclue
        library. Velocity handling is completely missing and the accuracy
        handling might be wrong.

        * platform/gtk/GeolocationServiceGtk.cpp:
        (WTF::GeoclueAccuracy):
        (WebCore::GeolocationServiceGtk::GeolocationServiceGtk):
        (WebCore::GeolocationServiceGtk::~GeolocationServiceGtk):
        (WebCore::GeolocationServiceGtk::startUpdating):
        (WebCore::GeolocationServiceGtk::stopUpdating):
        (WebCore::GeolocationServiceGtk::suspend):
        (WebCore::GeolocationServiceGtk::resume):
        (WebCore::GeolocationServiceGtk::lastPosition):
        (WebCore::GeolocationServiceGtk::lastError):
        (WebCore::GeolocationServiceGtk::updateLocationInformation):
        (WebCore::GeolocationServiceGtk::updatePosition):
        (WebCore::GeolocationServiceGtk::position_changed):
        (WebCore::GeolocationServiceGtk::setError):
        * platform/gtk/GeolocationServiceGtk.h:

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

        Build fix.  Declare preferredSize as static.

        * platform/text/cf/StringImplCF.cpp:
        (WebCore::StringWrapperCFAllocator::preferredSize):

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

        Reviewed by Mark Rowe.

        Bug 23622: create CFString and NSString objects from WebCore::String without copying the characters
        https://bugs.webkit.org/show_bug.cgi?id=23622

        * platform/text/cf/StringImplCF.cpp:
        (WebCore::StringWrapperCFAllocator::allocator): Added. Returns the allocator.
        (WebCore::StringWrapperCFAllocator::retain): Added. Callback for allocator.
        (WebCore::StringWrapperCFAllocator::release): Ditto.
        (WebCore::StringWrapperCFAllocator::copyDescription): Ditto.
        (WebCore::StringWrapperCFAllocator::allocate): Ditto.
        (WebCore::StringWrapperCFAllocator::reallocate): Ditto.
        (WebCore::StringWrapperCFAllocator::deallocate): Ditto.
        (WebCore::StringWrapperCFAllocator::preferredSize): Ditto.
        (WebCore::StringWrapperCFAllocator::create): Added. Creates the allocator, but
        returns 0 if garbage collection is enabled.
        (WebCore::StringImpl::createCFString): Use StringWrapperCFAllocator if possible.

        * platform/text/mac/StringImplMac.mm:
        (WebCore::StringImpl::operator NSString *): Use CFString and toll-free bridging,
        rather than using NSString directly. This lets NSString benefit from the above.

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

        * page/Frame.cpp:
        (WebCore::Frame::createView): Fix debug build by removing get() from assert.

2009-01-30  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Simon Hausmann.

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

        Kill FrameLoaderClient.cpp, move the code over to Frame::createView

        FrameLoaderClient is supposed to be an interface, move the
        to be shared code to Frame which is a controller and is
        allowed to create a FrameView.

        * GNUmakefile.am:
        * WebCore.base.exp:
        * WebCore.pro:
        * WebCore.xcodeproj/project.pbxproj:
        * loader/FrameLoaderClient.cpp: Removed.
        * loader/FrameLoaderClient.h:
        (WebCore::FrameLoaderClient::~FrameLoaderClient):
        * page/Frame.cpp:
        (WebCore::Frame::createView):
        * page/Frame.h:

2009-01-30  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dave Hyatt

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

        New files to support accelerated compositing at the RenderLayer
        level.

        * WebCore.xcodeproj/project.pbxproj:
        New files added to project, and run through the sort script.

        * rendering/RenderLayerBacking.cpp: Added.
        * rendering/RenderLayerBacking.h: Added.
        New object to store compositing-related data for a single
        RenderLayer.

        * rendering/RenderLayerCompositor.cpp: Added.
        * rendering/RenderLayerCompositor.h: Added.
        Per-RenderView controller object for compositing hierarchy
        maintenance.

2009-01-30  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dave Hyatt

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

        Add new files related to accelerated compositing:

        * WebCore.xcodeproj/project.pbxproj:
        Add the files to the project. Also add ColorCG.cpp, for the
        Color(CGColorRef) constructor.

        * platform/graphics/GraphicsLayer.cpp: Added.
        * platform/graphics/GraphicsLayer.h: Added.
        GraphicsLayer is a platform abstraction for a hardware-backed
        layer.

        * platform/graphics/GraphicsLayerClient.h: Added.
        Client of GraphicsLayer, allowing GraphicsLayer to call out
        to WebCore code.

        * platform/graphics/mac/GraphicsLayerCA.h: Added.
        * platform/graphics/mac/GraphicsLayerCA.mm: Added.
        Mac Core Animation implementation of GraphicsLayer.

        * platform/graphics/mac/WebLayer.h: Added.
        * platform/graphics/mac/WebLayer.mm: Added.
        * platform/graphics/mac/WebTiledLayer.h: Added.
        * platform/graphics/mac/WebTiledLayer.mm: Added.
        Subclasses of CALayer and CATiledLayer -- helpers for the
        GraphicsLayerCA implementation.

2009-01-30  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig.

        Split "lockHistory" into "lockHistory" and "lockBackForwardList" in
        preparation for setting them differently during a redirect.

        * WebCore.base.exp:
        * bindings/js/JSHTMLFormElementCustom.cpp:
        (WebCore::JSHTMLFormElement::submit):
        * bindings/js/JSLocationCustom.cpp:
        (WebCore::navigateIfAllowed):
        (WebCore::JSLocation::setHref):
        (WebCore::JSLocation::setProtocol):
        (WebCore::JSLocation::setHost):
        (WebCore::JSLocation::setHostname):
        (WebCore::JSLocation::setPort):
        (WebCore::JSLocation::setPathname):
        (WebCore::JSLocation::setSearch):
        (WebCore::JSLocation::setHash):
        (WebCore::JSLocation::replace):
        (WebCore::JSLocation::assign):
        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::defaultEventHandler):
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::submit):
        * html/HTMLFormElement.h:
        * loader/FrameLoader.cpp:
        (WebCore::FormSubmission::FormSubmission):
        (WebCore::ScheduledRedirection::ScheduledRedirection):
        (WebCore::isBackForwardLoadType):
        (WebCore::FrameLoader::createWindow):
        (WebCore::FrameLoader::changeLocation):
        (WebCore::FrameLoader::urlSelected):
        (WebCore::FrameLoader::submitFormAgain):
        (WebCore::FrameLoader::submitForm):
        (WebCore::FrameLoader::restoreDocumentState):
        (WebCore::FrameLoader::scheduleHTTPRedirection):
        (WebCore::FrameLoader::scheduleLocationChange):
        (WebCore::FrameLoader::scheduleRefresh):
        (WebCore::FrameLoader::redirectionTimerFired):
        (WebCore::FrameLoader::loadURLIntoChildFrame):
        (WebCore::FrameLoader::startRedirectionTimer):
        (WebCore::FrameLoader::loadFrameRequestWithFormAndValues):
        (WebCore::FrameLoader::transitionToCommitted):
        (WebCore::FrameLoader::clientRedirected):
        (WebCore::FrameLoader::continueFragmentScrollAfterNavigationPolicy):
        (WebCore::FrameLoader::loadItem):
        * loader/FrameLoader.h:
        * loader/FrameLoaderTypes.h:
        (WebCore::):
        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::contextMenuItemSelected):
        * svg/SVGAElement.cpp:
        (WebCore::SVGAElement::defaultEventHandler):

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

        Reviewed by Dan Bernstein.

        Fix for <rdar://problem/6545095>
        ASSERTION FAILED: RenderBlock.h:519: !o || o->isRenderBlock()

        Test: fast/block/float/crash-replaced-display-block.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::layoutBlockChildren): Move RenderBlock only code into
        isRenderBlock if-statement.

2009-01-30  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Oliver Hunt.

        Bug 23656: AX hierarchy for iFrames is incorrect
        https://bugs.webkit.org/show_bug.cgi?id=23656

        The AX hierarchy when an iFrame was present was incorrect. A different scroll area was
        returned when going down compared to when going up.

        * page/mac/AccessibilityObjectWrapper.mm:
        (convertToNSArray):

2009-01-30  Adam Treat  <adam.treat@torchmobile.com>

        Fix Qt build to include new class IdentifierRep introduced in revision 40412.

        * WebCore.pro:

2009-01-30  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Make IdentifierRep.h a private header, and add symbols needed by WebKit to WebCore.LP64.exp.

        * WebCore.LP64.exp:
        * WebCore.xcodeproj/project.pbxproj:

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

        Commit files I forgot to in the previous commit.

        * page/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::layoutCount):
        * page/Frame.cpp:
        (WebCore::Frame::contentRenderer):
        (WebCore::Frame::forceLayoutWithPageWidthRange):
        * page/FrameView.cpp:
        (WebCore::FrameView::layout):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::nodeAtPoint):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::repaintUsingContainer):
        (WebCore::RenderObject::repaint):
        (WebCore::RenderObject::repaintRectangle):
        (WebCore::RenderObject::view):
        (WebCore::RenderObject::scheduleRelayout):
        (WebCore::RenderObject::maximalOutlineSize):
        * rendering/SVGRenderSupport.cpp:
        (WebCore::clampImageBufferSizeToViewport):
        * svg/SVGLength.cpp:
        (WebCore::SVGLength::PercentageOfViewport):

2009-01-30  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Darin Adler.

        More scaffolding for redirect tracking. No behavior change yet.

        * bindings/js/JSHTMLFormElementCustom.cpp:
        (WebCore::JSHTMLFormElement::submit): Added scaffolding necessary for
        redirect checking in a form submission through JS. (Currently, we
        just specify "no redirect.")

        * bindings/js/ScriptController.h:
        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::processingUserGesture):
        (WebCore::ScriptController::processingUserGestureEvent):
        (WebCore::ScriptController::isJavaScriptAnchorNavigation): Refactored
        user gesture check to make it more clear.

        (WebCore::ScriptController::pageIsProcessingUserGesture): Added a helper
        for checking if there's a user gesture in any frame on the page (a more
        relaxed rule than our popup blocking rule, which requires the user
        gesture to occur in the frame that's executing JavaScript.)

        * html/HTMLFormElement.h:
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::submit): Added scaffolding necessary for
        redirect checking in a form submission through the DOM. (Currently, we
        just specify "no redirect.")

        * html/HTMLFormElement.idl: Made submit custom so it can participate
        in redirect checking.

        * loader/FrameLoader.h:
        * loader/FrameLoader.cpp:
        (WebCore::FormSubmission::FormSubmission): Clarified some names, and
        added a "lockHistory" parameter to form submissions, to match other
        navigations.

        (WebCore::FrameLoader::submitFormAgain):
        (WebCore::FrameLoader::submitForm): Use the lockHistory parameter.

        (WebCore::FrameLoader::userGestureHint): Refactored this function for
        clarity, and added a FIXME for a change I was too scared to make myself.
        (Really, we should just get rid of this function.)

        (WebCore::FrameLoader::loadFrameRequestWithFormAndValues): Refactored
        to pass a FrameLoadType to form posts, too, so they can participate in
        redirect tracking.

        (WebCore::FrameLoader::loadPostRequest):
        (WebCore::FrameLoader::continueFragmentScrollAfterNavigationPolicy):
        (WebCore::FrameLoader::loadItem): Use the lockHistory parameter.

2009-01-30  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Mark Rowe.

        [Gtk+] Use AccessibilityObject::stringValue for the AtkObject name

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

        The API documentation at http://library.gnome.org/devel/atk/stable/AtkText.html
        states that: "AtkObjects whose text content is simple, unattributed, and very
        brief may expose that content via atk_object_get_name instead"

        As we are currently not able to always provide a AtkTextInterface
        implementation this will make the whole content available to accerciser,
        and other tools.

        * page/gtk/AccessibilityObjectWrapperAtk.cpp:

2009-01-30  Holger Hans Peter Freyther  <zecke@selfish.org>

        Unreviewed build fix.

        Include string.h for strdup.

        * bridge/IdentifierRep.h:

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

        Reviewed by Dan Bernstein.

        Add toRenderView methods for casting RenderObjects to RenderViews.  The methods will assert if the object
        is not a RenderView.

        * dom/Document.cpp:
        (WebCore::Document::renderView):
        * editing/SelectionController.cpp:
        (WebCore::SelectionController::nodeWillBeRemoved):
        (WebCore::SelectionController::recomputeCaretRect):
        (WebCore::SelectionController::invalidateCaretRect):
        (WebCore::SelectionController::focusedOrActiveStateChanged):
        * editing/mac/SelectionControllerMac.mm:
        (WebCore::SelectionController::notifyAccessibilityForSelectionChange):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::styleDidChange):
        (WebCore::RenderBox::repaintLayerRectsForImage):
        (WebCore::RenderBox::availableHeightUsing):
        * rendering/RenderView.h:
        (WebCore::toRenderView):

2009-01-30  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dave Hyatt

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

        Really use the container-relative repaint rect methods
        for repaint during layout

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

2009-01-30  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin Adler.

        Get rid of PrivateIdentifier and use IdentifierRep instead.

        * bridge/NP_jsobject.cpp:
        (_NPN_Invoke):
        (_NPN_GetProperty):
        (_NPN_SetProperty):
        (_NPN_RemoveProperty):
        (_NPN_HasProperty):
        (_NPN_HasMethod):
        * bridge/c/c_instance.cpp:
        (JSC::Bindings::CInstance::getPropertyNames):
        * bridge/c/c_utility.cpp:
        (JSC::Bindings::convertNPStringToUTF16):
        * bridge/c/c_utility.h:
        * bridge/npruntime.cpp:
        (_NPN_GetStringIdentifier):
        (_NPN_GetStringIdentifiers):
        (_NPN_GetIntIdentifier):
        (_NPN_IdentifierIsString):
        (_NPN_UTF8FromIdentifier):
        (_NPN_IntFromIdentifier):

2009-01-30  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig and Darin Adler.

        Make IdentifierRep a real class, add necessary class methods.

        * bridge/IdentifierRep.cpp:
        (WebCore::identifierSet):
        Returns a set of all identifiers.

        (WebCore::IdentifierRep::isValid):
        Return whether an identifier is valid, meaning that it's present in the
        set of identifiers.

        * bridge/IdentifierRep.h:
        (WebCore::IdentifierRep::isString):
        (WebCore::IdentifierRep::number):
        (WebCore::IdentifierRep::string):
        (WebCore::IdentifierRep::IdentifierRep):
        (WebCore::IdentifierRep::):

2009-01-30  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Add IdentifierRep which will be used by both plug-in implementations.

        * GNUmakefile.am:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bridge/IdentifierRep.cpp: Added.
        (WebCore::IdentifierRep::IdentifierRep):
        (WebCore::IdentifierRep::):
        (WebCore::intIdentifierMap):
        (WebCore::identifierRep):
        (WebCore::stringIdentifierMap):
        * bridge/IdentifierRep.h: Added.
        * bridge/c/c_utility.h:
        * platform/text/PlatformString.h:
        * platform/text/String.cpp:
        (WebCore::String::fromUTF8WithLatin1Fallback):

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

        Reviewed by David Hyatt.

        Add toRenderInline methods for casting RenderObjects to RenderInlines.  The methods will assert if the object
        is not a RenderInline.

        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::removeLineBoxFromRenderObject):
        (WebCore::InlineFlowBox::extractLineBoxFromRenderObject):
        (WebCore::InlineFlowBox::attachLineBoxToRenderObject):
        (WebCore::InlineFlowBox::rendererLineBoxes):
        (WebCore::InlineFlowBox::determineSpacingForFlowBoxes):
        (WebCore::InlineFlowBox::paint):
        * rendering/LayoutState.cpp:
        (WebCore::LayoutState::LayoutState):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::paintObject):
        (WebCore::RenderBlock::addFocusRingRects):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::offsetFromContainer):
        (WebCore::RenderBox::computeRectForRepaint):
        (WebCore::RenderBox::containingBlockWidthForPositioned):
        (WebCore::RenderBox::containingBlockHeightForPositioned):
        (WebCore::RenderBox::calcAbsoluteHorizontalValues):
        (WebCore::RenderBox::calcAbsoluteHorizontalReplaced):
        * rendering/RenderContainer.cpp:
        (WebCore::RenderContainer::updateBeforeAfterContentForContainer):
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::inlineContinuation):
        (WebCore::nextContinuation):
        (WebCore::RenderInline::splitInlines):
        * rendering/RenderInline.h:
        (WebCore::toRenderInline):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateLayerPosition):
        (WebCore::RenderLayer::boundingBox):
        * rendering/RenderLineBoxList.cpp:
        (WebCore::RenderLineBoxList::dirtyLinesFromChangedChild):
        * rendering/RenderText.h:
        * rendering/RenderTreeAsText.cpp:
        (WebCore::operator<<):
        * rendering/bidi.cpp:
        (WebCore::RenderBlock::createLineBoxes):
        (WebCore::RenderBlock::layoutInlineChildren):

2009-01-30  Darin Fisher  <darin@chromium.org>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=23647
        Fix PLATFORM(SKIA)'s ImageSource::clear method to match other ports

        * platform/graphics/skia/ImageSourceSkia.cpp:
        (WebCore::ImageSource::clear):

2009-01-30  David Hyatt  <hyatt@apple.com>

        Add toRenderBlock methods for casting RenderObjects to RenderBlocks.  The methods will assert if the object
        is not a RenderBlock.  Also add a toRenderBlock method that takes a RenderBlock but returns void and that
        is unimplemented.  This method will catch anyone trying to do a cast when the object is already a RenderBlock.

        Making this change caught a bad cast in RenderBlock::layoutBlockChildren, so that is also fixed by this
        patch with a containsFloats() check.

        Reviewed by Darin Adler

        * dom/PositionIterator.cpp:
        (WebCore::PositionIterator::isCandidate):
        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::addBlockPlaceholderIfNeeded):
        * editing/Editor.cpp:
        (WebCore::Editor::hasBidiSelection):
        * page/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::anchorElement):
        (WebCore::AccessibilityRenderObject::accessibilityIsIgnored):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::styleWillChange):
        (WebCore::RenderBlock::removeChild):
        (WebCore::RenderBlock::layoutBlock):
        (WebCore::RenderBlock::collapseMargins):
        (WebCore::RenderBlock::clearFloatsIfNeeded):
        (WebCore::RenderBlock::layoutBlockChildren):
        (WebCore::RenderBlock::fillBlockSelectionGaps):
        (WebCore::RenderBlock::markAllDescendantsWithFloatsForLayout):
        (WebCore::RenderBlock::firstLineBlock):
        (WebCore::getLineAtIndex):
        (WebCore::getHeightForLineCount):
        (WebCore::RenderBlock::lineCount):
        (WebCore::RenderBlock::adjustForBorderFit):
        (WebCore::RenderBlock::clearTruncation):
        * rendering/RenderBlock.h:
        (WebCore::toRenderBlock):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::offsetFromContainer):
        (WebCore::RenderBox::computeRectForRepaint):
        (WebCore::RenderBox::calcReplacedHeightUsing):
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::layoutHorizontalBox):
        (WebCore::RenderFlexibleBox::layoutVerticalBox):
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::inlineContinuation):
        (WebCore::nextContinuation):
        (WebCore::RenderInline::positionForCoordinates):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateScrollInfoAfterLayout):
        * rendering/RenderListItem.cpp:
        (WebCore::getParentOfFirstLineBox):
        (WebCore::RenderListItem::positionListMarker):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::containingBlock):
        (WebCore::RenderObject::computeRectForRepaint):
        (WebCore::RenderObject::removeFromObjectLists):
        (WebCore::RenderObject::getTextDecorationColors):
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::addChild):
        (WebCore::RenderTable::recalcSections):
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::styleDidChange):
        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::adjustControlHeightBasedOnLineHeight):
        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::block):
        * rendering/bidi.cpp:
        (WebCore::RenderBlock::createLineBoxes):

2009-01-30  Brady Eidson  <beidson@apple.com>

        Reviewed by Sam Weinig

        - Let CachedFrame handle the suspending/resuming of active DOM objects itself instead of
          relying on some outside force.
        - Clear the previous history item inside FrameLoader instead of relying on multiple
          FrameLoaderClients to do it.

        * history/CachedFrame.cpp:
        (WebCore::CachedFrame::CachedFrame): Suspend active DOM objects here.
        (WebCore::CachedFrame::restore): Resume those DOM objects here.
        * history/CachedFrame.h:
        (WebCore::CachedFrame::domWindow):

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::commitProvisionalLoad): Let CachedFrame  creation handle the
          suspending of active DOM objects.
        (WebCore::FrameLoader::open): Let CachedFrame::restore() handle resuming those DOM objects.
        (WebCore::FrameLoader::checkLoadCompleteForThisFrame): Call frameLoadCompleted() instead
          of performing a client call by itself.
        (WebCore::FrameLoader::frameLoadCompleted):

2009-01-30  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin Adler.

        <rdar://problem/6448823> Application Cache is kept after a private browsing session

        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::ApplicationCacheGroup::selectCache):
        (WebCore::ApplicationCacheGroup::update):
        Cache update will not be started if private browsing is enabled. Existing cache version
        from disk database will be used.

        * loader/appcache/ApplicationCacheGroup.h: Made postListenerTask() static, in order to call
        it when refusing to update from selectCache().

        * loader/appcache/ApplicationCache.cpp:
        (WebCore::ApplicationCache::addDynamicEntry):
        (WebCore::ApplicationCache::removeDynamicEntry):
        Added reminders about private browsing to unimplemented methods.

2009-01-30  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Simon Hausmann.

        Bug 23580: GNU mode RVCT compilation support
        <https://bugs.webkit.org/show_bug.cgi?id=23580>

        * html/PreloadScanner.cpp: Use COMPILER(GCC) instead of __GNUC__.

2009-01-30  David Levin  <levin@chromium.org>

        Reviewed by Alexey Proskuryakov.

        Bug 23616: Various "template helpers" should be consolidated from isolated files in JavaScriptCore.
        <https://bugs.webkit.org/show_bug.cgi?id=23616>

        Added forwarding header.

        * ForwardingHeaders/wtf/TypeTraits.h: Added.

2009-01-30  David Levin  <levin@chromium.org>

        Reviewed by Alexey Proskuryakov.

        Bug 23599: ResourceError needs to be copyable for use in another thread.
        <https://bugs.webkit.org/show_bug.cgi?id=23599>

        Add ResourceErrorBase::copy method.  (Not yet used.)

        * platform/network/ResourceErrorBase.cpp:
        (WebCore::ResourceErrorBase::copy):
        * platform/network/ResourceErrorBase.h:

2009-01-29  Stephanie Lewis <slewis@apple.com>

        RS by Oliver Hunt.

        Update the order files.

        * WebCore.order:

2009-01-29  Dmitry Titov  <dimich@chromium.org>

        Reviewed by Darin Adler.

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

        Make TimerBase thread-aware (for Workers).
        Added new class ThreadTimers - it keeps a heap of all timers for a thread (previously kept in a static global).
        Pointer to instance of ThreadTimers is stored in GlobalThreadData.
        Most static methods of TimerBase went to ThreadTimers.

        The TimerBase functionality did not change (it maintains the timer heap which computes the nearest firing).

        Added new abstract class SharedTimer, so worker threads can provide their own implementation (will be implemented on WorkerRunLoop).

        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.scons:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        Added new ThreadTimers.cpp to build files.

        * platform/SharedTimer.h:
        (WebCore::SharedTimer::~SharedTimer):
        (WebCore::MainThreadSharedTimer::setFiredFunction):
        (WebCore::MainThreadSharedTimer::setFireTime):
        (WebCore::MainThreadSharedTimer::stop):
        Added abstract SharedTimer and MainThreadSharedTimer which redirects to the existing port-supplied functions.

        * platform/ThreadGlobalData.cpp:
        (WebCore::ThreadGlobalData::ThreadGlobalData):
        (WebCore::ThreadGlobalData::~ThreadGlobalData):
        * platform/ThreadGlobalData.h:
        (WebCore::ThreadGlobalData::threadTimers):
        Added ThreadTimers to ThreadGlobalData.

        * platform/ThreadTimers.cpp: Added.
        (WebCore::mainThreadSharedTimer):
        Static getter for a MainThreadSharedTimer singleton.

        (WebCore::ThreadTimers::ThreadTimers):
        (WebCore::ThreadTimers::setSharedTimer):
        (WebCore::ThreadTimers::updateSharedTimer):
        (WebCore::ThreadTimers::collectFiringTimers):
        (WebCore::ThreadTimers::fireTimers):
        (WebCore::ThreadTimers::sharedTimerFired):
        (WebCore::ThreadTimers::sharedTimerFiredInternal):
        (WebCore::ThreadTimers::fireTimersInNestedEventLoop):
        ThreadTimers implementation. Most of the code is moved from previous static functions on TimerBase.
        Need a new class so each thread may get ts own copy of the timer heap.

        * platform/ThreadTimers.h: Added.
        (WebCore::ThreadTimers::timerHeap):
        (WebCore::ThreadTimers::timersReadyToFire):

        * platform/Timer.cpp:
        (WebCore::timerHeap):
        (WebCore::timersReadyToFire):
        (WebCore::TimerHeapElement::TimerHeapElement):
        (WebCore::TimerHeapElement::checkConsistency):
        (WebCore::TimerHeapElement::operator=):
        (WebCore::TimerHeapIterator::checkConsistency):
        (WebCore::TimerBase::TimerBase):
        (WebCore::TimerBase::~TimerBase):
        (WebCore::TimerBase::isActive):
        (WebCore::TimerBase::checkHeapIndex):
        (WebCore::TimerBase::heapDelete):
        (WebCore::TimerBase::heapDeleteMin):
        (WebCore::TimerBase::heapInsert):
        (WebCore::TimerBase::heapPopMin):
        (WebCore::TimerBase::setNextFireTime):
        (WebCore::TimerBase::fireTimersInNestedEventLoop):
        Now instead of static timer heap these use accessor functions that pull thread-specific heap instance.

        * platform/Timer.h:
        static methods moved to ThreadTimers.

2009-01-29  David Hyatt  <hyatt@apple.com>

        Beginning of work to eliminate RenderContainer and make containership "pluggable" into any spot in the render tree.  The first step is to create
        the new object that will handle children: RenderObjectChildList and move RenderContainer's member variables into it.  Subsequent patches will begin
        moving RenderContainer's functionality into RenderObjectChildList.

        Reviewed by Eric Seidel

        * WebCore.xcodeproj/project.pbxproj:
        * rendering/RenderContainer.cpp:
        (WebCore::RenderContainer::RenderContainer):
        (WebCore::RenderContainer::destroyLeftoverChildren):
        (WebCore::RenderContainer::addChild):
        (WebCore::RenderContainer::removeChildNode):
        (WebCore::RenderContainer::updateBeforeAfterContentForContainer):
        (WebCore::RenderContainer::appendChildNode):
        (WebCore::RenderContainer::insertChildNode):
        (WebCore::RenderContainer::layout):
        (WebCore::RenderContainer::removeLeftoverAnonymousBlock):
        (WebCore::RenderContainer::positionForCoordinates):
        (WebCore::RenderContainer::addLineBoxRects):
        (WebCore::RenderContainer::collectAbsoluteLineBoxQuads):
        * rendering/RenderContainer.h:
        (WebCore::RenderContainer::firstChild):
        (WebCore::RenderContainer::lastChild):
        (WebCore::RenderContainer::firstChildBox):
        (WebCore::RenderContainer::lastChildBox):
        * rendering/RenderObjectChildList.h: Added.
        (WebCore::RenderObjectChildList::RenderObjectChildList):
        (WebCore::RenderObjectChildList::firstChild):
        (WebCore::RenderObjectChildList::lastChild):
        (WebCore::RenderObjectChildList::setFirstChild):
        (WebCore::RenderObjectChildList::setLastChild):

2009-01-29  Jungshik Shin  <jshin@chromium.org>

        Reviewed by Alexey Proskuryakov.

        http://bugs.webkit.org/show_bug.cgi?id=23598
        Replace smart-quotes in UTF-8 with ASCII double-quotes to avoid
        the compilation error on CJK Windows

        * wml/WMLTableElement.cpp:
        (WebCore::WMLTableElement::parseMappedAttribute):

2009-01-29  Darin Fisher  <darin@chromium.org>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=23627
        Fix the PLATFORM(SKIA) build.

        * svg/graphics/SVGPaintServer.cpp:
        (WebCore::SVGPaintServer::teardown):

2009-01-29  Scott Violet  <sky@google.com>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=23625
        Skia platform doesn't render text to a canvas or support clipping to an image buffer

        Fixes two bugs in Skia rendering to a canvas:
        . Text was not rendered at all. This is because we never properly
          fixed up the alpha values. The fix is to create a layer when
          rendering text to a layer.
        . We were not honoring clipping to an image buffer.

        * platform/graphics/chromium/FontChromiumWin.cpp:
        (WebCore::Font::drawGlyphs):
        * platform/graphics/skia/GraphicsContextSkia.cpp:
        (WebCore::GraphicsContext::clipToImageBuffer):
        * platform/graphics/skia/ImageBufferSkia.cpp:
        (WebCore::ImageBuffer::ImageBuffer):
        * platform/graphics/skia/PlatformContextSkia.cpp:
        (PlatformContextSkia::PlatformContextSkia):
        (PlatformContextSkia::setDrawingToImageBuffer):
        (PlatformContextSkia::isDrawingToImageBuffer):
        (PlatformContextSkia::beginLayerClippedToImage):
        (PlatformContextSkia::restore):
        (PlatformContextSkia::applyClipFromImage):
        * platform/graphics/skia/PlatformContextSkia.h:

2009-01-29  Sam Weinig  <sam@webkit.org>

        Reviewed by Mark Rowe.

        First step in tracking the urls a HistoryItem was redirected through.

        * WebCore.base.exp:
        * history/HistoryItem.cpp:
        (WebCore::HistoryItem::HistoryItem):
        (WebCore::HistoryItem::addRedirectURL):
        (WebCore::HistoryItem::redirectURLs):
        (WebCore::HistoryItem::setRedirectURLs):
        * history/HistoryItem.h:

2009-01-29  Dirk Schulze  <krit@webkit.org>

        Reviewed by Nikolas Zimmermann, Eric Seidel.

        Just transform the pattern directly instead of transforming the context fixes this
        problem. Texts or strokes are no longer affected by transformations.

        SVG pattern transformation/BoundingBox can cause ugly stroke thickness or text positions
        https://bugs.webkit.org/show_bug.cgi?id=23472

        Test: svg/custom/pattern-with-transformation.svg

        * platform/graphics/Pattern.h:
        (WebCore::Pattern::setPatternSpaceTransform):
        * platform/graphics/cairo/PatternCairo.cpp:
        (WebCore::Pattern::createPlatformPattern):
        * platform/graphics/cg/PatternCG.cpp:
        (WebCore::Pattern::createPlatformPattern):
        * platform/graphics/qt/PatternQt.cpp:
        (WebCore::Pattern::createPlatformPattern):
        * svg/graphics/SVGPaintServerPattern.cpp:
        (WebCore::SVGPaintServerPattern::setup):

2009-01-29  David Hyatt  <hyatt@apple.com>

        Move the line box list member out of RenderFlow and down into RenderBlock and RenderInline.  Eliminate RenderFlow from the tree.

        Reviewed by Sam Weinig

        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * html/HTMLAnchorElement.cpp:
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::rendererLineBoxes):
        (WebCore::InlineFlowBox::determineSpacingForFlowBoxes):
        * rendering/InlineFlowBox.h:
        * rendering/LayoutState.cpp:
        (WebCore::LayoutState::LayoutState):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::RenderBlock):
        (WebCore::RenderBlock::destroy):
        (WebCore::RenderBlock::styleWillChange):
        (WebCore::RenderBlock::styleDidChange):
        (WebCore::RenderBlock::dirtyLineBoxes):
        (WebCore::RenderBlock::removeChild):
        (WebCore::RenderBlock::setSelectionState):
        (WebCore::RenderBlock::avoidsFloats):
        (WebCore::RenderBlock::positionForCoordinates):
        (WebCore::RenderBlock::calcInlinePrefWidths):
        (WebCore::RenderBlock::baselinePosition):
        (WebCore::RenderBlock::getBaselineOfFirstLineBox):
        (WebCore::RenderBlock::getBaselineOfLastLineBox):
        (WebCore::RenderBlock::rectWithOutlineForRepaint):
        (WebCore::RenderBlock::hoverAncestor):
        (WebCore::RenderBlock::updateDragState):
        * rendering/RenderBlock.h:
        (WebCore::RenderBlock::lineBoxes):
        (WebCore::RenderBlock::firstLineBox):
        (WebCore::RenderBlock::lastLineBox):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::offsetFromContainer):
        (WebCore::RenderBox::computeRectForRepaint):
        (WebCore::RenderBox::containingBlockWidthForPositioned):
        (WebCore::RenderBox::calcAbsoluteHorizontalValues):
        (WebCore::RenderBox::calcAbsoluteHorizontalReplaced):
        * rendering/RenderBox.h:
        * rendering/RenderFlow.cpp: Removed.
        * rendering/RenderFlow.h: Removed.
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::RenderInline):
        (WebCore::RenderInline::destroy):
        (WebCore::RenderInline::styleDidChange):
        (WebCore::RenderInline::addChildIgnoringContinuation):
        (WebCore::RenderInline::cloneInline):
        (WebCore::RenderInline::splitInlines):
        (WebCore::RenderInline::offsetLeft):
        (WebCore::RenderInline::offsetTop):
        (WebCore::RenderInline::positionForCoordinates):
        (WebCore::RenderInline::rectWithOutlineForRepaint):
        (WebCore::RenderInline::updateDragState):
        (WebCore::RenderInline::relativePositionedInlineOffset):
        * rendering/RenderInline.h:
        (WebCore::RenderInline::lineBoxes):
        (WebCore::RenderInline::firstLineBox):
        (WebCore::RenderInline::lastLineBox):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateLayerPosition):
        * rendering/RenderLineBoxList.cpp:
        (WebCore::RenderLineBoxList::dirtyLinesFromChangedChild):
        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::rendererLineBoxes):
        * rendering/RootInlineBox.h:
        * rendering/bidi.cpp:
        (WebCore::RenderBlock::createLineBoxes):
        * wml/WMLAElement.cpp:

2009-01-29  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.

        Cleaned up some naming in ScheduledRedirection.

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

2009-01-29  Anders Carlsson  <andersca@apple.com>

        Reviewed by Dan Bernstein.

        Update to use new API.

        * platform/graphics/mac/FontCustomPlatformData.cpp:
        (WebCore::FontCustomPlatformData::~FontCustomPlatformData):
        (WebCore::createFontCustomPlatformData):

2009-01-29  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Nikolas Zimmermann.

        https://bugs.webkit.org/show_bug.cgi?id=23619
        ASSERT(!error.isNull()) in DocumentLoader::mainReceivedError() when an SVG image load
        is cancelled

        Covered by existing tests (as a random crash).

        * loader/EmptyClients.h:
        (WebCore::EmptyFrameLoaderClient::cancelledError):
        (WebCore::EmptyFrameLoaderClient::blockedError):
        (WebCore::EmptyFrameLoaderClient::cannotShowURLError):
        (WebCore::EmptyFrameLoaderClient::interruptForPolicyChangeError):
        (WebCore::EmptyFrameLoaderClient::cannotShowMIMETypeError):
        (WebCore::EmptyFrameLoaderClient::fileDoesNotExistError):
        (WebCore::EmptyFrameLoaderClient::pluginWillHandleLoadError):
        Create non-null errors.

2009-01-29  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.

        Removed an unused case of "lockHistory" to help make the other cases
        clearer.

        * page/FrameLoadRequest.h:
        (WebCore::FrameLoadRequest::FrameLoadRequest):

2009-01-29  David Hyatt  <hyatt@apple.com>

        Move all of the contination insertion code from RenderFlow to RenderInline.  addChildToFlow is renamed to addChildIgnoringContinuation, and it has been moved to
        RenderContainer so that it can still be called on either blocks or inlines.  The base class implementation in RenderContainer is what RenderBlock uses.  RenderInline
        subclasses it to do all the work it used to do in addChildToFlow.

        RenderBlock's old addChildToFlow can just become addChild.  This simplification is possible because addChild was actually never being called on anonymous
        block continuations.

        The code dealing with anonymous table parts in the old addChildWithContinuation method can now be removed as a result with no harmful side effects.  Falling through to the
        base class and ignoring a block continuation makes the right thing happen.

        addChildWithContinuation moved to RenderInline and has been renamed to addChildToContinuation.

        Reviewed by Eric Seidel

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::addChild):
        * rendering/RenderBlock.h:
        * rendering/RenderContainer.h:
        (WebCore::RenderContainer::addChildIgnoringContinuation):
        * rendering/RenderFlow.cpp:
        * rendering/RenderFlow.h:
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::styleDidChange):
        (WebCore::RenderInline::addChild):
        (WebCore::nextContinuation):
        (WebCore::RenderInline::continuationBefore):
        (WebCore::RenderInline::addChildIgnoringContinuation):
        (WebCore::RenderInline::splitInlines):
        (WebCore::RenderInline::splitFlow):
        (WebCore::RenderInline::addChildToContinuation):
        (WebCore::RenderInline::childBecameNonInline):
        * rendering/RenderInline.h:
        (WebCore::RenderInline::continuation):
        (WebCore::RenderInline::setContinuation):

2009-01-29  Brady Eidson  <beidson@apple.com>

        Reviewed by Oliver Hunt

        <rdar://problem/6337157> hyundaiusa.com closes window or tab during load

        Test: fast/loader/subframe-self-close.html

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::close): Only allow mainframes to close the window.

2009-01-29  Nikolas Zimmermann  <nikolas.zimmermann@torchmobile.com>

        Reviewed by David Hyatt.

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

        Remove several virtual functions from Node & Element related to form control / input elements,
        that shouldn't reside there, but move to approriate locations, in the new form control /
        input element abstract base classes.

        Remove the isControl() method from Node, as it's redundant - isFormControlElement() provides the same information.
        Move isEnabled( / isReadOnlyControl() / isTextControl() from Node to FormControlElement.
        Move isAutofilled() / isChecked() / isIndeterminate() from Node to InputElement.
        Move isInputTypeHidden() / isPasswordField() from Element to InputElement.

        Querying these methods requires using the toInputElement/toFormControlElement casting helper functions
        to cast Element pointers to InputElement/FormControlElement pointers.

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::canShareStyleWithElement):
        (WebCore::CSSStyleSelector::adjustRenderStyle):
        (WebCore::CSSStyleSelector::SelectorChecker::checkOneSelector):
        * dom/Element.h:
        (WebCore::Element::isFormControlElementWithState):
        * dom/FormControlElement.h:
        * dom/InputElement.h:
        * dom/Node.h:
        * editing/TextIterator.cpp:
        (WebCore::TextIterator::advance):
        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::attach):
        * html/HTMLFormControlElement.h:
        (WebCore::HTMLFormControlElement::isTextControl):
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::CheckedRadioButtons::removeButton):
        * html/HTMLInputElement.h:
        (WebCore::HTMLInputElement::isAutofilled):
        * page/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::isPasswordField):
        (WebCore::AccessibilityRenderObject::isIndeterminate):
        (WebCore::AccessibilityRenderObject::isChecked):
        (WebCore::AccessibilityRenderObject::isControl):
        (WebCore::AccessibilityRenderObject::isEnabled):
        (WebCore::AccessibilityRenderObject::canSetFocusAttribute):
        * page/mac/AccessibilityObjectWrapper.mm:
        (textMarkerForVisiblePosition):
        * platform/ContextMenu.cpp:
        (WebCore::ContextMenu::populate):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::resize):
        * rendering/RenderMenuList.cpp:
        (WebCore::RenderMenuList::itemIsEnabled):
        * rendering/RenderTextControl.cpp:
        (WebCore::updateUserModifyProperty):
        (WebCore::RenderTextControl::adjustInnerTextStyle):
        (WebCore::RenderTextControl::updateFromElement):
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::isChecked):
        (WebCore::RenderTheme::isIndeterminate):
        (WebCore::RenderTheme::isEnabled):
        (WebCore::RenderTheme::isReadOnlyControl):
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::adjustMenuListStyle):
        * wml/WMLFormControlElement.cpp:
        (WebCore::WMLFormControlElement::isFocusable):
        * wml/WMLFormControlElement.h:
        (WebCore::WMLFormControlElement::isEnabled):
        (WebCore::WMLFormControlElement::isReadOnlyControl):
        (WebCore::WMLFormControlElement::isTextControl):
        * wml/WMLInputElement.cpp:
        (WebCore::WMLInputElement::isKeyboardFocusable):
        (WebCore::WMLInputElement::isMouseFocusable):
        * wml/WMLInputElement.h:
        (WebCore::WMLInputElement::isAutofilled):

2009-01-29  Nikolas Zimmermann  <nikolas.zimmermann@torchmobile.com>

        Not reviewed. Fix WML build - apply same fix as HTMLAnchorElement received.

        * wml/WMLAElement.cpp:
        (WebCore::WMLAElement::isKeyboardFocusable):

2009-01-29  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Anders Carlsson.

        https://bugs.webkit.org/show_bug.cgi?id=23620
        Crash in appcache/resource-redirect.html on Tiger

        There was a bug in the test case - it didn't send a Location header, and on Tiger, this
        resulted in a failure callback being sent. It turned out that proper redirects weren't
        caught at all.

        Tests: http/tests/appcache/manifest-redirect-2.html
               http/tests/appcache/resource-redirect-2.html

        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::ApplicationCacheGroup::didFail): Fixed this function to not crash if
        didReceiveResponse() wasn't called for this request.
        (WebCore::ApplicationCacheGroup::didReceiveResponse): Fixed to check for redirects correctly.
        (WebCore::ApplicationCacheGroup::didReceiveManifestResponse): Ditto.

2009-01-29  David Hyatt  <hyatt@apple.com>

        Move dirtyLinesFromChangedChild into RenderLineBoxList so that it can be shared by RenderBlock and RenderInline.

        Reviewed by Sam Weinig

        * rendering/RenderBlock.h:
        (WebCore::RenderBlock::dirtyLinesFromChangedChild):
        * rendering/RenderFlow.cpp:
        * rendering/RenderFlow.h:
        * rendering/RenderInline.h:
        (WebCore::RenderInline::dirtyLinesFromChangedChild):
        * rendering/RenderLineBoxList.cpp:
        (WebCore::RenderLineBoxList::dirtyLinesFromChangedChild):
        * rendering/RenderLineBoxList.h:

2009-01-29  Adam Roben  <aroben@apple.com>

        Fix Bug 23623: Windowed Flash instances aren't captured when a WebView
        receives a WM_PRINTCLIENT message

        <https://bugs.webkit.org/show_bug.cgi?id=23623>
        <rdar://problem/6513921>
        <rdar://problem/6536874>

        Flash doesn't seem to respond to WM_PRINTCLIENT, so we change
        WM_PRINTCLIENT messages into WM_PAINT messages and hook into the
        BeginPaint/EndPaint APIs to return the HDC we received from
        WM_PRINTCLIENT. This causes the plugin to paint into the
        WM_PRINTCLIENT HDC via its normal WM_PAINT handler. This technique
        came from <http://www.fengyuan.com/article/wmprint.html>.

        No test possible.

        Reviewed by Darin Adler.

        * platform/graphics/GraphicsContext.h: Added
        [set]ShouldIncludeChildWindows on Windows.

        * platform/graphics/cg/GraphicsContextPlatformPrivateCG.h: Added
        m_shouldIncludeChildWindows.
        (WebCore::GraphicsContextPlatformPrivate::GraphicsContextPlatformPrivate):
        Initialize the new member.

        * platform/graphics/win/GraphicsContextCGWin.cpp:
        (WebCore::GraphicsContext::setShouldIncludeChildWindows):
        (WebCore::GraphicsContext::shouldIncludeChildWindows):
        Added simple setter and getter.

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

        * plugins/PluginView.h: Added m_wmPrintHDC and various functions
        required for making WM_PRINTCLIENT work.

        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginView::hookedBeginPaint):
        (WebCore::PluginView::hookedEndPaint):
        (WebCore::hook):
        (WebCore::setUpOffscreenPaintingHooks):
        Added. Code was modified from code available on fengyuan.com.

        (WebCore::PluginView::wndProc): Turn WM_PRINTCLIENT messages into
        WM_PAINT messages and save off the HDC that we're supposed to paint
        into.

        (WebCore::PluginView::paintWindowedPluginIntoContext): Added. Gets an
        HDC from the GraphicsContext, translates it into client coordinates,
        gets the plugin to draw into the HDC by sending a WM_PRINTCLIENT
        message, and returns the HDC to the GraphicsContext.

        (WebCore::PluginView::paint): If we're trying to paint a windowed
        plugin into the GraphicsContext, call paintWindowedPluginIntoContext.

        (WebCore::PluginView::init): Call setUpOffscreenPaintingHooks to make
        our WM_PRINTCLIENT trick work.

2009-01-29  David Hyatt  <hyatt@apple.com>

        Move RenderFlow::destroy down into RenderBlock and RenderInline.

        Reviewed by Anders Carlsson

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::destroy):
        * rendering/RenderFlow.cpp:
        * rendering/RenderFlow.h:
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::destroy):

2009-01-29  David Kilzer  <ddkilzer@apple.com>

        Remove semi-colons from the end of ObjC method implementations

        Rubber-stamped by Adam Roben.

        $ find WebCore -name \*.m -o -name \*.mm -exec perl -e 'undef $/; $s = <>; while ($s =~ m/[\n\r][-+].*;[\s\r\n]+\{/g) { print "$ARGV: $&\n"; }' {} \;

        * bridge/testbindings.mm:

2009-01-29  Adam Treat  <adam.treat@torchmobile.com>

        Reviewed by Alexey Proskuryakov.

        https://bugs.webkit.org/show_bug.cgi?id=23609
        Use the two-arg constructor for implicit QUrl->KURL conversion as the
        single argument ctors assume that KURL::parse has already been called
        and assert if the parse results in a different string.  This was causing
        an assert for QUrl's with no path and without a trailing slash.

        * platform/qt/KURLQt.cpp:
        (WebCore::KURL::KURL):

2009-01-29  Alexey Proskuryakov  <ap@webkit.org>

        Rubber-stamped by Darin Adler.

        Renamed ApplicationCacheResource::Implicit to Master, because that's the word HTML5 uses,
        and it describes the meaning better.

        * loader/appcache/ApplicationCache.cpp:
        * loader/appcache/ApplicationCacheGroup.cpp:
        * loader/appcache/ApplicationCacheResource.cpp:
        * loader/appcache/ApplicationCacheResource.h:

2009-01-29  Alexey Proskuryakov  <ap@webkit.org>

        Release build fix.

        * loader/appcache/ApplicationCacheGroup.cpp: (WebCore::ApplicationCacheGroup::selectCache):
        Got rid of a variable that wasn't used in release builds.

2009-01-29  David Hyatt  <hyatt@apple.com>

        Get rid of createAnonymousFlow.  It was only called in one spot, so just inline the code.

        Reviewed by Oliver Hunt

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::updateFirstLetter):
        * rendering/RenderFlow.cpp:
        * rendering/RenderFlow.h:

2009-01-29  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Anders Carlsson.

        https://bugs.webkit.org/show_bug.cgi?id=23476
        HTTP redirect should make application cache updating fail

        Tests: http/tests/appcache/manifest-redirect.html
               http/tests/appcache/resource-redirect.html

        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::ApplicationCacheGroup::didReceiveResponse):
        (WebCore::ApplicationCacheGroup::didReceiveManifestResponse):
        Fail if response code isn't 2xx.

2009-01-29  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Anders Carlsson.

        https://bugs.webkit.org/show_bug.cgi?id=23592
        Update appcache manifest signature parsing

        Test: http/tests/appcache/wrong-signature-2.html

        * loader/appcache/ManifestParser.cpp: (WebCore::parseManifest): Allow comments on signature
        line. Removed code that replaced nulls with 0xFFFD characters, because there is no such
        requirement in the spec.

2009-01-28  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Anders Carlsson.

        https://bugs.webkit.org/show_bug.cgi?id=23584
        Update application cache code for the latest round of spec changes

        The changes mostly affect the update process - events are sent at a different
        time, and caches are associated with documents earlier.

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::mainReceivedError): Changed an always passing test to an assertion.
        (WebCore::DocumentLoader::shouldLoadResourceFromApplicationCache): Caches are now associated
        with DocumentLoader before being complete, but they only affect loading after being completed.
        (WebCore::DocumentLoader::getApplicationCacheFallbackResource): Ditto.

        * loader/appcache/ApplicationCache.cpp:
        (WebCore::ApplicationCache::setGroup): Allow setting the group to the same one, to simplify
        ApplicationCacheGroup code.
        (WebCore::ApplicationCache::isComplete): A new method that tells whether the cache is
        complete, as defined in HTML5.
        * loader/appcache/ApplicationCache.h: Added isComplete().

        * loader/appcache/ApplicationCacheGroup.h:
        (WebCore::ApplicationCacheUpdateOption): Per HTML5, cache updating should work differently
        when invoked with or without a browsing context (Frame). A Frame is currently always needed
        for updating in WebKit, so a new argument to update() tells whether we should pretend that
        there isn't one.
        (WebCore::ApplicationCacheGroup::cacheIsBeingUpdated): A helper for ApplicationCache::isComplete().
        (WebCore::ApplicationCacheGroup::CompletionType): Cache update algorithm now waits for
        ne main resources to finish loading in more cases. A member variable of this type is used to
        distinguish between different cases when waiting.
        (WebCore::ApplicationCacheGroup::m_cacheCandidates): The new algorithm doesn't track cache
        candidates. Caches are associated with documents much earlier, but the ones whose main resources
        have not been loaded from a cache are being tracked in a pending master entry list.

        * loader/appcache/DOMApplicationCache.cpp: (WebCore::DOMApplicationCache::update):
        An explicit call to update() invokes the algorithm without a browsing context.

        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::ApplicationCacheGroup::ApplicationCacheGroup):
        (WebCore::ApplicationCacheGroup::~ApplicationCacheGroup):
        (WebCore::ApplicationCacheGroup::selectCache):
        (WebCore::ApplicationCacheGroup::selectCacheWithoutManifestURL):
        (WebCore::ApplicationCacheGroup::finishedLoadingMainResource):
        (WebCore::ApplicationCacheGroup::failedLoadingMainResource):
        (WebCore::ApplicationCacheGroup::stopLoading):
        (WebCore::ApplicationCacheGroup::disassociateDocumentLoader):
        (WebCore::ApplicationCacheGroup::cacheDestroyed):
        (WebCore::ApplicationCacheGroup::setNewestCache):
        (WebCore::ApplicationCacheGroup::update):
        (WebCore::ApplicationCacheGroup::didReceiveResponse):
        (WebCore::ApplicationCacheGroup::didFinishLoading):
        (WebCore::ApplicationCacheGroup::didFail):
        (WebCore::ApplicationCacheGroup::didFinishLoadingManifest):
        (WebCore::ApplicationCacheGroup::cacheUpdateFailed):
        (WebCore::ApplicationCacheGroup::manifestNotFound):
        (WebCore::ApplicationCacheGroup::checkIfLoadIsComplete):
        (WebCore::ApplicationCacheGroup::startLoadingEntry):
        (WebCore::ApplicationCacheGroup::deliverDelayedMainResources):
        (WebCore::ApplicationCacheGroup::addEntry):
        (WebCore::ApplicationCacheGroup::associateDocumentLoaderWithCache):
        (WebCore::CallCacheListenerTask::create):
        (WebCore::CallCacheListenerTask::performTask):
        (WebCore::CallCacheListenerTask::CallCacheListenerTask):
        (WebCore::ApplicationCacheGroup::postListenerTask):
        Rewrote the update algorithm.

2009-01-28  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig.

        Merged FrameLoadTypeReloadAllowingStaleData with FrameLoadTypeReload.

        Technically, selecting View->Text Encoding->[Non-Default Encoding] on
        a page with frames may now be slightly slower than it used to be. Oh well.

        * loader/FrameLoader.cpp:
        (WebCore::isBackForwardLoadType):
        (WebCore::FrameLoader::restoreDocumentState): Subbed in FrameLoadTypeReload.

        (WebCore::FrameLoader::loadURLIntoChildFrame): No need to account for
        non-back-forward navigations anymore.

        (WebCore::FrameLoader::canCachePage):
        (WebCore::FrameLoader::logCanCachePageDecision):
        (WebCore::FrameLoader::reloadWithOverrideEncoding):
        (WebCore::FrameLoader::transitionToCommitted):
        (WebCore::FrameLoader::loadItem): Subbed in FrameLoadTypeReload.

        * loader/FrameLoader.h: Renamed reloadAllowingStaleData => reloadWithOverrideEncoding,
        since that's what it actually does.

2009-01-28  David Hyatt  <hyatt@apple.com>

        Move hit testing and painting of lines from RenderFlow into RenderLineBoxList.

        Reviewed by Oliver Hunt

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::paintContents):
        (WebCore::RenderBlock::hitTestContents):
        * rendering/RenderFlow.cpp:
        * rendering/RenderFlow.h:
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::paint):
        (WebCore::RenderInline::nodeAtPoint):
        * rendering/RenderLineBoxList.cpp:
        (WebCore::RenderLineBoxList::paint):
        (WebCore::RenderLineBoxList::hitTest):
        * rendering/RenderLineBoxList.h:

2009-01-28  David Hyatt  <hyatt@apple.com>

        Fix SVG pixel test regressions.  I wish I could say that I understand this fix, but I don't.  For
        some reason the original code returned 0 for RenderSVGInlineText::yPos() and somehow my literal
        replacement of yPos() with the body of that method changed the results.  I am completely baffled,
        but all SVG pixel tests pass again when I just take the code out.

        Reviewed by Oliver Hunt

        * rendering/RenderSVGInlineText.cpp:
        (WebCore::RenderSVGInlineText::computeAbsoluteRectForRange):

2009-01-28  David Hyatt  <hyatt@apple.com>

        Move dirtyLineBoxes from RenderFlow to RenderInline and RenderBlock.

        Reviewed by Oliver Hunt

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::dirtyLineBoxes):
        * rendering/RenderBlock.h:
        * rendering/RenderFlow.cpp:
        * rendering/RenderFlow.h:
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::dirtyLineBoxes):
        * rendering/RenderInline.h:
        * rendering/RenderLineBoxList.cpp:
        (WebCore::RenderLineBoxList::dirtyLineBoxes):
        * rendering/RenderLineBoxList.h:

2009-01-28  David Hyatt  <hyatt@apple.com>

        Back out my change to scrollWidth/Height from an earlier checkin since it broke stuff.  The current
        behavior is not correct, but this will need to be investigated before being changed again.

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::scrollWidth):
        (WebCore::RenderBox::scrollHeight):

2009-01-28  David Hyatt  <hyatt@apple.com>

        Move paintOutline and paintOutlineWithLine from RenderFlow to RenderInline, since they only apply to inlines.  Tighten up all of the code that
        called paintOutline to use RenderInline as the type instead of RenderFlow.

        Reviewed by cpst

        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::paint):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::paintObject):
        (WebCore::RenderBlock::addContinuationWithOutline):
        (WebCore::RenderBlock::paintContinuationOutlines):
        * rendering/RenderFlow.cpp:
        (WebCore::RenderFlow::paintLines):
        * rendering/RenderFlow.h:
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::paintOutline):
        (WebCore::RenderInline::paintOutlineForLine):
        * rendering/RenderInline.h:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::paintOutline):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::PaintInfo::PaintInfo):

2009-01-28  Darin Fisher  <darin@chromium.org>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=23596
        XMLHttpRequest.cpp no longer compiles without USE(JSC)

        * xml/XMLHttpRequest.cpp:

2009-01-28  Darin Fisher  <darin@chromium.org>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=23597
        Make it possible to compile Database.cpp when USE(JSC) is not defined

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

2009-01-28  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        - fix <rdar://problem/6077047> REGRESSION (r34544): Custom icon does not
          appear in address field on first visit to any site

        * loader/icon/IconLoader.cpp:
        (WebCore::IconLoader::finishLoading): Changed to set the icon data only
        after establishing a mapping from the page URL(s) to the icon. Doing
        things the other way around resulted in the data not being cached
        in the icon-URL to IconRecord map (because there was no interested page
        at the time) and subsequently having to be fetched asynchronously from
        the database when the page-to-icon mapping was established.

2009-01-28  David Hyatt  <hyatt@apple.com>

        Move addFocusRingRects from RenderFlow down into RenderBlock and RenderInline.

        Reviewed by Oliver Hunt

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::addFocusRingRects):
        * rendering/RenderBlock.h:
        * rendering/RenderFlow.cpp:
        * rendering/RenderFlow.h:
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::addFocusRingRects):
        * rendering/RenderInline.h:

2009-01-28  David Hyatt  <hyatt@apple.com>

        Move localCaretRect from RenderFlow into RenderBlock, since it only applied to blocks anyway and
        was misplaced from the start.

        Reviewed by Antti Koivisto.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::localCaretRect):
        * rendering/RenderBlock.h:
        * rendering/RenderFlow.cpp:
        * rendering/RenderFlow.h:

2009-01-28  Sam Weinig  <sam@webkit.org>

        Reviewed by Geoff Garen.

        Add forwarding header.

        * ForwardingHeaders/debugger/DebuggerActivation.h: Added.

2009-01-28  David Hyatt  <hyatt@apple.com>

        Move createInlineBox out of RenderFlow and down into RenderInline and RenderBlock.

        Reviewed by Beth Dakin

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::createInlineBox):
        * rendering/RenderBlock.h:
        * rendering/RenderFlow.cpp:
        * rendering/RenderFlow.h:
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::createInlineBox):
        * rendering/RenderInline.h:
        * rendering/bidi.cpp:

2009-01-28  David Hyatt  <hyatt@apple.com>

        Move calcMargins from RenderFlow to RenderInline, since it was only ever called on RenderInlines.

        Reviewed by Oliver Hunt

        * rendering/RenderFlow.cpp:
        * rendering/RenderFlow.h:
        * rendering/RenderInline.h:
        (WebCore::RenderInline::calcMargins):
        * rendering/bidi.cpp:
        (WebCore::RenderBlock::layoutInlineChildren):

2009-01-28  David Hyatt  <hyatt@apple.com>

        Refactor the first and last line box member variables from RenderFlow.  Encapsulate them into a new class called RenderLineBoxList that manages all modifications to
        the list.  This change will make it easier to give RenderInline and RenderBlock separate versions of the line box list without having to duplicate very much code.

        Reviewed by Oliver Hunt

        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::deleteLine):
        (WebCore::InlineFlowBox::removeLineBoxFromRenderObject):
        (WebCore::InlineFlowBox::extractLine):
        (WebCore::InlineFlowBox::extractLineBoxFromRenderObject):
        (WebCore::InlineFlowBox::attachLine):
        (WebCore::InlineFlowBox::attachLineBoxToRenderObject):
        * rendering/InlineFlowBox.h:
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::deleteLineBoxTree):
        * rendering/RenderFlow.cpp:
        (WebCore::RenderFlow::destroy):
        (WebCore::RenderFlow::dirtyLineBoxes):
        (WebCore::RenderFlow::createInlineBox):
        * rendering/RenderFlow.h:
        (WebCore::RenderFlow::RenderFlow):
        (WebCore::RenderFlow::lineBoxes):
        (WebCore::RenderFlow::firstLineBox):
        (WebCore::RenderFlow::lastLineBox):
        * rendering/RenderLineBoxList.cpp: Added.
        (WebCore::RenderLineBoxList::~RenderLineBoxList):
        (WebCore::RenderLineBoxList::appendLineBox):
        (WebCore::RenderLineBoxList::deleteLineBoxTree):
        (WebCore::RenderLineBoxList::extractLineBox):
        (WebCore::RenderLineBoxList::attachLineBox):
        (WebCore::RenderLineBoxList::removeLineBox):
        (WebCore::RenderLineBoxList::deleteLineBoxes):
        (WebCore::RenderLineBoxList::checkConsistency):
        * rendering/RenderLineBoxList.h: Added.
        (WebCore::RenderLineBoxList::RenderLineBoxList):
        (WebCore::RenderLineBoxList::firstLineBox):
        (WebCore::RenderLineBoxList::lastLineBox):
        (WebCore::RenderLineBoxList::checkConsistency):
        * rendering/RenderSVGInline.cpp:
        (WebCore::RenderSVGInline::createInlineBox):
        * rendering/RenderSVGText.cpp:
        (WebCore::RenderSVGText::createInlineBox):
        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::removeLineBoxFromRenderObject):
        (WebCore::RootInlineBox::extractLineBoxFromRenderObject):
        (WebCore::RootInlineBox::attachLineBoxToRenderObject):
        * rendering/RootInlineBox.h:
        * rendering/bidi.cpp:
        (WebCore::RenderBlock::layoutInlineChildren):

2009-01-28  David Kilzer  <ddkilzer@apple.com>

        Clean up FontPlatformData constructor

        Reviewed by David Hyatt.

        * platform/graphics/mac/FontPlatformData.h: Updated copyright.
        (WebCore::FontPlatformData::FontPlatformData): Provide readable
        names for constructor arguments and reformat member variables.
        * platform/graphics/mac/FontPlatformDataMac.mm: Updated copyright.
        (WebCore::FontPlatformData::FontPlatformData): Provide readable
        names for constructor arguments and reformat member variables.

2009-01-28  Tony Chang  <tony@chromium.org>

        Reviewed by David Hyatt.

        https://bugs.webkit.org/show_bug.cgi?id=23593
        Compile fixes for RenderThemeChromiumMac and RenderThemeChromiumWin.
        This is a follow up for hyatt's RenderBox changes.

        * rendering/RenderThemeChromiumMac.mm:
        (WebCore::RenderThemeChromiumMac::baselinePosition):
        * rendering/RenderThemeChromiumWin.cpp:
        (WebCore::RenderThemeChromiumWin::paintMenuList):

2009-01-28  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dave Hyatt

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

        Fix assertions when inline elements have both opacity (or something
        else that creates a RenderLayer), and transform by ensuring that
        setHasTransform() is only called for non-inline or replaced elements.
        We also have to ensure that RenderReplicas will get transforms applied
        to them by lying about them being replaced.

        Tests: fast/transforms/transform-on-inline.html
               fast/transforms/transform-table-row.html

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::styleDidChange):
        * rendering/RenderReplica.cpp:
        (WebCore::RenderReplica::RenderReplica):
        * rendering/RenderTableRow.h:
        (WebCore::RenderTableRow::requiresLayer):

2009-01-28  Hironori Bono  <hbono@chromium.org>

        Reviewed by Justin Garcia.

        https://bugs.webkit.org/show_bug.cgi?id=18835
        Spelling underlines disappear when they shouldn't

        The WebCore::InsertLineBreakCommand::doApply() function splits a text node
        without copying existing markers. To fix this bug, change code which
        manually splits a text node into a CompositeEditCommand::splitTextNode() call.

        Test: editing/spelling/spelling-linebreak.html

        * editing/InsertLineBreakCommand.cpp:
        (WebCore::InsertLineBreakCommand::doApply):

2009-01-28  David Hyatt  <hyatt@apple.com>

        Move the m_lineHeight member variable out of RenderFlow and down into RenderBlock and RenderInline.  Shift the line height computation into RenderStyle so
        that it isn't repeated in three places.

        Reviewed by Sam Weinig

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::RenderBlock):
        (WebCore::RenderBlock::lineHeight):
        * rendering/RenderBlock.h:
        * rendering/RenderFlow.cpp:
        * rendering/RenderFlow.h:
        (WebCore::RenderFlow::RenderFlow):
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::RenderInline):
        (WebCore::RenderInline::lineHeight):
        * rendering/RenderInline.h:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::lineHeight):
        * rendering/style/RenderStyle.h:
        (WebCore::InheritedFlags::computedLineHeight):

2009-01-28  Zachary Kuznia  <zork@chromiuum.org>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=22070
        Add an option to allow scripts to close windows.

        * page/Settings.cpp:
        (WebCore::Settings::Settings):
        (WebCore::Settings::setAllowScriptsToCloseWindows):
        * page/Settings.h:
        (WebCore::Settings::allowScriptsToCloseWindows):

2009-01-28  Adam Langley  <agl@google.com>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=23573
        Make PlatformWidget on chromium an intptr_t to match changes made in Chromium

        * platform/chromium/PlatformWidget.h:

2009-01-28  David Hyatt  <hyatt@apple.com>

        Fix for

        <rdar://problem/6531287> REGRESSION: CrashTracer: [USER] 12 crashes in Safari at com.apple.WebCore • WebCore::RenderBlock::removeFloatingObject + 59

        My tightening up of markAllDescendantsWithFloatsForLayout exposed a buggy check in that code that could
        lead to a bad cast.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::markAllDescendantsWithFloatsForLayout):

2009-01-27  David Hyatt  <hyatt@apple.com>

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

        Work towards eliminating RenderFlow from the tree.

        Move the m_continuation variable down from RenderFlow into RenderInline and RenderBlock.  Since a block can only have an inline continuation following it, the type
        of the member and methods reflect this (inlineContinuation() and m_inlineContinuation).  Since an inline can have either a block or an inline continuation following it,
        a base class of RenderBox* is used for the type of object returned (in anticipation of the removal of RenderFlow).

        Since moving the continuation variable down into the subclasses increased the size of RenderInline and RenderBlock by 4 bytes, this patch also moves all of the bitfield
        members of RenderFlow up to RenderObject.  Since they fit within the available bits on RenderObject, this patch actually results in a net savings of 4 bytes on RenderInlines
        and RenderBlocks!

        One bitfield member was eliminated rather than moved: m_firstLine.  This was really more of a state variable used during line layout only, so I removed it as a member
        and just passed firstLine down to various methods as needed.  Doing so uncovered some potential bugs where the first line state was not being respected when querying for
        line offsets.

        Continuations have been completely hidden from all files except for RenderFlow, RenderBlock and RenderInline.  All of the code that referenced continuations directly
        from base classes has been refactored to use virtual methods on RenderBlock and RenderInline instead.

        RenderFlow still has a common addChildWithContinuation method that is used by both blocks and inlines.  Since refactoring that method will be pretty tricky, I've held
        off on that for a later patch.

        Reviewed by Oliver Hunt

        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::isKeyboardFocusable):
        * page/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::anchorElement):
        (WebCore::AccessibilityRenderObject::boundingBoxRect):
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::determineSpacingForFlowBoxes):
        (WebCore::InlineFlowBox::paint):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::RenderBlock):
        (WebCore::RenderBlock::~RenderBlock):
        (WebCore::RenderBlock::destroy):
        (WebCore::RenderBlock::addChildToFlow):
        (WebCore::RenderBlock::makeChildrenNonInline):
        (WebCore::RenderBlock::removeChild):
        (WebCore::RenderBlock::layoutBlock):
        (WebCore::RenderBlock::expandsToEncloseOverhangingFloats):
        (WebCore::RenderBlock::collapseMargins):
        (WebCore::RenderBlock::determineHorizontalPosition):
        (WebCore::RenderBlock::setCollapsedBottomMargin):
        (WebCore::RenderBlock::layoutOnlyPositionedObjects):
        (WebCore::RenderBlock::paintObject):
        (WebCore::RenderBlock::addContinuationWithOutline):
        (WebCore::RenderBlock::setSelectionState):
        (WebCore::RenderBlock::shouldPaintSelectionGaps):
        (WebCore::RenderBlock::fillSelectionGaps):
        (WebCore::RenderBlock::leftSelectionOffset):
        (WebCore::RenderBlock::rightSelectionOffset):
        (WebCore::RenderBlock::leftOffset):
        (WebCore::RenderBlock::leftRelOffset):
        (WebCore::RenderBlock::rightOffset):
        (WebCore::RenderBlock::rightRelOffset):
        (WebCore::RenderBlock::lineWidth):
        (WebCore::RenderBlock::lowestPosition):
        (WebCore::RenderBlock::rightmostPosition):
        (WebCore::RenderBlock::leftmostPosition):
        (WebCore::RenderBlock::getClearDelta):
        (WebCore::RenderBlock::nodeAtPoint):
        (WebCore::RenderBlock::offsetForContents):
        (WebCore::RenderBlock::availableWidth):
        (WebCore::RenderBlock::setDesiredColumnCountAndWidth):
        (WebCore::RenderBlock::desiredColumnWidth):
        (WebCore::RenderBlock::desiredColumnCount):
        (WebCore::RenderBlock::columnRects):
        (WebCore::RenderBlock::layoutColumns):
        (WebCore::RenderBlock::adjustPointToColumnContents):
        (WebCore::RenderBlock::adjustRectForColumns):
        (WebCore::RenderBlock::absoluteRects):
        (WebCore::RenderBlock::absoluteQuads):
        (WebCore::RenderBlock::rectWithOutlineForRepaint):
        (WebCore::RenderBlock::hoverAncestor):
        (WebCore::RenderBlock::updateDragState):
        (WebCore::RenderBlock::outlineStyleForRepaint):
        (WebCore::RenderBlock::childBecameNonInline):
        (WebCore::RenderBlock::updateHitTestResult):
        * rendering/RenderBlock.h:
        (WebCore::RenderBlock::rightOffset):
        (WebCore::RenderBlock::leftOffset):
        (WebCore::RenderBlock::inlineContinuation):
        (WebCore::RenderBlock::setInlineContinuation):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::absoluteRects):
        (WebCore::RenderBox::absoluteQuads):
        (WebCore::RenderBox::addFocusRingRects):
        (WebCore::RenderBox::containingBlockWidth):
        * rendering/RenderBox.h:
        (WebCore::RenderBox::collapsedMarginBottom):
        (WebCore::RenderBox::childBecameNonInline):
        * rendering/RenderContainer.cpp:
        (WebCore::RenderContainer::updateBeforeAfterContentForContainer):
        (WebCore::RenderContainer::removeLeftoverAnonymousBlock):
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::layoutVerticalBox):
        * rendering/RenderFlow.cpp:
        (WebCore::nextContinuation):
        (WebCore::RenderFlow::continuationBefore):
        (WebCore::RenderFlow::addChildWithContinuation):
        (WebCore::RenderFlow::addChild):
        (WebCore::RenderFlow::destroy):
        (WebCore::RenderFlow::addFocusRingRects):
        * rendering/RenderFlow.h:
        (WebCore::RenderFlow::RenderFlow):
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::RenderInline):
        (WebCore::RenderInline::destroy):
        (WebCore::RenderInline::inlineContinuation):
        (WebCore::RenderInline::styleDidChange):
        (WebCore::RenderInline::addChildToFlow):
        (WebCore::RenderInline::cloneInline):
        (WebCore::RenderInline::splitInlines):
        (WebCore::RenderInline::splitFlow):
        (WebCore::RenderInline::positionForCoordinates):
        (WebCore::RenderInline::rectWithOutlineForRepaint):
        (WebCore::RenderInline::updateDragState):
        (WebCore::RenderInline::childBecameNonInline):
        (WebCore::RenderInline::updateHitTestResult):
        * rendering/RenderInline.h:
        (WebCore::RenderInline::isRenderInline):
        (WebCore::RenderInline::continuation):
        (WebCore::RenderInline::setContinuation):
        * rendering/RenderListItem.cpp:
        (WebCore::RenderListItem::positionListMarker):
        * rendering/RenderListMarker.cpp:
        (WebCore::RenderListMarker::RenderListMarker):
        (WebCore::RenderListMarker::setSelectionState):
        * rendering/RenderListMarker.h:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::RenderObject):
        (WebCore::RenderObject::repaintAfterLayoutIfNeeded):
        (WebCore::RenderObject::rectWithOutlineForRepaint):
        (WebCore::RenderObject::handleDynamicFloatPositionChange):
        (WebCore::RenderObject::updateDragState):
        (WebCore::RenderObject::updateHitTestResult):
        (WebCore::RenderObject::getTextDecorationColors):
        (WebCore::RenderObject::adjustRectForOutlineAndShadow):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::isInlineBlockOrInlineTable):
        (WebCore::RenderObject::childrenInline):
        (WebCore::RenderObject::setChildrenInline):
        (WebCore::RenderObject::hasColumns):
        (WebCore::RenderObject::setHasColumns):
        (WebCore::RenderObject::cellWidthChanged):
        (WebCore::RenderObject::setCellWidthChanged):
        (WebCore::RenderObject::isInlineContinuation):
        (WebCore::RenderObject::hoverAncestor):
        (WebCore::RenderObject::outlineStyleForRepaint):
        (WebCore::RenderObject::setHasMarkupTruncation):
        (WebCore::RenderObject::hasMarkupTruncation):
        (WebCore::RenderObject::selectionState):
        (WebCore::RenderObject::setSelectionState):
        (WebCore::RenderObject::hasSelectedChildren):
        (WebCore::RenderObject::isTopMarginQuirk):
        (WebCore::RenderObject::isBottomMarginQuirk):
        (WebCore::RenderObject::setTopMarginQuirk):
        (WebCore::RenderObject::setBottomMarginQuirk):
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::RenderReplaced):
        (WebCore::RenderReplaced::setSelectionState):
        * rendering/RenderReplaced.h:
        (WebCore::RenderReplaced::canBeSelectionLeaf):
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::calcWidth):
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::updateWidth):
        (WebCore::RenderTableCell::layout):
        * rendering/RenderText.cpp:
        (WebCore::RenderText::RenderText):
        (WebCore::RenderText::localCaretRect):
        (WebCore::RenderText::setSelectionState):
        * rendering/RenderText.h:
        (WebCore::RenderText::canBeSelectionLeaf):
        * rendering/RenderView.cpp:
        (WebCore::RenderView::updateHitTestResult):
        * rendering/RenderView.h:
        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::selectionTop):
        * rendering/bidi.cpp:
        (WebCore::RenderBlock::createLineBoxes):
        (WebCore::RenderBlock::constructLine):
        (WebCore::RenderBlock::computeHorizontalPositionsForLine):
        (WebCore::RenderBlock::layoutInlineChildren):
        (WebCore::RenderBlock::determineStartPosition):
        (WebCore::RenderBlock::skipTrailingWhitespace):
        (WebCore::RenderBlock::skipLeadingWhitespace):
        (WebCore::RenderBlock::fitBelowFloats):
        (WebCore::RenderBlock::findNextLineBreak):
        (WebCore::RenderBlock::checkLinesForTextOverflow):

2009-01-28  Adam Treat  <adam.treat@torchmobile.com>

        Reviewed by Nikolas Zimmermann and George Staikos.

        https://bugs.webkit.org/show_bug.cgi?id=23557
        Allow option of hit testing frame content without clipping to the visible
        viewport.

        * WebCore.base.exp:
        * page/EventHandler.cpp:
        (WebCore::EventHandler::hitTestResultAtPoint):
        * page/EventHandler.h:
        * rendering/HitTestRequest.h:
        (WebCore::HitTestRequest::HitTestRequest):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::hitTest):

2009-01-28  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Holger Freyther.

        Fix the build with Qt on Windows.

        Make sure that the QTWEBKIT_EXPORT macro becomes the Q_DECL_EXPORT macro
        instead of the import macro when building the dll, by defining
        QT_MAKEDLL.

        SystemTimeWin.cpp is needed on Windows for userIdleTime(), which for the
        other Qt platforms comes from TemporaryLinkStubs.cpp.

        * WebCore.pro:

2009-01-28  Ariya Hidayat  <ariya.hidayat@trolltech.com>

        Reviewed by Simon Hausmann.

        [Qt] Speed-up clipping: avoid calling expensive QPainter::clipRegion().
        Beside, the check is not necessary since QPainter::setClipRect() will
        work just fine if there is no clip region yet.

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

2009-01-28  Darin Fisher  <darin@chromium.org>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=23546
        Upstream GoogleURL implementation of KURL

        * platform/KURL.h:
        * platform/KURLGoogle.cpp: Added.
        * platform/KURLGooglePrivate.h: Added.

2009-01-27  Darin Adler  <darin@apple.com>

        Reviewed by Sam Weinig.

        REGRESSION (r40234): Launching iTunes from a link displays a
        "Safari can't find the Internet plug-in" sheet in Safari
        rdar://problem/6533678

        * rendering/RenderPartObject.cpp:
        (WebCore::havePlugin): Put the check for empty string in here.
        (WebCore::serviceTypeForClassId): Only return activeXType() if
        we have a plug-in that can handle that type. While it might be logical
        to return an Active X type for any <object> with a classId in it,
        even if we don't have a plug-in that implements Active X, existing
        clients, such as Safari, don't expect that.

2009-01-27  Dan Bernstein  <mitz@apple.com>

        Reviewed by Steve Falkenburg.

        - fix <rdar://problem/6524351> Text looks bad when font smoothing is
          forced off

        * platform/graphics/win/FontCGWin.cpp:
        (WebCore::Font::drawGlyphs): Changed to use GDI rather than Core
        Graphics if the client has turned font smoothing off.

2009-01-27  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dave Hyatt

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

        Use the new container-relative repaint methods to compute
        post-layout repaints, and repaints using RenderLayer's
        cached repaintRect() relative to that container, rather than
        using absolute coords.

        Replaced lots of boilerplate old/new rect code in various
        layout methods with a stack-based LayoutRepainter class, and
        fixed a bug in RenderTable which set didFullRepaint to
        'true' every time.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::layoutBlock):
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::layoutBlock):
        * rendering/RenderForeignObject.cpp:
        (WebCore::RenderForeignObject::layout):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateLayerPositions):
        (WebCore::RenderLayer::setHasVisibleContent):
        * rendering/RenderLayer.h:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::repaintUsingContainer):
        (WebCore::RenderObject::repaint):
        (WebCore::RenderObject::repaintRectangle):
        (WebCore::RenderObject::repaintAfterLayoutIfNeeded):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::LayoutRepainter::LayoutRepainter):
        (WebCore::RenderObject::LayoutRepainter::repaintAfterLayout):
        (WebCore::RenderObject::LayoutRepainter::checkForRepaint):
        * rendering/RenderPath.cpp:
        (WebCore::RenderPath::layout):
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::layout):
        * rendering/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::layout):
        * rendering/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::layout):
        * rendering/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::layout):
        * rendering/RenderSVGText.cpp:
        (WebCore::RenderSVGText::layout):
        * rendering/RenderSVGViewportContainer.cpp:
        (WebCore::RenderSVGViewportContainer::layout):
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::layout):
        * rendering/bidi.cpp:
        (WebCore::RenderBlock::layoutInlineChildren):

2009-01-27  Brady Eidson  <beidson@apple.com>

        Reviewed by Darin Adler

        <rdar://problem/3541409> - More groundwork and cleanup for CachedFrames

        * history/CachedFrame.cpp:
        (WebCore::CachedFrame::CachedFrame): Make the savePlatformDataToCachedFrame() client call here,
          and add the code for caching subframes.
        (WebCore::CachedFrame::clear):
        * history/CachedFrame.h: Change to be RefCounted
        (WebCore::CachedFrame::create):
        (WebCore::CachedFrame::url):

        * history/CachedPage.cpp:
        (WebCore::CachedPage::CachedPage):
        (WebCore::CachedPage::restore):
        * history/CachedPage.h:
        (WebCore::CachedPage::document):
        (WebCore::CachedPage::documentLoader):
        (WebCore::CachedPage::view):
        (WebCore::CachedPage::url):
        (WebCore::CachedPage::domWindow):
        (WebCore::CachedPage::cachedMainFrame):

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::cachePageForHistoryItem): Move the platform data saving into the
          CachedFrame itself.

2009-01-27  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dave Hyatt

        Flip the arguments of computeRectForRepaint() from
            computeRectForRepaint(IntRect&, RenderBox* repaintContainer, bool)
        to
            computeRectForRepaint(RenderBox* repaintContainer, IntRect&, bool)

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::clippedOverflowRectForRepaint):
        (WebCore::RenderBox::computeRectForRepaint):
        * rendering/RenderBox.h:
        * rendering/RenderForeignObject.cpp:
        (WebCore::RenderForeignObject::computeRectForRepaint):
        * rendering/RenderForeignObject.h:
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::clippedOverflowRectForRepaint):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::computeRectForRepaint):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::computeAbsoluteRepaintRect):
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::clippedOverflowRectForRepaint):
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::clippedOverflowRectForRepaint):
        (WebCore::RenderTableCell::computeRectForRepaint):
        * rendering/RenderTableCell.h:
        * rendering/RenderView.cpp:
        (WebCore::RenderView::computeRectForRepaint):
        * rendering/RenderView.h:

2009-01-27  David Kilzer  <ddkilzer@apple.com>

        Add missing header guards to AccessibilityObjectWrapper.h

        Reviewed by Anders Carlsson.

        * page/mac/AccessibilityObjectWrapper.h: Added missing header guards.

2009-01-27  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dave Hyatt

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

        Fix crash of svg/custom/stop-crash.svg testcase because of
        infinite recursion, as I missed replacing absoluteClippedOverflowRect()
        with clippedOverflowRectForRepaint() in RenderSVGGradientStop.

        Also fix a missed conversion in RenderTableCol, and add a couple
        of comments.

        * rendering/RenderSVGGradientStop.h:
        (WebCore::RenderSVGGradientStop::clippedOverflowRectForRepaint):
        * rendering/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::imageChanged):
        * rendering/RenderTableCol.cpp:
        (WebCore::RenderTableCol::clippedOverflowRectForRepaint):
        * rendering/RenderTableRow.cpp:
        (WebCore::RenderTableRow::layout):

2009-01-27  Adele Peterson  <adele@apple.com>

        RS by Dave Hyatt

        Use the textfield appearance for search fields in themeWin.css so the border/background
        styling will work correctly on these fields.

        * css/themeWin.css:

2009-01-27  Dan Bernstein  <mitz@apple.com>

        - build fix

        * bindings/js/JSHTMLInputElementCustom.cpp:
        (WebCore::JSHTMLInputElement::setSelectionStart):
        (WebCore::JSHTMLInputElement::setSelectionEnd):
        (WebCore::JSHTMLInputElement::setSelectionRange):

2009-01-27  Dan Bernstein  <mitz@apple.com>

        - build fix

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

2009-01-27  Paul Godavari  <paul@chromium.org>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=23561
        Explicitly send the MIME type from an image dragged from a web
        page to the desktop, to Chromium so that it can properly generate
        a file name.

        * platform/chromium/ChromiumDataObject.cpp:
        (WebCore::ChromiumDataObject::clear):
        (WebCore::ChromiumDataObject::hasData):
        * platform/chromium/ChromiumDataObject.h:
        * platform/chromium/ClipboardChromium.cpp:
        (WebCore::writeImageToDataObject):

2009-01-27  Mads Ager  <ager@chromium.org>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=23300
        Follow Firefox in throwing exceptions when using selection
        functions on HTMLInputElements that cannot have selection.

        This requires custom setSelectionRange, setSelectionStart and
        setSelectionEnd implementations, but it gets rid of the custom
        getOwnPropertySlot.

        * bindings/js/JSHTMLInputElementCustom.cpp:
        (WebCore::JSHTMLInputElement::selectionStart):
        (WebCore::JSHTMLInputElement::selectionEnd):
        (WebCore::JSHTMLInputElement::setSelectionRange):
        * html/HTMLInputElement.idl:

2009-01-27  Evan Stade  <estade@chromium.org>

        Reviewed by Nikolas Zimmermann.

        https://bugs.webkit.org/show_bug.cgi?id=23435
        Make spreadMethod a member of Gradient rather than GraphicsContext.
        Implement spreadMethod for Skia.

        * platform/graphics/Gradient.cpp:
        (WebCore::Gradient::Gradient):
        * platform/graphics/Gradient.h:
        (WebCore::Gradient::setSpreadMethod):
        (WebCore::Gradient::spreadMethod):
        * platform/graphics/GraphicsContext.cpp:
        * platform/graphics/GraphicsContext.h:
        * platform/graphics/GraphicsContextPrivate.h:
        * platform/graphics/GraphicsTypes.h:
        (WebCore::):
        * platform/graphics/cairo/GradientCairo.cpp:
        (WebCore::Gradient::platformGradient):
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::fillPath):
        (WebCore::GraphicsContext::strokePath):
        * platform/graphics/qt/GradientQt.cpp:
        (WebCore::Gradient::platformGradient):
        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::GraphicsContext::fillPath):
        (WebCore::GraphicsContext::strokePath):
        * platform/graphics/skia/GradientSkia.cpp:
        (WebCore::Gradient::platformGradient):
        * svg/SVGLinearGradientElement.cpp:
        (WebCore::SVGLinearGradientElement::buildGradient):
        * svg/SVGRadialGradientElement.cpp:
        (WebCore::SVGRadialGradientElement::buildGradient):
        * svg/graphics/SVGPaintServerGradient.cpp:
        (WebCore::SVGPaintServerGradient::SVGPaintServerGradient):
        (WebCore::SVGPaintServerGradient::setup):
        (WebCore::SVGPaintServerGradient::externalRepresentation):
        * svg/graphics/SVGPaintServerGradient.h:

2009-01-27  Ariya Hidayat  <ariya.hidayat@trolltech.com>

        Rubber-stamped by Simon Hausmann.

        http://qt.nokia.com/developer/task-tracker/index_html?id=238662&method=entry

        [Qt] Map function keys F1 to F24.

        * platform/qt/PlatformKeyboardEventQt.cpp:
        (WebCore::windowsKeyCodeForKeyEvent):

2009-01-27  Brady Eidson  <beidson@apple.com>

        Reviewed by Dan Bernstein

        Rework FrameLoaderClient to work on a CachedFrame basis instead of CachedPage

        * WebCore.base.exp:
        * history/CachedPage.cpp:
        * history/CachedPage.h:
        (WebCore::CachedPage::cachedMainFrame):

        * loader/EmptyClients.h:
        (WebCore::EmptyFrameLoaderClient::savePlatformDataToCachedFrame):
        (WebCore::EmptyFrameLoaderClient::transitionToCommittedFromCachedFrame):

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::restoreDocumentState):
        (WebCore::FrameLoader::commitProvisionalLoad):
        (WebCore::FrameLoader::transitionToCommitted):
        (WebCore::FrameLoader::cachePageForHistoryItem):
        * loader/FrameLoaderClient.h:

2009-01-26  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dave Hyatt

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

        Add variants of all the methods that compute dirty rects for repainting
        with versions that compute those rects relative to some container
        RenderBox that acts as a painting root.

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::styleDidChange):
        (WebCore::RenderBox::outlineBoundsForRepaint):
        (WebCore::RenderBox::localToContainerQuad):
        (WebCore::RenderBox::clippedOverflowRectForRepaint):
        (WebCore::RenderBox::computeRectForRepaint):
        * rendering/RenderBox.h:
        * rendering/RenderForeignObject.cpp:
        (WebCore::RenderForeignObject::computeRectForRepaint):
        * rendering/RenderForeignObject.h:
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::clippedOverflowRectForRepaint):
        * rendering/RenderInline.h:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::containerForRepaint):
        (WebCore::RenderObject::repaint):
        (WebCore::RenderObject::repaintRectangle):
        (WebCore::RenderObject::rectWithOutlineForRepaint):
        (WebCore::RenderObject::clippedOverflowRectForRepaint):
        (WebCore::RenderObject::computeRectForRepaint):
        (WebCore::RenderObject::localToContainerQuad):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::localToAbsoluteQuad):
        (WebCore::RenderObject::absoluteClippedOverflowRect):
        (WebCore::RenderObject::computeAbsoluteRepaintRect):
        (WebCore::RenderObject::absoluteOutlineBounds):
        (WebCore::RenderObject::outlineBoundsForRepaint):
        * rendering/RenderPath.cpp:
        (WebCore::RenderPath::clippedOverflowRectForRepaint):
        (WebCore::RenderPath::outlineBoundsForRepaint):
        * rendering/RenderPath.h:
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::clippedOverflowRectForRepaint):
        * rendering/RenderReplaced.h:
        * rendering/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::clippedOverflowRectForRepaint):
        (WebCore::RenderSVGContainer::outlineBoundsForRepaint):
        * rendering/RenderSVGContainer.h:
        * rendering/RenderSVGHiddenContainer.cpp:
        (WebCore::RenderSVGHiddenContainer::clippedOverflowRectForRepaint):
        * rendering/RenderSVGHiddenContainer.h:
        * rendering/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::clippedOverflowRectForRepaint):
        * rendering/RenderSVGImage.h:
        * rendering/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::clippedOverflowRectForRepaint):
        * rendering/RenderSVGRoot.h:
        * rendering/RenderSVGText.cpp:
        (WebCore::RenderSVGText::clippedOverflowRectForRepaint):
        * rendering/RenderSVGText.h:
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::clippedOverflowRectForRepaint):
        (WebCore::RenderTableCell::computeRectForRepaint):
        (WebCore::RenderTableCell::localToContainerQuad):
        * rendering/RenderTableCell.h:
        * rendering/RenderTableCol.cpp:
        (WebCore::RenderTableCol::clippedOverflowRectForRepaint):
        * rendering/RenderTableCol.h:
        * rendering/RenderTableRow.cpp:
        (WebCore::RenderTableRow::clippedOverflowRectForRepaint):
        * rendering/RenderTableRow.h:
        * rendering/RenderText.cpp:
        (WebCore::RenderText::clippedOverflowRectForRepaint):
        * rendering/RenderText.h:
        * rendering/RenderView.cpp:
        (WebCore::RenderView::localToContainerQuad):
        (WebCore::RenderView::computeRectForRepaint):
        * rendering/RenderView.h:

2009-01-26  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by David Hyatt

        Back out r40285, because it was checked in with no bug number, no
        testcase, is rendering change that did not get thorough review,
        and broke the Mac build.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::hitTestResultAtPoint):
        * page/EventHandler.h:
        * rendering/HitTestRequest.h:
        (WebCore::HitTestRequest::HitTestRequest):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::hitTest):

2009-01-26  Brady Eidson  <beidson@apple.com>

        Reviewed by Darin Adler

        -Make the recently added back/forward cache logging much better by actually
         walking the entire frame tree and indenting the resulting output.
        -Fix a null-termination bug in HistoryItem tree logging

        * history/HistoryItem.cpp:
        (WebCore::HistoryItem::showTreeWithIndent):

        * loader/FrameLoader.cpp:
        (WebCore::pageCacheLogPrefix):
        (WebCore::pageCacheLog):
        (WebCore::FrameLoader::logCanCachePageDecision):
        (WebCore::FrameLoader::logCanCacheFrameDecision):
        * loader/FrameLoader.h:

2009-01-26  Adam Treat  <adam.treat@torchmobile.com>

        Reviewed by Nikolas Zimmermann.

        Allow option of hit testing frame content without clipping to the visible
        viewport.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::hitTestResultAtPoint):
        * page/EventHandler.h:
        * rendering/HitTestRequest.h:
        (WebCore::HitTestRequest::HitTestRequest):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::hitTest):

2009-01-26  Sam Weinig  <sam@webkit.org>

        Reviewed by Dan Bernstein.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=18141
        Acid3 tests 77 and 78 fail on reload due to SVG font race
        <rdar://problem/6504899>

        Match Opera's behavior of loading SVGFonts as soon as <font-face-uri>
        tag is inserted into the document and not at the first use of the font
        as is done for CSS web fonts.

        This fixes a race condition noticeable by some in the Acid3 test that
        happened because the onload event handler for an iframe containing a
        <font-face-uri> with an external reference was not delayed by the pending
        load of the font.

        Test: http/tests/misc/SVGFont-delayed-load.html

        * svg/SVGFontFaceUriElement.cpp:
        (WebCore::SVGFontFaceUriElement::~SVGFontFaceUriElement):
        (WebCore::SVGFontFaceUriElement::parseMappedAttribute): Call loadFont if
        the href attribute changes.
        (WebCore::SVGFontFaceUriElement::insertedIntoDocument): Call loadFont.
        (WebCore::SVGFontFaceUriElement::loadFont): Force a load of the
        font specified in href attribute.
        * svg/SVGFontFaceUriElement.h:

2009-01-26  Timothy Hatcher  <timothy@apple.com>

        Change Web Archive serialization back to the binary property list format.

        <rdar://problem/6127865> Web archives saved with Safari 4 cannot be read by Safari 3

        Reviewed by Brady Eidson.

        * loader/archive/cf/LegacyWebArchive.cpp:
        (WebCore::LegacyWebArchive::rawDataRepresentation):

2009-01-26  Anders Carlsson  <andersca@apple.com>

        Fix 64-bit build.

        * WebCore.LP64.exp:

2009-01-26  Dmitry Titov  <dimich@chromium.org>

        Reviewed by Alexey Proskuryakov.

        https://bugs.webkit.org/show_bug.cgi?id=23511
        Move DOMTimer from bindings/js to page/.
        This was prepared by moving all JSC dependencies from DOMTimer
        to ScheduledAction earlier, and helps unfork the Chromuim version
        of the DOMTimer.

        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.scons:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * bindings/js/DOMTimer.cpp: Removed.
        * bindings/js/DOMTimer.h: Removed.
        * page/DOMTimer.cpp: Copied from WebCore/bindings/js/DOMTimer.cpp.
        * page/DOMTimer.h: Copied from WebCore/bindings/js/DOMTimer.h.

2009-01-26  David Hyatt  <hyatt@apple.com>

        Eliminate rightmostPosition, lowestPosition and leftmostPosition from RenderFlow.  Move the code into
        RenderBlock's methods.

        Reviewed by Eric Seidel

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::lowestPosition):
        (WebCore::RenderBlock::rightmostPosition):
        (WebCore::RenderBlock::leftmostPosition):
        * rendering/RenderFlow.cpp:
        * rendering/RenderFlow.h:

2009-01-26  Darin Fisher  <darin@chromium.org>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=23553
        Upstream changes from jcampan to fix chromium bugs 6692 and 6694.

        * platform/chromium/PopupMenuChromium.cpp:
        (WebCore::PopupListBox::setLoopSelectionNavigation):
        (WebCore::PopupListBox::PopupListBox):
        (WebCore::PopupContainer::setLoopSelectionNavigation):
        (WebCore::PopupListBox::handleKeyEvent):
        (WebCore::PopupListBox::paintRow):
        (WebCore::PopupListBox::clearSelection):
        (WebCore::PopupListBox::selectNextRow):
        (WebCore::PopupListBox::selectPreviousRow):
        * platform/chromium/PopupMenuChromium.h:

2009-01-26  Brady Eidson  <beidson@apple.com>

        Reviewed by Sam Weinig

        Remove some historical CachedPage time stamp fluff.

        * history/CachedPage.cpp:
        (WebCore::CachedPage::CachedPage):
        * history/CachedPage.h:
        (WebCore::CachedPage::timeStamp):

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

2009-01-26  David Hyatt  <hyatt@apple.com>

        Move absoluteClippedOverflowRect, linesBoundingBox and borderBoundingBox from RenderFlow to RenderInline.

        Reviewed by Eric Seidel

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::containingBlockHeightForPositioned):
        * rendering/RenderFlow.cpp:
        * rendering/RenderFlow.h:
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::linesBoundingBox):
        (WebCore::RenderInline::absoluteClippedOverflowRect):
        * rendering/RenderInline.h:
        (WebCore::RenderInline::borderBoundingBox):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateLayerPosition):
        * rendering/RenderTreeAsText.cpp:
        (WebCore::operator<<):

2009-01-26  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=22650
        Implement support for "Immutable" attribute to CodeGeneratorJS.pm, thus
        allowing to explicitly mark methods as immutable (i.e. returning a new
        instance rather than a reference to an existing instance).

        * bindings/js/JSSVGMatrixCustom.cpp: Removed custom methods.
        * bindings/scripts/CodeGeneratorJS.pm: Added check for Immutable
            attribute when generating function call.
        * svg/SVGMatrix.idl: Replaced Custom attribute with Immutable on
            methods.

2009-01-26  David Hyatt  <hyatt@apple.com>

        Eliminate isInlineFlow() now that a RenderBlock can never be an inline flow.  isInlineFlow() is now
        equivalent to isRenderInline(), so all calls to isInlineFlow() have been replaced with isRenderInline().

        Reviewed by Eric Seidel

        * dom/Text.cpp:
        (WebCore::Text::rendererIsNeeded):
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::placeBoxesHorizontally):
        (WebCore::shouldDrawTextDecoration):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::hitTestContents):
        (WebCore::InlineMinMaxIterator::next):
        (WebCore::RenderBlock::calcInlinePrefWidths):
        * rendering/RenderBlock.h:
        (WebCore::RenderBlock::isBlockFlow):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::clientWidth):
        (WebCore::RenderBox::clientHeight):
        (WebCore::RenderBox::nodeAtPoint):
        (WebCore::RenderBox::imageChanged):
        (WebCore::RenderBox::offsetForPositionedInContainer):
        (WebCore::RenderBox::containingBlockWidthForPositioned):
        (WebCore::RenderBox::containingBlockHeightForPositioned):
        * rendering/RenderBox.h:
        (WebCore::RenderBox::width):
        (WebCore::RenderBox::height):
        (WebCore::RenderBox::size):
        (WebCore::RenderBox::frameRect):
        * rendering/RenderContainer.cpp:
        (WebCore::RenderContainer::updateBeforeAfterContentForContainer):
        * rendering/RenderFlow.cpp:
        (WebCore::RenderFlow::dirtyLinesFromChangedChild):
        (WebCore::RenderFlow::createInlineBox):
        (WebCore::RenderFlow::paintLines):
        (WebCore::RenderFlow::hitTestLines):
        (WebCore::RenderFlow::absoluteClippedOverflowRect):
        (WebCore::RenderFlow::lowestPosition):
        (WebCore::RenderFlow::rightmostPosition):
        (WebCore::RenderFlow::leftmostPosition):
        * rendering/RenderFlow.h:
        (WebCore::RenderFlow::borderBoundingBox):
        * rendering/RenderInline.h:
        (WebCore::RenderInline::isRenderInline):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateLayerPosition):
        (WebCore::RenderLayer::intersectsDamageRect):
        (WebCore::RenderLayer::boundingBox):
        * rendering/RenderListItem.cpp:
        (WebCore::getParentOfFirstLineBox):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::getAbsoluteRepaintRectWithOutline):
        (WebCore::RenderObject::styleWillChange):
        (WebCore::RenderObject::firstLineStyle):
        * rendering/RenderObject.h:
        * rendering/RenderSVGInline.cpp:
        (WebCore::RenderSVGInline::createInlineBox):
        * rendering/RenderSVGText.cpp:
        (WebCore::RenderSVGText::createInlineBox):
        * rendering/RenderTableRow.cpp:
        (WebCore::RenderTableRow::nodeAtPoint):
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::nodeAtPoint):
        * rendering/RenderText.cpp:
        (WebCore::isInlineFlowOrEmptyText):
        * rendering/RenderTreeAsText.cpp:
        (WebCore::operator<<):
        * rendering/bidi.cpp:
        (WebCore::bidiNext):
        (WebCore::bidiFirst):
        (WebCore::appendRunsForObject):
        (WebCore::RenderBlock::createLineBoxes):
        (WebCore::RenderBlock::computeHorizontalPositionsForLine):
        (WebCore::RenderBlock::layoutInlineChildren):
        (WebCore::inlineFlowRequiresLineBox):
        (WebCore::requiresLineBox):
        (WebCore::RenderBlock::skipTrailingWhitespace):
        (WebCore::RenderBlock::skipLeadingWhitespace):
        (WebCore::RenderBlock::findNextLineBreak):

2009-01-26  David Hyatt  <hyatt@apple.com>

        Drop support for display:compact.

        (1) display:compact is no longer part of CSS2.1.
        (2) Shipping Safari has completely broken compact support with severely broken rendering
        (all of the compact text just piles on top of the text in the inserted block and on top of itself as well).
        (3) This has been broken in WebKit for years (ever since blocks converted to painting lines directly) without
        anyone even noticing.

        Reviewed by Eric Seidel

        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::placeBoxesHorizontally):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::handleSpecialChild):
        (WebCore::RenderBlock::handleRunInChild):
        (WebCore::RenderBlock::layoutBlockChildren):
        (WebCore::RenderBlock::paint):
        (WebCore::RenderBlock::paintObject):
        (WebCore::RenderBlock::nodeAtPoint):
        (WebCore::RenderBlock::positionForCoordinates):
        (WebCore::shouldCheckLines):
        (WebCore::getHeightForLineCount):
        (WebCore::RenderBlock::renderName):
        * rendering/RenderBlock.h:
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::sizesToIntrinsicWidth):
        * rendering/RenderBox.h:
        (WebCore::RenderBox::width):
        (WebCore::RenderBox::height):
        (WebCore::RenderBox::size):
        (WebCore::RenderBox::frameRect):
        * rendering/RenderFlow.cpp:
        (WebCore::RenderFlow::paintLines):
        (WebCore::RenderFlow::hitTestLines):
        (WebCore::RenderFlow::absoluteClippedOverflowRect):
        (WebCore::RenderFlow::linesBoundingBox):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::isInline):
        * rendering/bidi.cpp:
        (WebCore::RenderBlock::computeHorizontalPositionsForLine):
        (WebCore::RenderBlock::layoutInlineChildren):
        * rendering/bidi.h:
        (WebCore::BidiRun::BidiRun):

2009-01-26  Adam Langley  <agl@google.com>

        Reviewed by Nikolas Zimmermann.

        gtk2drawing: fix compiler warnings

        g_object_set_data expects a gpointer as the last argument. Cast the
          TRUE/FALSE values to avoid a warning.
        gtk_tree_view_column_new doesn't return a GtkWidget.

        * platform/gtk/gtk2drawing.c:
        (setup_widget_prototype):
        (moz_gtk_get_combo_box_inner_button):
        (moz_gtk_get_combo_box_button_inner_widgets):
        (ensure_combo_box_widgets):
        (moz_gtk_get_combo_box_entry_inner_widgets):
        (moz_gtk_get_combo_box_entry_arrow):
        (ensure_combo_box_entry_widgets):
        (ensure_toolbar_widget):
        (ensure_menu_bar_item_widget):
        (ensure_menu_popup_widget):
        (ensure_menu_item_widget):
        (ensure_image_menu_item_widget):
        (ensure_menu_separator_widget):
        (ensure_check_menu_item_widget):
        (ensure_tree_header_cell_widget):
        (moz_gtk_entry_paint):

2009-01-26  David Hyatt  <hyatt@apple.com>

        Change display:run-in handling so that we no longer reuse RenderBlock as though it is an inline flow.
        Instead we create a new RenderInline, move the RenderBlock's children underneath it, and then set the
        inline as the new element's renderer.

        Reviewed by Dan Bernstein

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::handleRunInChild):
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::renderName):

2009-01-26  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=23480
        Add missing method stubs to BackForwardListChromium.

        * history/BackForwardListChromium.cpp:
        (WebCore::BackForwardList::backItem):
        (WebCore::BackForwardList::forwardItem):

2009-01-25  Darin Adler  <darin@apple.com>

        Try to fix Tiger buildbot.

        * WebCore.xcodeproj/project.pbxproj: Turn off cast-qual for WebDashboardRegion.m.
        * page/mac/WebDashboardRegion.m:
        (typeName): Added.
        (-[WebDashboardRegion description]): Use typeName.
        (-[WebDashboardRegion isEqual:]): Added comment.

2009-01-25  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=23535
        Strengthen debug checks in KURL

        Covered (and prompted) by existing tests.

        * platform/KURL.cpp:
        (WebCore::checkEncodedString): Check that the first character of the URL is an allowed
        first scheme character, not just that it isn't a slash.
        (WebCore::KURL::KURL): Assert that parsing didn't affect the string (which must be the case
        because of parsing being idempotent).

        * page/SecurityOrigin.cpp:
        (WebCore::SecurityOrigin::create): Added a check for the URL being valid - if it is not, an
        empty security origin is created.
        (WebCore::SecurityOrigin::createFromString): Parse the string as URL, do not just convert
        it - it is not guaranteed to be properly encoded.

        * dom/Document.cpp: (WebCore::Document::updateBaseURL): As documentURI is an arbitrary
        string, it needs to be parsed into an URL, not just converted into one.

        * html/CanvasRenderingContext2D.cpp: (WebCore::CanvasRenderingContext2D::createPattern):
        Create the security origin with createFromString() instead of create(). I do not know where
        the string comes from and whether it might not be properly encoded, but this change can't
        hurt, and makes the code slightly more clear.

        * xml/XMLHttpRequest.cpp: (WebCore::XMLHttpRequest::accessControlCheck): Create the security
        origin with createFromString() instead of create(). The string comes from an HTTP response
        header, so it may not be a properly encoded URL.

        * loader/DocLoader.cpp: (WebCore::DocLoader::requestResource): Do not try to request using
        invalid URLs.

        * page/DOMWindow.cpp: (WebCore::DOMWindow::postMessage): Updated to call
        SecurityOrigin::createFromString() (no change in behavior).

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

        Rubber-stamped by Dan Bernstein.

        Improve the consistency of settings in our .xcconfig files.

        * Configurations/Base.xcconfig: Enable GCC_OBJC_CALL_CXX_CDTORS to match other projects,
        and handle all cases in GCC_GENERATE_DEBUGGING_SYMBOLS.

2009-01-25  David Hyatt  <hyatt@apple.com>

        Fix for https://bugs.webkit.org/show_bug.cgi?id=23524, lots of missing content in table sections.

        The new table code created a bug involving  markAllDescendantsWithFloatsForLayout, namely that it could
        end up marking ancestors of a block as needing layout when that block was still in the process of
        doing a layout.

        The fix is to add a parameter to markAllDescendantsWithFloatsForLayout that says whether or not
        we are "mid-layout."  If this flag is set, then the method will make sure to do only local dirtying
        of objects to avoid accidentally marking a clean ancestor as needing layout again.

        Ultimately the second parameter to setNeedsLayout and setChildNeedsLayout should just be removed,
        with a check of whether or not we are mid-layout being done by those methods instead.

        Reviewed by Oliver Hunt

        Added fast/repaint/dynamic-table-vertical-alignment-change.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::collapseMargins):
        (WebCore::RenderBlock::clearFloatsIfNeeded):
        (WebCore::RenderBlock::layoutBlockChildren):
        (WebCore::RenderBlock::markAllDescendantsWithFloatsForLayout):
        * rendering/RenderBlock.h:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::removeFromObjectLists):
        * rendering/RenderObject.h:
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::layoutRows):

2009-01-25  Darin Adler  <darin@apple.com>

        Reviewed by Mark Rowe.

        Bug 23352: Turn on more compiler warnings in the Mac build
        https://bugs.webkit.org/show_bug.cgi?id=23352

        Turn on the following warnings:

            -Wcast-qual
            -Wextra-tokens
            -Wformat=2
            -Winit-self
            -Wmissing-noreturn
            -Wpacked
            -Wrendundant-decls

        * Configurations/Base.xcconfig: Added the new warnings. Switched to -Wextra instead of
        -W for clarity since we don't have to support the older versions of gcc that require the
        old -W syntax. Since we now use -Wformat=2, removed -Wformat-security. Also removed
        -Wno-format-y2k since we can have that one on now.

2009-01-25  Dan Bernstein  <mitz@apple.com>

        Reviewed by Oliver Hunt.

        - fix <rdar://problem/6525618> REGRESSION (r39566): NewsFire crashes in
          string hashing code when opening a Digg RSS article

        Test: fast/loader/null-request-after-willSendRequest.html

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadItem): Null-check the request returned from
        the client's willSendRequest method.

2009-01-25  David Hyatt  <hyatt@apple.com>

        Fix for <rdar://problem/6525392> REGRESSION (r40180): Scroll wheel events over text scroll the page
        instead of the ancestor overflow (23525)

        Make sure that we always call scroll() on the nearest enclosing RenderBox.  No test case is possible
        here, since wheel scrolling is currently untestable (the offset varies from machine to machine).

        Reviewed by Dan Bernstein

        * page/EventHandler.cpp:
        (WebCore::scrollAndAcceptEvent):
        (WebCore::EventHandler::scrollOverflow):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::enclosingBox):
        * rendering/RenderObject.h:

2009-01-25  Darin Adler  <darin@apple.com>

        Reviewed by Dan Bernstein.

        Bug 23538: REGRESSION (r39969): Garbage text instead of blank content rendered when plug-ins are disabled
        https://bugs.webkit.org/show_bug.cgi?id=23538
        rdar://problem/6523719

        I'm not sure how to make a regression test for this, since it depends on plug-ins being disabled.

        The main problem here is that when plug-ins were disabled, the code ignored the classId attribute and
        the <embed> element entirely. That resulted in a page treating a Flash document as plain HTML rather
        than doing fallback.

        * rendering/RenderPartObject.cpp:
        (WebCore::createClassIdToTypeMap): Added. Broke this out into a separate function so we could get rid of an
        inelegant if statement.
        (WebCore::activeXType): Added. To avoid repeating the MIME type for ActiveX and possibly having a typo.
        (WebCore::havePlugin): Added. Helper function to make sure we don't forget the null check.
        (WebCore::serviceTypeForClassId): Give this function a return value since that's a more natural way to
        return a string than an "out" parameter.  Fixed the logic to only prefer the ActiveX type over the
        type guessed from the classId when there actually is an ActiveX plug-in to use. The old function assumed
        there was one, which I presume right for Chrome on Windows when plug-ins are enabled, but wrong in many
        other cases, and wrong all the time for all clients on Mac. We don't want to assume either way. Use the
        new havePlugin function so we handle the case where pluginData is 0.
        (WebCore::shouldUseEmbedDescendant): Renamed. Simplified the comment. Changed to use serviceTypeForClassId
        instead of the old version that used an out parameter. Always use the <embed> if there isn't a plug-in
        that knows how to handle <object> elements.
        (WebCore::RenderPartObject::updateWidget): Removed null checks of pluginData. The two functions that
        use this data still need to be called; they still do something even if no plug-ins are present. And
        they have now been corrected to handle 0 properly.

2009-01-25  Darin Adler  <darin@apple.com>

        * rendering/RenderMenuList.cpp: Fix build by adding back needed include.

2009-01-25  Darin Adler  <darin@apple.com>

        Reviewed by Sam Weinig.

        Bug 23352: Turn on more compiler warnings in the Mac build
        https://bugs.webkit.org/show_bug.cgi?id=23352

        Fourth patch: Deal with the last few stray warnings.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::firstLineBlock): Handle the const_cast a little better.
        Also make the local variable be a RenderBlock so the cast is closer to the code
        that guarantees it's correct.

        * rendering/SVGRenderTreeAsText.cpp:
        (WebCore::writeStyle): Put the enum into a local variable that's a built-in
        type before using it with TextStream, so we don't get a warning due to -Wsign-promo.

2009-01-25  Darin Adler  <darin@apple.com>

        Reviewed by Sam Weinig.

        Bug 23522: use checked casts for render tree
        https://bugs.webkit.org/show_bug.cgi?id=23522

        Step one: RenderText.

        Also change set of RenderFlow* to be a ListHashSet as the comment in the
        header indicated.

        * dom/CharacterData.cpp:
        (WebCore::CharacterData::setData): Use toRenderText.
        (WebCore::CharacterData::appendData): Ditto.
        (WebCore::CharacterData::insertData): Ditto.
        (WebCore::CharacterData::deleteData): Ditto.
        (WebCore::CharacterData::replaceData): Ditto.
        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::getUpperLeftCorner): Ditto.
        (WebCore::ContainerNode::getLowerRightCorner): Ditto.
        * dom/Position.cpp:
        (WebCore::nextRenderedEditable): Ditto.
        (WebCore::previousRenderedEditable): Ditto.
        (WebCore::Position::renderedOffset): Ditto. Also use function members
        instead of data members of InlineTextBox.
        (WebCore::Position::upstream): Ditto.
        (WebCore::Position::downstream): Ditto.
        (WebCore::Position::hasRenderedNonAnonymousDescendantsWithHeight): Ditto.
        (WebCore::Position::inRenderedText): Ditto.
        (WebCore::Position::isRenderedCharacter): Ditto.
        (WebCore::searchAheadForBetterMatch): Ditto.
        (WebCore::Position::getInlineBoxAndOffset): Ditto.

        * dom/Range.cpp: Added include of VisiblePosition.h now that it's no longer
        included in RenderObject.h.

        * dom/Text.cpp:
        (WebCore::Text::splitText): Use toRenderText.
        (WebCore::Text::recalcStyle): Ditto.
        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::deleteInsignificantText): Ditto.
        * editing/SelectionController.cpp:
        (WebCore::SelectionController::debugRenderer): Ditto.
        * editing/TextIterator.cpp:
        (WebCore::TextIterator::handleTextNode): Ditto.
        (WebCore::TextIterator::handleTextBox): Ditto.
        (WebCore::TextIterator::emitText): Ditto.
        (WebCore::SimplifiedBackwardsTextIterator::handleTextNode): Ditto.

        * editing/VisiblePosition.cpp: Added include of FloatQuad.h now that it's
        no longer included in RenderObject.h.
        * inspector/InspectorController.cpp: Ditto.
        * page/Frame.cpp: Ditto.
        * rendering/RenderBox.cpp: Ditto.
        * rendering/RenderInline.cpp: Ditto.
        * rendering/RenderPath.cpp: Ditto.
        * rendering/RenderSVGContainer.cpp: Ditto.
        * rendering/RenderSVGImage.cpp: Ditto.
        * rendering/RenderSVGInlineText.cpp: Ditto.
        * rendering/RenderSVGTSpan.cpp: Ditto.
        * rendering/RenderSVGText.cpp: Ditto.
        * rendering/RenderSVGTextPath.cpp: Ditto.
        * rendering/RenderTableCell.cpp: Ditto.
        * rendering/RenderView.cpp: Ditto.

        * editing/visible_units.cpp:
        (WebCore::startPositionForLine): Use function members instead of data
        members of InlineTextBox.
        (WebCore::endPositionForLine): Ditto.
        (WebCore::startOfParagraph): Use toRenderText.
        (WebCore::endOfParagraph): Ditto.

        * page/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::accessibilityIsIgnored): Use toRenderText.
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::placeBoxesHorizontally): Ditto.
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::deleteLine): Ditto.
        (WebCore::InlineTextBox::extractLine): Ditto.
        (WebCore::InlineTextBox::attachLine): Ditto.
        (WebCore::InlineTextBox::placeEllipsisBox): Ditto.
        (WebCore::InlineTextBox::paintDecoration): Ditto.
        (WebCore::InlineTextBox::paintCompositionUnderline): Ditto.
        (WebCore::InlineTextBox::offsetForPosition): Ditto.
        (WebCore::InlineTextBox::positionForOffset): Ditto.

        * rendering/InlineTextBox.h: Made most members private. Use toRenderText.

        * rendering/RenderArena.cpp:
        (WebCore::RenderArena::allocate): Use static_cast instead of C-style cast.
        (WebCore::RenderArena::free): Ditto.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::addContinuationWithOutline): Use ListHashSet<RenderFlow*>
        instead of RenderFlowSequencedSet.
        (WebCore::RenderBlock::paintContinuationOutlines): Ditto.
        (WebCore::stripTrailingSpace): Ditto.
        (WebCore::RenderBlock::calcInlinePrefWidths): Ditto.
        (WebCore::RenderBlock::updateFirstLetter): Ditto.

        * rendering/RenderContainer.cpp:
        (WebCore::RenderContainer::addChild): Use toRenderText.

        * rendering/RenderFlow.cpp:
        (WebCore::RenderFlow::dirtyLinesFromChangedChild): Use ListHashSet<RenderFlow*>
        instead of RenderFlowSequencedSet.
        (WebCore::RenderFlow::paintLines): Ditto.

        * rendering/RenderMenuList.cpp: Removed some unneeded includes.

        * rendering/RenderMenuList.h: Added now-needed forward declaration of RenderText.
        Made more members private.

        * rendering/RenderObject.cpp: Updated includes.
        (WebCore::RenderObject::isEditable): Use toRenderText.
        (WebCore::RenderObject::positionForPoint): Made non-inline so we wouldn't have to
        include VisiblePosition.h in the header just for this.

        * rendering/RenderObject.h: Removed unneeded includes and forward declarations.
        Changed special vertical position values to be constants rather than an enum.
        Eliminated RenderFlowSequencedSet, and changed clients to use ListHashSet<RenderFlow*>.

        * rendering/RenderText.cpp:
        (WebCore::RenderText::findNextInlineTextBox): Use function members instead of
        data members of InlineTextBox.
        (WebCore::RenderText::positionForCoordinates): Ditto.
        (WebCore::isInlineFlowOrEmptyText): Use toRenderText.
        (WebCore::RenderText::previousCharacter): Use function members instead of
        data members of InlineTextBox.
        (WebCore::RenderText::position): Ditto.
        (WebCore::RenderText::caretMinOffset): Ditto.
        (WebCore::RenderText::caretMaxOffset): Ditto.
        (WebCore::RenderText::caretMaxRenderedOffset): Ditto.

        * rendering/RenderText.h: Added definition of toRenderText.

        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::textWithHardLineBreaks): Use toRenderText.
        * rendering/RenderTreeAsText.cpp:
        (WebCore::operator<<): Use toRenderText and toRenderBox.
        (WebCore::writeTextRun): Ditto.
        (WebCore::write): Ditto.

        * rendering/bidi.cpp:
        (WebCore::InlineIterator::increment): Use toRenderText.
        (WebCore::InlineIterator::current): Ditto.
        (WebCore::checkMidpoints): Ditto.
        (WebCore::RenderBlock::computeHorizontalPositionsForLine): Ditto.
        (WebCore::RenderBlock::layoutInlineChildren): Ditto.
        (WebCore::RenderBlock::determineStartPosition): Ditto.
        (WebCore::shouldSkipWhitespaceAfterStartObject): Ditto.
        (WebCore::RenderBlock::findNextLineBreak): Ditto.

2009-01-25  Thiago Macieira  <thiago.macieira@nokia.com>

        Reviewed by Simon Hausmann.

        Fix gcc compiler warning (deprecated conversion from constant string to char*)

        "" cannot be stored in a char*

        * plugins/PluginStream.cpp:
        (WebCore::PluginStream::destroyStream):

2009-01-24  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin Adler.

        <rdar://problem/5954398> REGRESSION: 1.1% PLT regression from 33577 and 33578 (encoding fixes)

        Changed single argument KURL constructors back to always expect an already encoded string,
        eliminating extra conversions.

        This is a rather unstable situation, as it is often unclear whether a given string is safe
        to convert to KURL without resolving. I think that going forward, the solution is to try to
        keep encoded URLs as KURL instances, and not as strings.

        * platform/KURL.h: Updated comments.

        * platform/KURL.cpp:
        (WebCore::KURL::KURL): In debug builds, verify that the passed string is ASCII-only. The
        intention is to verify that it is already parsed and encoded by KURL or equivalent code, but
        since encoding is scheme-dependent, such a verification would be quite complicated.
        Don't encode the string as UTF-8, as it supposed to be ASCII-only.
        Removed a hack that made strings beginning with "/" turn into "file:" URLs. I didn't find
        any reason for it to exist, but I saw several cases where this code path was taken
        inadvertently (see examples in LayoutTests/ChangeLog).
        (WebCore::KURL::setProtocol): Using a user-provided string without validation or encoding
        is clearly wrong here (e.g., the "protocol" can be set to a full URL, effectively replacing
        the old one), and an already encoded string is expected by parse().
        In debug builds, non-ASCII input will make an assertion in parse() fail. Added a FIXME.
        (WebCore::KURL::setHost): Ditto.
        (WebCore::KURL::setPort): Ditto.
        (WebCore::KURL::setHostAndPort): Ditto.
        (WebCore::KURL::setUser): Ditto.
        (WebCore::KURL::setPass): Ditto.
        (WebCore::KURL::setRef): Ditto.
        (WebCore::KURL::setQuery): Ditto.
        (WebCore::KURL::setPath): Ditto.
        (WebCore::KURL::parse): Verify that the passed string is already encoded.

        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::parseMappedAttribute):
        (WebCore::HTMLLinkElement::process):
        * html/HTMLLinkElement.h:
        Changed to avoid using invalid URLs (this was causing problems on DNS prefetch tests, see
        LayoutTests/ChangeLog).

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::init): Create an empty KURL without indirection for a small speedup.
        (WebCore::FrameLoader::requestFrame): Resolve and encode javascript URLs properly, now that
        String to KURL conversion requires the string to be already encoded.

        * page/DOMWindow.cpp: (WebCore::DOMWindow::postMessage): Resolve and encode the origin.
        HTML5 seems a little unclear on how this should work (it talks about "either parsing it as
        a URL, or resolving it", and then somehow compares unaltered targetOrigin string to a
        security origin object), so I just made the code as close to what we already had as possible.

2009-01-24  Darin Adler  <darin@apple.com>

        Try to fix Qt build.

        * WebCore.pro: Added JSTextCustom.cpp.

2009-01-23  Chris Marrin  <cmarrin@apple.com>

        Reviewed by David Hyatt.

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

        Change styleAvailable functionality to be a linked list
        rather than scanning every CompositeAnimation for
        Animations that are waiting for styleAvailable. This has
        potential for large performance improvement in cases where
        there are many animations firing at once. But it will also
        help in my next fix, which is to synchronize software and
        accelerated animations.

        I also changed slightly when the beginAnimationUpdate and
        endAnimationUpdate calls are made. But this has no real
        effect on performance or behavior.

        * dom/Document.cpp:
        (WebCore::Document::recalcStyle):
        (WebCore::Document::updateRendering):
        * page/animation/AnimationBase.cpp:
        (WebCore::AnimationBase::AnimationBase):
        (WebCore::AnimationBase::~AnimationBase):
        (WebCore::AnimationBase::updateStateMachine):
        * page/animation/AnimationBase.h:
        (WebCore::AnimationBase::next):
        (WebCore::AnimationBase::setNext):
        (WebCore::AnimationBase::styleAvailable):
        * page/animation/AnimationController.cpp:
        (WebCore::AnimationControllerPrivate::AnimationControllerPrivate):
        (WebCore::AnimationControllerPrivate::addToStyleAvailableWaitList):
        (WebCore::AnimationControllerPrivate::removeFromStyleAvailableWaitList):
        (WebCore::AnimationControllerPrivate::styleAvailable):
        (WebCore::AnimationController::AnimationController):
        (WebCore::AnimationController::endAnimationUpdate):
        (WebCore::AnimationController::addToStyleAvailableWaitList):
        (WebCore::AnimationController::removeFromStyleAvailableWaitList):
        * page/animation/AnimationController.h:
        * page/animation/CompositeAnimation.cpp:
        (WebCore::CompositeAnimationPrivate::addToStyleAvailableWaitList):
        (WebCore::CompositeAnimationPrivate::removeFromStyleAvailableWaitList):
        (WebCore::CompositeAnimation::addToStyleAvailableWaitList):
        (WebCore::CompositeAnimation::removeFromStyleAvailableWaitList):
        * page/animation/CompositeAnimation.h:

2009-01-24  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin Adler.

        <rdar://problem/6368059> REGRESSION: URL encoding problems on http://www.cineman.ch

        Test: http/tests/xmlhttprequest/encode-request-url-2.html

        * platform/KURL.cpp:
        (WebCore::appendASCII): Added a helper function.
        (WebCore::KURL::KURL): Explicitly encode the URL to call two-argument parse() with better
        specified behavior.
        (WebCore::KURL::init): Ditto. This avoids trying to round-trip an URL encoded into a byte
        stream, but not yet transformed to ASCII-only using percent escapes. Since different parts
        of the byte stream can use different encodings, round-tripping is not possible.
        (WebCore::KURL::parse): Reverted an earlier change that made the single-argument version of
        this function convert the string to utf-8. I think that on the remanining code paths, it is
        correct to assume that the string is all ASCII, but I'm not yet confident enough to drop a
        FIXME warning.

2009-01-24  Jan Michael Alonzo  <jmalonzo@webkit.org>

        Gtk build fix after r40170

        * GNUmakefile.am: Removed editing/RemoveNodeAttributeCommand.cpp
        and editing/RemoveNodeAttributeCommand.h

2009-01-23  Adam Treat  <adam.treat@torchmobile.com>

        Fix the Qt build after r40205.

        * WebCore.pro:

2009-01-23  Brady Eidson  <beidson@apple.com>

        Reviewed by Darin Adler

        In CachedPage, break off per-Frame pieces of data into a CachedFrame object.

        * GNUmakefile.am:
        * WebCore.base.exp:
        * WebCore.pro:
        * WebCore.scons:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:

        * history/CachedFrame.cpp: Added.
        (WebCore::cachedFrameCounter):
        (WebCore::CachedFrame::CachedFrame):
        (WebCore::CachedFrame::~CachedFrame):
        (WebCore::CachedFrame::restore):
        (WebCore::CachedFrame::clear):
        (WebCore::CachedFrame::setCachedFramePlatformData):
        (WebCore::CachedFrame::cachedFramePlatformData):
        * history/CachedFrame.h: Added.
        (WebCore::CachedFrame::document):
        (WebCore::CachedFrame::documentLoader):
        (WebCore::CachedFrame::view):
        (WebCore::CachedFrame::mousePressNode):
        (WebCore::CachedFrame::url):
        (WebCore::CachedFrame::domWindow):

        * history/CachedPage.cpp:
        (WebCore::CachedPage::CachedPage):
        (WebCore::CachedPage::restore):
        (WebCore::CachedPage::clear):
        (WebCore::CachedPage::setCachedFramePlatformData):
        (WebCore::CachedPage::cachedFramePlatformData):
        * history/CachedPage.h:
        (WebCore::CachedPage::document):
        (WebCore::CachedPage::documentLoader):
        (WebCore::CachedPage::view):
        (WebCore::CachedPage::mousePressNode):
        (WebCore::CachedPage::url):
        (WebCore::CachedPage::domWindow):

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::cachePageForHistoryItem): Setting the DocumentLoader independently of
          creating a CachedPage was a historical relic.  Take the opportunity to clean that up.

2009-01-23  David Hyatt  <hyatt@apple.com>

        Add ASSERTs to catch anyone trying to obtain the width/height of an inline flow.  Fix up all the places
        that triggered the ASSERT (since all of these places are effectively regressions from my landing that
        devirtualized width()/height()).

        Reviewed by Adele

        * dom/Position.cpp:
        (WebCore::Position::hasRenderedNonAnonymousDescendantsWithHeight):
        * editing/DeleteButtonController.cpp:
        (WebCore::isDeletableElement):
        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::isKeyboardFocusable):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::clientWidth):
        (WebCore::RenderBox::clientHeight):
        (WebCore::RenderBox::scrollWidth):
        (WebCore::RenderBox::scrollHeight):
        (WebCore::RenderBox::absoluteOutlineBounds):
        * rendering/RenderBox.h:
        (WebCore::RenderBox::width):
        (WebCore::RenderBox::height):
        (WebCore::RenderBox::size):
        (WebCore::RenderBox::frameRect):
        (WebCore::RenderBox::borderBoundingBox):
        * rendering/RenderFlow.h:
        (WebCore::RenderFlow::borderBoundingBox):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateLayerPosition):
        * rendering/RenderScrollbarPart.cpp:
        (WebCore::RenderScrollbarPart::styleWillChange):
        * rendering/RenderScrollbarPart.h:
        * wml/WMLAElement.cpp:
        (WebCore::WMLAElement::isKeyboardFocusable):

2009-01-23  Darin Adler  <darin@apple.com>

        Reviewed by Anders Carlsson.

        Bug 23352: Turn on more compiler warnings in the Mac build
        https://bugs.webkit.org/show_bug.cgi?id=23352

        Second patch: Slightly less simple cases of various warnings.

        * bridge/jni/jni_runtime.h:
        (JSC::Bindings::JavaString::_commonInit): Use reinterpret_cast here and avoid casting
        away const.

        * dom/XMLTokenizerLibxml2.cpp:
        (WebCore::PendingCallbacks::appendStartElementNSCallback): Use static_cast instead of
        reinterpret_cast; this is casting the result of malloc, and the idiom is to use
        static_cast, which works because we're casting from void*.
        (WebCore::PendingCallbacks::PendingStartElementNSCallback::call): Use const_cast instead
        C-style casts.

        * xml/XSLTUnicodeSort.cpp:
        (inlineXSLTTransformError): Tweak soft linking of xsltTransformError to use a macro
        instead of redefining the function.

2009-01-23  Darin Adler  <darin@apple.com>

        Reviewed by Anders Carlsson.

        Bug 23475: fast/text/find-backwards.html fails with ICU disabled SearchBuffer
        https://bugs.webkit.org/show_bug.cgi?id=23475

        * editing/TextIterator.cpp:
        (WebCore::SearchBuffer::search): Set the character start flag to false to
        ensure we won't ever return the same result twice. There are other ways we
        could accomplish this, mentioned in the comment, but this one was the smallest
        and cleanest I could think of.

2009-01-23  Darin Adler  <darin@apple.com>

        Reviewed by Anders Carlsson.

        Bug 23510: REGRESSION (r40171): CDATASection objects not getting proper JavaScript wrappers
        https://bugs.webkit.org/show_bug.cgi?id=23510

        That patch fixed the optimization that's supposed to give a faster path for
        allocating the wrappers for DOM Text objects. But CDATASection is the one
        subclass of Text objects.

        * GNUmakefile.am: Added JSCDATASectionCustom.cpp.
        * WebCore.scons: Ditto.
        * WebCore.vcproj/WebCore.vcproj: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * WebCoreSources.bkl: Ditto.

        * bindings/js/JSCDATASectionCustom.cpp: Copied from bindings/js/JSTextCustom.cpp.
        (WebCore::toJSNewlyCreated): Changed to do CDATASection, not Text.

        * bindings/scripts/CodeGeneratorJS.pm: Added another toJSNewlyCreated function
        for CDATASection. We don't want to have to check when creating a wrapper for a
        Text object whether it's a CDATASection object or not, so we need to do this overload
        at compile time.

2009-01-23  Nikolas Zimmermann  <nikolas.zimmermann@torchmobile.com>

        Reviewed by Eric Seidel.

        Add a base class for WML form control elements: WMLFormControlElement (as it's designed in HTML as well).
        WMLFormControlElement inherits from WMLElement and FormControlElement (just like the HTMLFormControlElement equivalent).

        WMLInputElement / WMLOptionElement / WMLOptGroupElement are supposed to inherit from the new WMLFormControlElement class.
        Now WMLInputElement & WMLOptGroupElement only inherit from WMLElement and FormControlElement, but WMLOptionElement inherits
        from WMLEventHandlingElement (which in turn inherits from WMLElement) and FormControlElement. In order to introduce a shared
        base class, WMLEventHandlingElement is no longer allowed to inherit from WMLElement directly. Instead it should turn into
        another base class, just like FormControlElement.

        Add a base class for form control elements 'with state': FormControlElementWithState, serving as base class for
        HTMLFormControlElementWithState and WMLFormControlElementWithState. -> Make Document operate on FormControlElementWithState
        objects instead of HTMLFormControlElementWithState objects, to support save/restore control state for non HTMLFormControlElements.

        Rename isGenericFormElement() to isFormControlElement(), and move it to Element.h
        Add new virtual function isFormControlElementWithState() to Element.h.

        * GNUmakefile.am:
        * WebCore.order:
        * WebCore.pro:
        * WebCore.scons:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * dom/Document.cpp:
        (WebCore::Document::formElementsState):
        * dom/Document.h:
        (WebCore::Document::registerFormElementWithState):
        (WebCore::Document::unregisterFormElementWithState):
        * dom/Element.h:
        (WebCore::Element::isFormControlElement):
        (WebCore::Element::isFormControlElementWithState):
        * dom/FormControlElement.cpp:
        (WebCore::toFormControlElement):
        * dom/FormControlElement.h:
        * dom/FormControlElementWithState.cpp: Added.
        (WebCore::FormControlElementWithState::registerFormControlElementWithState):
        (WebCore::FormControlElementWithState::unregisterFormControlElementWithState):
        (WebCore::FormControlElementWithState::finishParsingChildren):
        (WebCore::toFormControlElementWithState):
        * dom/FormControlElementWithState.h: Added.
        (WebCore::FormControlElementWithState::~FormControlElementWithState):
        (WebCore::FormControlElementWithState::FormControlElementWithState):
        * html/HTMLElement.h:
        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElementWithState::HTMLFormControlElementWithState):
        (WebCore::HTMLFormControlElementWithState::~HTMLFormControlElementWithState):
        (WebCore::HTMLFormControlElementWithState::willMoveToNewOwnerDocument):
        (WebCore::HTMLFormControlElementWithState::didMoveToNewOwnerDocument):
        * html/HTMLFormControlElement.h:
        (WebCore::HTMLFormControlElement::isFormControlElement):
        (WebCore::HTMLFormControlElementWithState::isFormControlElementWithState):
        (WebCore::HTMLFormControlElementWithState::toFormControlElement):
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::formElementIndex):
        * html/HTMLLabelElement.cpp:
        (WebCore::HTMLLabelElement::correspondingControl):
        * html/HTMLLegendElement.cpp:
        (WebCore::HTMLLegendElement::formElement):
        * page/Frame.cpp:
        (WebCore::Frame::searchForLabelsBeforeElement):
        (WebCore::scanForForm):
        (WebCore::Frame::currentForm):
        * page/mac/FrameMac.mm:
        (WebCore::Frame::searchForLabelsBeforeElement):
        * wml/WMLCardElement.cpp:
        (WebCore::WMLCardElement::WMLCardElement):
        (WebCore::WMLCardElement::parseMappedAttribute):
        (WebCore::WMLCardElement::insertedIntoDocument):
        * wml/WMLCardElement.h:
        * wml/WMLDoElement.cpp:
        (WebCore::WMLDoElement::insertedIntoDocument):
        * wml/WMLElement.h:
        (WebCore::WMLElement::isWMLElement):
        * wml/WMLEventHandlingElement.cpp:
        (WebCore::WMLEventHandlingElement::WMLEventHandlingElement):
        (WebCore::WMLEventHandlingElement::registerDoElement):
        (WebCore::toWMLEventHandlingElement):
        * wml/WMLEventHandlingElement.h:
        * wml/WMLFormControlElement.cpp: Added.
        (WebCore::WMLFormControlElement::WMLFormControlElement):
        (WebCore::WMLFormControlElement::~WMLFormControlElement):
        (WebCore::WMLFormControlElementWithState::WMLFormControlElementWithState):
        (WebCore::WMLFormControlElementWithState::~WMLFormControlElementWithState):
        * wml/WMLFormControlElement.h: Added.
        (WebCore::WMLFormControlElement::isFormControlElement):
        (WebCore::WMLFormControlElement::valueMatchesRenderer):
        (WebCore::WMLFormControlElement::setValueMatchesRenderer):
        (WebCore::WMLFormControlElement::name):
        (WebCore::WMLFormControlElementWithState::isFormControlElementWithState):
        (WebCore::WMLFormControlElementWithState::toFormControlElement):
        * wml/WMLInputElement.cpp:
        (WebCore::WMLInputElement::WMLInputElement):
        (WebCore::WMLInputElement::type):
        * wml/WMLInputElement.h:
        * wml/WMLOnEventElement.cpp:
        (WebCore::WMLOnEventElement::registerTask):
        * wml/WMLOptGroupElement.cpp:
        (WebCore::WMLOptGroupElement::WMLOptGroupElement):
        (WebCore::WMLOptGroupElement::type):
        * wml/WMLOptGroupElement.h:
        * wml/WMLOptionElement.cpp:
        (WebCore::WMLOptionElement::WMLOptionElement):
        (WebCore::WMLOptionElement::type):
        * wml/WMLOptionElement.h:
        * wml/WMLTemplateElement.cpp:
        (WebCore::WMLTemplateElement::WMLTemplateElement):
        (WebCore::WMLTemplateElement::parseMappedAttribute):
        * wml/WMLTemplateElement.h:

2009-01-23  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Darin Adler.

        Bug 23509: Crash at -[WebCoreAXObject doAXNextSentenceEndTextMarkerForTextMarker:]
        https://bugs.webkit.org/show_bug.cgi?id=23509

        Add null checking in makeRange instead of AX code

        * editing/VisiblePosition.cpp:
        (WebCore::makeRange):
        * page/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::nextSentenceEndPosition):
        (WebCore::AccessibilityObject::previousSentenceStartPosition):

2009-01-23  Adam Treat  <adam.treat@torchmobile.com>

        Fix the Gtk build too after removal of RenderBox::toConstRenderBox

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

2009-01-23  Adam Treat  <adam.treat@torchmobile.com>

        Fix the Qt build after rename of RenderBox::toConstRenderBox -> toRenderBox

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

2009-01-23  Adam Treat  <adam.treat@torchmobile.com>

        Fix the Qt build after r40168.

        * WebCore.pro:

2009-01-23  Brady Eidson  <beidson@apple.com>

        Rubberstamped by Darin Adler

        Rename CachedPagePlatformData to CachedFramePlatformData to more accurately reflect its true role.

        * GNUmakefile.am:
        * WebCore.base.exp:
        * WebCore.order:
        * WebCore.xcodeproj/project.pbxproj:

        * history/CachedFramePlatformData.h: Copied from WebCore/history/CachedPagePlatformData.h.
        (WebCore::CachedFramePlatformData::~CachedFramePlatformData):
        * history/CachedPagePlatformData.h: Removed.

        * history/CachedPage.cpp:
        (WebCore::CachedPage::clear):
        (WebCore::CachedPage::setCachedFramePlatformData):
        (WebCore::CachedPage::cachedFramePlatformData):
        * history/CachedPage.h:

2009-01-23  Kevin Watters  <kevinwatters@gmail.com>

        Reviewed by Kevin Ollivier.

        Fix drawing in situations where sub-portions of the bitmap are to be
        drawn to the screen.

        * platform/graphics/wx/ImageWx.cpp:
        (WebCore::BitmapImage::draw):

2009-01-23  Kevin Ollivier  <kevino@theolliviers.com>

        Build fixes for recent changes.

        * WebCoreSources.bkl:
        * plugins/PluginView.cpp:
        (WebCore::PluginView::invalidateWindowlessPluginRect):

2009-01-23  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Adele Peterson

        Fix for https://bugs.webkit.org/show_bug.cgi?id=23407

        Implement QTMovieWin::hasVideo so the controller on an audio-only <video> element
        is never hidden (as with an <audio> element).

        Test: media/video-controls-visible-audio-only.html

        * platform/graphics/win/MediaPlayerPrivateQuickTimeWin.cpp:
        (WebCore::MediaPlayerPrivate::hasVideo):
        * platform/graphics/win/QTMovieWin.cpp:
        (QTMovieWin::hasVideo):
        * platform/graphics/win/QTMovieWin.h:

2009-01-23  David Hyatt  <hyatt@apple.com>

        Make toRenderBox a non-member function.  Rename toConstRenderBox to just also be called toRenderBox.

        Reviewed by Oliver Hunt

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::sizingBox):
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::getUpperLeftCorner):
        (WebCore::ContainerNode::getLowerRightCorner):
        * dom/Element.cpp:
        (WebCore::Element::scrollByUnits):
        * dom/Position.cpp:
        (WebCore::endsOfNodeAreVisuallyDistinctPositions):
        (WebCore::Position::hasRenderedNonAnonymousDescendantsWithHeight):
        (WebCore::Position::isCandidate):
        * editing/DeleteButtonController.cpp:
        (WebCore::isDeletableElement):
        * editing/EditorCommand.cpp:
        (WebCore::verticalScrollDistance):
        * editing/TextIterator.cpp:
        (WebCore::shouldEmitExtraNewlineForNode):
        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::isKeyboardFocusable):
        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::isFocusable):
        * html/HTMLFrameElementBase.cpp:
        (WebCore::HTMLFrameElementBase::width):
        (WebCore::HTMLFrameElementBase::height):
        * page/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::doAccessibilityHitTest):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleMouseDraggedEvent):
        (WebCore::EventHandler::autoscrollTimerFired):
        (WebCore::EventHandler::updateAutoscrollRenderer):
        (WebCore::EventHandler::stopAutoscrollTimer):
        (WebCore::EventHandler::scrollOverflow):
        * page/FrameView.cpp:
        (WebCore::FrameView::layout):
        * page/animation/AnimationBase.cpp:
        (WebCore::blendFunc):
        * rendering/InlineBox.cpp:
        (WebCore::InlineBox::adjustPosition):
        * rendering/InlineBox.h:
        (WebCore::InlineBox::renderBox):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::clearFloats):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::offsetFromContainer):
        (WebCore::RenderBox::computeAbsoluteRepaintRect):
        (WebCore::RenderBox::containingBlockWidthForPositioned):
        (WebCore::RenderBox::containingBlockHeightForPositioned):
        (WebCore::RenderBox::calcAbsoluteHorizontal):
        (WebCore::RenderBox::calcAbsoluteVertical):
        (WebCore::RenderBox::calcAbsoluteHorizontalReplaced):
        (WebCore::RenderBox::calcAbsoluteVerticalReplaced):
        * rendering/RenderBox.h:
        (WebCore::toRenderBox):
        (WebCore::RenderBox::previousSiblingBox):
        (WebCore::RenderBox::nextSiblingBox):
        (WebCore::RenderBox::parentBox):
        * rendering/RenderFlow.cpp:
        (WebCore::RenderFlow::absoluteClippedOverflowRect):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateLayerPosition):
        (WebCore::RenderLayer::resize):
        (WebCore::RenderLayer::boundingBox):
        * rendering/RenderObject.cpp:
        (WebCore::addLayers):
        (WebCore::RenderObject::removeLayers):
        (WebCore::RenderObject::moveLayers):
        (WebCore::RenderObject::findNextLayer):
        (WebCore::RenderObject::enclosingLayer):
        (WebCore::RenderObject::setNeedsLayout):
        (WebCore::RenderObject::setNeedsPositionedMovementLayout):
        (WebCore::RenderObject::repaintAfterLayoutIfNeeded):
        (WebCore::RenderObject::getAbsoluteRepaintRectWithOutline):
        (WebCore::RenderObject::computeAbsoluteRepaintRect):
        (WebCore::RenderObject::localToAbsolute):
        (WebCore::RenderObject::absoluteToLocal):
        (WebCore::RenderObject::localToAbsoluteQuad):
        (WebCore::RenderObject::offsetFromContainer):
        (WebCore::RenderObject::removeFromObjectLists):
        (WebCore::RenderObject::destroy):
        (WebCore::RenderObject::updateHitTestResult):
        (WebCore::RenderObject::addDashboardRegions):
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::layoutRows):
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::hitTestMediaControlPart):
        (WebCore::RenderTheme::baselinePosition):
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::hitTestMediaControlPart):
        * rendering/RenderTreeAsText.cpp:
        (WebCore::externalRepresentation):
        * rendering/bidi.cpp:
        (WebCore::inlineWidth):
        (WebCore::RenderBlock::computeHorizontalPositionsForLine):
        (WebCore::requiresLineBox):
        (WebCore::RenderBlock::findNextLineBreak):
        * svg/SVGLength.cpp:
        (WebCore::SVGLength::PercentageOfViewport):
        * wml/WMLAElement.cpp:
        (WebCore::WMLAElement::isKeyboardFocusable):
        * wml/WMLInputElement.cpp:
        (WebCore::isInputFocusable):

2009-01-23  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Beth Dakin.

        Bug 23509: Crash at -[WebCoreAXObject doAXNextSentenceEndTextMarkerForTextMarker:]
        https://bugs.webkit.org/show_bug.cgi?id=23509

        Add null checking around next/previous sentence retrieval in AX code

        * page/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::nextSentenceEndPosition):
        (WebCore::AccessibilityObject::previousSentenceStartPosition):

2009-01-23  David Hyatt  <hyatt@apple.com>

        Fix for <rdar://problem/6518850> REGRESSION: hover feedback not showing on many sites

        Inline flow repainting was broken because it relied on width() and height().  Give RenderFlow a linesBoundingBox
        method for obtaining a reasonable bounding box to use for repainting.  Eliminate the methods from RenderInline
        since compacts/run-ins need them too, so putting them on RenderFlow is necessary.

        For consistency, change RenderText's version of these methods into the single linesBoundingBox method as
        well.

        Reviewed by Oliver Hunt

        * WebCore.base.exp:
        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::getUpperLeftCorner):
        (WebCore::ContainerNode::getLowerRightCorner):
        * dom/Position.cpp:
        (WebCore::Position::hasRenderedNonAnonymousDescendantsWithHeight):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::containingBlockHeightForPositioned):
        * rendering/RenderFlow.cpp:
        (WebCore::RenderFlow::absoluteClippedOverflowRect):
        (WebCore::RenderFlow::linesBoundingBox):
        * rendering/RenderFlow.h:
        * rendering/RenderInline.cpp:
        * rendering/RenderInline.h:
        (WebCore::RenderInline::offsetWidth):
        (WebCore::RenderInline::offsetHeight):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateLayerPosition):
        * rendering/RenderText.cpp:
        (WebCore::RenderText::linesBoundingBox):
        * rendering/RenderText.h:
        * rendering/RenderTreeAsText.cpp:
        (WebCore::operator<<):
        * rendering/SVGRenderTreeAsText.cpp:
        (WebCore::write):

2009-01-23  David Hyatt  <hyatt@apple.com>

        Move layer() into RenderBox and make it non-virtual.  Move all of the scrolling functions from RenderObject
        to RenderBox and devirtualize as many as possible.  Clean up styleWillChange to factor code specific to
        RenderBox and RenderBlock into their appropriate subclasses.  Stubbed out an empty styleWillChange on
        RenderText, since none of the work done in styleWillChange was relevant to text nodes.

        Reviewed by Sam Weinig

        * dom/Document.cpp:
        (WebCore::Document::elementFromPoint):
        (WebCore::Document::renderView):
        (WebCore::Document::prepareMouseEvent):
        * dom/Document.h:
        * dom/Element.cpp:
        (WebCore::Element::scrollByUnits):
        * editing/SelectionController.cpp:
        (WebCore::SelectionController::contains):
        * html/HTMLMarqueeElement.cpp:
        (WebCore::HTMLMarqueeElement::start):
        (WebCore::HTMLMarqueeElement::stop):
        * page/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::topRenderer):
        (WebCore::AccessibilityRenderObject::visiblePositionForPoint):
        (WebCore::AccessibilityRenderObject::doAccessibilityHitTest):
        * page/AccessibilityRenderObject.h:
        * page/EventHandler.cpp:
        (WebCore::scrollAndAcceptEvent):
        (WebCore::EventHandler::handleMousePressEvent):
        (WebCore::EventHandler::handleMouseDraggedEvent):
        (WebCore::EventHandler::updateSelectionForMouseDrag):
        (WebCore::EventHandler::autoscrollTimerFired):
        (WebCore::EventHandler::updateAutoscrollRenderer):
        (WebCore::EventHandler::stopAutoscrollTimer):
        (WebCore::EventHandler::scrollOverflow):
        (WebCore::EventHandler::handleWheelEvent):
        (WebCore::EventHandler::hoverTimerFired):
        * page/Frame.cpp:
        (WebCore::Frame::clearTimers):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::styleWillChange):
        * rendering/RenderBlock.h:
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::styleWillChange):
        (WebCore::RenderBox::verticalScrollbarWidth):
        (WebCore::RenderBox::horizontalScrollbarHeight):
        (WebCore::RenderBox::scroll):
        (WebCore::RenderBox::canBeProgramaticallyScrolled):
        (WebCore::RenderBox::autoscroll):
        (WebCore::RenderBox::panScroll):
        (WebCore::RenderBox::offsetFromContainer):
        (WebCore::RenderBox::computeAbsoluteRepaintRect):
        * rendering/RenderBox.h:
        (WebCore::RenderBox::layer):
        (WebCore::RenderBox::requiresLayer):
        (WebCore::RenderBox::stopAutoscroll):
        (WebCore::RenderBox::hasAutoVerticalScrollbar):
        (WebCore::RenderBox::hasAutoHorizontalScrollbar):
        (WebCore::RenderBox::scrollsOverflow):
        (WebCore::RenderBox::scrollsOverflowX):
        (WebCore::RenderBox::scrollsOverflowY):
        (WebCore::RenderBox::includeVerticalScrollbarSize):
        (WebCore::RenderBox::includeHorizontalScrollbarSize):
        * rendering/RenderFlow.cpp:
        (WebCore::RenderFlow::absoluteClippedOverflowRect):
        (WebCore::RenderFlow::addFocusRingRects):
        * rendering/RenderForeignObject.cpp:
        * rendering/RenderForeignObject.h:
        (WebCore::RenderForeignObject::requiresLayer):
        * rendering/RenderInline.cpp:
        * rendering/RenderInline.h:
        (WebCore::RenderInline::requiresLayer):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::childrenClipRect):
        (WebCore::RenderLayer::selfClipRect):
        * rendering/RenderListBox.cpp:
        * rendering/RenderListBox.h:
        * rendering/RenderObject.cpp:
        (WebCore::addLayers):
        (WebCore::RenderObject::removeLayers):
        (WebCore::RenderObject::moveLayers):
        (WebCore::RenderObject::findNextLayer):
        (WebCore::RenderObject::enclosingLayer):
        (WebCore::RenderObject::setNeedsLayout):
        (WebCore::RenderObject::setNeedsPositionedMovementLayout):
        (WebCore::RenderObject::computeAbsoluteRepaintRect):
        (WebCore::RenderObject::styleWillChange):
        (WebCore::RenderObject::localToAbsolute):
        (WebCore::RenderObject::absoluteToLocal):
        (WebCore::RenderObject::localToAbsoluteQuad):
        (WebCore::RenderObject::offsetFromContainer):
        (WebCore::RenderObject::destroy):
        * rendering/RenderObject.h:
        * rendering/RenderPath.cpp:
        * rendering/RenderPath.h:
        (WebCore::RenderPath::requiresLayer):
        * rendering/RenderReplica.h:
        (WebCore::RenderReplica::requiresLayer):
        * rendering/RenderSVGContainer.cpp:
        * rendering/RenderSVGContainer.h:
        (WebCore::RenderSVGContainer::requiresLayer):
        * rendering/RenderSVGHiddenContainer.cpp:
        * rendering/RenderSVGHiddenContainer.h:
        (WebCore::RenderSVGHiddenContainer::requiresLayer):
        * rendering/RenderSVGImage.cpp:
        * rendering/RenderSVGImage.h:
        (WebCore::RenderSVGImage::requiresLayer):
        * rendering/RenderSVGInline.h:
        (WebCore::RenderSVGInline::requiresLayer):
        * rendering/RenderSVGInlineText.h:
        (WebCore::RenderSVGInlineText::requiresLayer):
        * rendering/RenderSVGText.cpp:
        * rendering/RenderSVGText.h:
        (WebCore::RenderSVGText::requiresLayer):
        * rendering/RenderScrollbarPart.h:
        (WebCore::RenderScrollbarPart::requiresLayer):
        * rendering/RenderSlider.cpp:
        (WebCore::RenderSlider::setCurrentPosition):
        * rendering/RenderTableCell.cpp:
        * rendering/RenderTableCell.h:
        (WebCore::RenderTableCell::requiresLayer):
        * rendering/RenderTableCol.h:
        (WebCore::RenderTableCol::requiresLayer):
        * rendering/RenderTableRow.h:
        (WebCore::RenderTableRow::requiresLayer):
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::layoutRows):
        * rendering/RenderText.h:
        (WebCore::RenderText::styleWillChange):
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::autoscroll):
        (WebCore::RenderTextControl::scroll):
        * rendering/RenderTextControl.h:
        * rendering/RenderTreeAsText.cpp:
        (WebCore::write):
        (WebCore::externalRepresentation):

2009-01-23  Anders Carlsson  <andersca@apple.com>

        Fix tyop.

        * editing/markup.cpp:
        (WebCore::joinMarkups):

2009-01-23  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin Adler.

        * Configurations/Base.xcconfig:
        Fix GCC 4.0 build.

        * editing/markup.cpp:
        (WebCore::joinMarkups):
        Pass a const reference to the vector.

        * html/HTMLElement.cpp:
        * platform/text/String.cpp:
        Add comments indicating that these functions are for use in the debugger.

2009-01-23  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Turn on -Wmissing-prototypes and fix the resulting warnings.

        * Configurations/Base.xcconfig:
        * bindings/js/JSHistoryCustom.cpp:
        (WebCore::nonCachingStaticBackFunctionGetter):
        (WebCore::nonCachingStaticForwardFunctionGetter):
        (WebCore::nonCachingStaticGoFunctionGetter):
        * bindings/js/JSLocationCustom.cpp:
        (WebCore::nonCachingStaticReplaceFunctionGetter):
        (WebCore::nonCachingStaticReloadFunctionGetter):
        (WebCore::nonCachingStaticAssignFunctionGetter):
        (WebCore::JSLocation::customGetOwnPropertySlot):
        * bindings/objc/DOMRGBColor.mm:
        (WebCore::getWrapperForRGB):
        (WebCore::setWrapperForRGB):
        (WebCore::removeWrapperForRGB):
        * bindings/scripts/CodeGeneratorJS.pm:
        * bridge/c/c_instance.cpp:
        (JSC::Bindings::globalExceptionString):
        * bridge/runtime_object.cpp:
        (JSC::callRuntimeConstructor):
        * css/CSSParser.cpp:
        (WebCore::parseGradientColorStop):
        * css/CSSPrimitiveValue.cpp:
        (WebCore::scaleFactorForConversion):
        * css/CSSStyleSelector.cpp:
        (WebCore::operator >):
        (WebCore::operator <=):
        (WebCore::getTransformOperationType):
        * dom/make_names.pl:
        * editing/DeleteSelectionCommand.cpp:
        (WebCore::updatePositionForTextRemoval):
        * editing/EditorCommand.cpp:
        (WebCore::valueBackColor):
        (WebCore::valueFontName):
        (WebCore::valueFontSize):
        (WebCore::valueFontSizeDelta):
        (WebCore::valueForeColor):
        * editing/VisiblePosition.cpp:
        (WebCore::canonicalizeCandidate):
        * editing/htmlediting.cpp:
        * editing/markup.cpp:
        (WebCore::joinMarkups):
        * html/HTMLElement.cpp:
        (WebCore::inlineTagList):
        (WebCore::blockTagList):
        * html/HTMLMediaElement.cpp:
        (WebCore::serializeTimeOffset):
        (WebCore::parseTimeOffset):
        * page/mac/FrameMac.mm:
        (WebCore::regExpForLabels):
        * platform/Arena.cpp:
        * platform/graphics/Color.cpp:
        (WebCore::colorFloatToRGBAByte):
        * platform/graphics/cg/ImageSourceCG.cpp:
        (WebCore::imageSourceOptions):
        * platform/graphics/cg/PathCG.cpp:
        (WebCore::CGPathApplierToPathApplier):
        * platform/graphics/mac/SimpleFontDataMac.mm:
        (WebCore::initFontData):
        * platform/mac/PlatformMouseEventMac.mm:
        * platform/text/String.cpp:
        * rendering/RenderBlock.cpp:
        (WebCore::continuationOutlineTable):
        (WebCore::getHeightForLineCount):
        * rendering/RenderView.cpp:
        (WebCore::rendererAfterPosition):
        * rendering/RootInlineBox.cpp:
        (WebCore::isEditableLeaf):
        * rendering/SVGRenderTreeAsText.cpp:
        (WebCore::hasFractions):
        * rendering/style/RenderStyle.cpp:
        (WebCore::positionedObjectMoved):
        * svg/SVGFont.cpp:
        (WebCore::floatWidthUsingSVGFontCallback):
        (WebCore::floatWidthMissingGlyphCallback):
        (WebCore::drawTextUsingSVGFontCallback):
        (WebCore::drawTextMissingGlyphCallback):
        * svg/SVGTransformable.cpp:
        (WebCore::parseTransformParamList):
        * svg/graphics/SVGPaintServerGradient.cpp:
        (WebCore::operator<<):
        * xml/XPathGrammar.y:
        * xml/XSLTExtensions.cpp:

2009-01-23  Eric Seidel  <eric@webkit.org>

        No review, removing an empty file.

        Remove RemoveNodeAttributeCommand since it was empty.

        * WebCore.pro:
        * WebCore.scons:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * editing/RemoveNodeAttributeCommand.cpp: Removed.
        * editing/RemoveNodeAttributeCommand.h: Removed.

2009-01-23  Brady Eidson  <beidson@apple.com>

        Rubberstamped by Sam Weinig

        Rework ScriptCachedPageData to ScriptCachedFrameData to more accurately reflect its true purpose

        * GNUmakefile.am:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:

        * bindings/js/ScriptCachedFrameData.cpp: Copied from bindings/js/ScriptCachedPageData.cpp.
        (WebCore::ScriptCachedFrameData::ScriptCachedFrameData):
        (WebCore::ScriptCachedFrameData::domWindow):
        (WebCore::ScriptCachedFrameData::~ScriptCachedFrameData):
        (WebCore::ScriptCachedFrameData::restore):
        (WebCore::ScriptCachedFrameData::clear):
        * bindings/js/ScriptCachedFrameData.h: Copied from bindings/js/ScriptCachedPageData.h.
        * bindings/js/ScriptCachedPageData.cpp: Removed.
        * bindings/js/ScriptCachedPageData.h: Removed.

        * history/CachedPage.cpp:
        (WebCore::CachedPage::CachedPage):
        (WebCore::CachedPage::restore):
        * history/CachedPage.h:

2009-01-23  Steve Falkenburg  <sfalken@apple.com>

        Fix build.

        * rendering/RenderThemeSafari.cpp:
        (WebCore::RenderThemeSafari::baselinePosition):

2009-01-23  Darin Fisher  <darin@chromium.org>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=23506
        Upstream Chromium's image decoders for use with PLATFORM(SKIA)

        * platform/image-decoders/skia/BMPImageDecoder.cpp: Added.
        * platform/image-decoders/skia/BMPImageDecoder.h: Added.
        * platform/image-decoders/skia/BMPImageReader.cpp: Added.
        * platform/image-decoders/skia/BMPImageReader.h: Added.
        * platform/image-decoders/skia/GIFImageDecoder.cpp:
        (WebCore::GIFImageDecoderPrivate::GIFImageDecoderPrivate):
        (WebCore::GIFImageDecoderPrivate::decode):
        (WebCore::GIFImageDecoderPrivate::getColorMap):
        (WebCore::GIFImageDecoder::GIFImageDecoder):
        (WebCore::GIFImageDecoder::isSizeAvailable):
        (WebCore::GIFImageDecoder::frameCount):
        (WebCore::GIFImageDecoder::frameBufferAtIndex):
        (WebCore::GIFImageDecoder::clearFrameBufferCache):
        (WebCore::GIFImageDecoder::decode):
        (WebCore::GIFImageDecoder::sizeNowAvailable):
        (WebCore::GIFImageDecoder::initFrameBuffer):
        (WebCore::GIFImageDecoder::prepEmptyFrameBuffer):
        (WebCore::GIFImageDecoder::haveDecodedRow):
        (WebCore::GIFImageDecoder::frameComplete):
        * platform/image-decoders/skia/GIFImageDecoder.h:
        (WebCore::GIFImageDecoder::filenameExtension):
        (WebCore::GIFImageDecoder::frameDurationAtIndex):
        (WebCore::GIFImageDecoder::):
        * platform/image-decoders/skia/GIFImageReader.cpp:
        (GIFImageReader::do_lzw):
        (GIFImageReader::read):
        * platform/image-decoders/skia/GIFImageReader.h:
        * platform/image-decoders/skia/ICOImageDecoder.cpp: Added.
        * platform/image-decoders/skia/ICOImageDecoder.h: Added.
        * platform/image-decoders/skia/ImageDecoder.h:
        (WebCore::RefCountedNativeImageSkia::create):
        (WebCore::RefCountedNativeImageSkia::bitmap):
        (WebCore::RefCountedNativeImageSkia::RefCountedNativeImageSkia):
        (WebCore::RGBA32Buffer::):
        (WebCore::RGBA32Buffer::RGBA32Buffer):
        (WebCore::RGBA32Buffer::~RGBA32Buffer):
        (WebCore::RGBA32Buffer::operator=):
        (WebCore::RGBA32Buffer::clear):
        (WebCore::RGBA32Buffer::copyBitmapData):
        (WebCore::RGBA32Buffer::bitmap):
        (WebCore::RGBA32Buffer::setSize):
        (WebCore::RGBA32Buffer::width):
        (WebCore::RGBA32Buffer::height):
        (WebCore::RGBA32Buffer::rect):
        (WebCore::RGBA32Buffer::status):
        (WebCore::RGBA32Buffer::duration):
        (WebCore::RGBA32Buffer::disposalMethod):
        (WebCore::RGBA32Buffer::hasAlpha):
        (WebCore::RGBA32Buffer::setRect):
        (WebCore::RGBA32Buffer::setStatus):
        (WebCore::RGBA32Buffer::setDuration):
        (WebCore::RGBA32Buffer::setDisposalMethod):
        (WebCore::RGBA32Buffer::setHasAlpha):
        (WebCore::RGBA32Buffer::setRGBA):
        (WebCore::ImageDecoder::ImageDecoder):
        (WebCore::ImageDecoder::~ImageDecoder):
        (WebCore::ImageDecoder::setData):
        (WebCore::ImageDecoder::isSizeAvailable):
        (WebCore::ImageDecoder::size):
        (WebCore::ImageDecoder::frameCount):
        (WebCore::ImageDecoder::repetitionCount):
        (WebCore::ImageDecoder::supportsAlpha):
        (WebCore::ImageDecoder::failed):
        (WebCore::ImageDecoder::setFailed):
        (WebCore::ImageDecoder::clearFrameBufferCache):
        (WebCore::ImageDecoder::setSize):
        (WebCore::ImageDecoder::isOverSize):
        * platform/image-decoders/skia/JPEGImageDecoder.cpp:
        (WebCore::JPEGImageReader::JPEGImageReader):
        (WebCore::JPEGImageReader::decode):
        (WebCore::JPEGImageDecoder::isSizeAvailable):
        (WebCore::JPEGImageDecoder::outputScanlines):
        * platform/image-decoders/skia/JPEGImageDecoder.h:
        (WebCore::JPEGImageDecoder::filenameExtension):
        (WebCore::JPEGImageDecoder::supportsAlpha):
        (WebCore::JPEGImageDecoder::reader):
        * platform/image-decoders/skia/PNGImageDecoder.cpp:
        (WebCore::PNGImageReader::close):
        (WebCore::PNGImageDecoder::PNGImageDecoder):
        (WebCore::PNGImageDecoder::isSizeAvailable):
        (WebCore::PNGImageDecoder::frameBufferAtIndex):
        (WebCore::PNGImageDecoder::decode):
        (WebCore::PNGImageDecoder::decodingFailed):
        (WebCore::PNGImageDecoder::headerAvailable):
        (WebCore::rowAvailable):
        (WebCore::PNGImageDecoder::rowAvailable):
        (WebCore::PNGImageDecoder::pngComplete):
        * platform/image-decoders/skia/PNGImageDecoder.h:
        (WebCore::PNGImageDecoder::filenameExtension):
        (WebCore::PNGImageDecoder::reader):
        * platform/image-decoders/skia/XBMImageDecoder.cpp: Added.
        * platform/image-decoders/skia/XBMImageDecoder.h: Added.

2009-01-23  Darin Fisher  <darin@chromium.org>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=23506
        Copy existing ImageDecoder.h in preparation for landing Skia changes on top.

        * platform/image-decoders/skia/ImageDecoder.h: Copied from platform/image-decoders/ImageDecoder.h.

2009-01-23  Darin Fisher  <darin@chromium.org>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=23506
        Copy existing image-decoders in preparation for landing Skia changes on top.

        * platform/image-decoders/skia: Added.
        * platform/image-decoders/skia/GIFImageDecoder.cpp: Copied from platform/image-decoders/gif/GIFImageDecoder.cpp.
        * platform/image-decoders/skia/GIFImageDecoder.h: Copied from platform/image-decoders/gif/GIFImageDecoder.h.
        * platform/image-decoders/skia/GIFImageReader.cpp: Copied from platform/image-decoders/gif/GIFImageReader.cpp.
        * platform/image-decoders/skia/GIFImageReader.h: Copied from platform/image-decoders/gif/GIFImageReader.h.
        * platform/image-decoders/skia/JPEGImageDecoder.cpp: Copied from platform/image-decoders/jpeg/JPEGImageDecoder.cpp.
        * platform/image-decoders/skia/JPEGImageDecoder.h: Copied from platform/image-decoders/jpeg/JPEGImageDecoder.h.
        * platform/image-decoders/skia/PNGImageDecoder.cpp: Copied from platform/image-decoders/png/PNGImageDecoder.cpp.
        * platform/image-decoders/skia/PNGImageDecoder.h: Copied from platform/image-decoders/png/PNGImageDecoder.h.

2009-01-23  Holger Freyther  <zecke@selfish.org>

        Unreviewed build fix.

        Based on https://bugs.webkit.org/show_bug.cgi?id=23498
        from craig.schlenter@gmail.com

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

2009-01-23  David Levin  <levin@chromium.org>

        Reviewed by Alexey Proskuryakov.

        Bug 22720: Make XMLHttpRequest work in Workers
        <https://bugs.webkit.org/show_bug.cgi?id=22720>

        Add copy/adopt for ResourceResponse(Base)/ResourceRequest(Base) to allow the
        data to be passed across threads.

        No observable change in behavior, so no test.

        * platform/network/FormData.cpp:
        (WebCore::FormData::deepCopy):
        * platform/network/FormData.h:
        * platform/network/HTTPHeaderMap.cpp:
        (WebCore::HTTPHeaderMap::copyData):
        (WebCore::HTTPHeaderMap::adopt):
        * platform/network/HTTPHeaderMap.h:
        * platform/network/ResourceRequestBase.cpp:
        (WebCore::ResourceRequestBase::adopt):
        (WebCore::ResourceRequestBase::copyData):
        * platform/network/ResourceRequestBase.h:
        * platform/network/ResourceResponseBase.cpp:
        (WebCore::ResourceResponseBase::adopt):
        (WebCore::ResourceResponseBase::copyData):
        * platform/network/ResourceResponseBase.h:

2009-01-23  Dmitry Titov  <dimich@chromium.org>

        Reviewed by Alexey Proskuryakov.

        https://bugs.webkit.org/show_bug.cgi?id=23374
        Add WorkerRunLoop to encapsulate message queue and timer heap.
        This is first half (timer heap is added as separate patch).

        * GNUmakefile.am: Added WorkerRunLoop.cpp to the build.
        * WebCore.vcproj/WebCore.vcproj: Same as above.
        * WebCore.xcodeproj/project.pbxproj: Same as above
        * dom/WorkerContext.cpp:
        (WebCore::WorkerContext::postTask):
        * dom/WorkerContext.h:
        * dom/WorkerMessagingProxy.cpp:
        (WebCore::WorkerMessagingProxy::postMessageToWorkerContext):
        (WebCore::WorkerMessagingProxy::workerThreadCreated):
        * dom/WorkerRunLoop.cpp: Added.
        (WebCore::WorkerRunLoop::run): Runs the loop until terminate() is called.
        (WebCore::WorkerRunLoop::terminate): Causes the loop to exit.
        (WebCore::WorkerRunLoop::postTask): Adds a task to the internal queue.
        * dom/WorkerRunLoop.h: Added.
        (WebCore::WorkerRunLoop::WorkerRunLoop):
        * dom/WorkerThread.cpp:
        (WebCore::WorkerThread::workerThread):
        (WebCore::WorkerThread::stop):
        * dom/WorkerThread.h:
        (WebCore::WorkerThread::runLoop):

2009-01-23  Adam Treat  <adam.treat@torchmobile.com>

        Reviewed by Holger Hans Peter Freyther.

        Redo previous patch http://trac.webkit.org/changeset/34260 which fixes a
        huge memory leak by ensuring that the timer is fired one last time on
        application tear down thus triggering the GCController thereby freeing
        JavaScript objects as well as triggering other timer based tear down methods.

        * platform/qt/SharedTimerQt.cpp:
        (WebCore::SharedTimerQt::~SharedTimerQt):

2009-01-23  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Oliver Hunt.

        https://bugs.webkit.org/show_bug.cgi?id=23459
        Workers are not properly terminated if execution hasn't begun yet

        Doesn't affect observable behavior, so test case is not possible.

        * dom/WorkerThread.cpp: (WebCore::WorkerThread::workerThread): Call forbidExecution() if
        it couldn't be called earlier.

2009-01-23  Ariya Hidayat  <ariya.hidayat@trolltech.com>

        [Qt] Fix the build after RenderBox refactoring in r40153.

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

2009-01-23  Ariya Hidayat  <ariya.hidayat@trolltech.com>

        Rubber-stamped by Alexey Proskuryakov.

        Fix the build after RenderBox refactoring in r40153.

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

2009-01-23  Ariya Hidayat  <ariya.hidayat@trolltech.com>

        Reviewed by Simon Hausmann.

        [Qt] Simplify the assertion.

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

2009-01-22  David Hyatt  <hyatt@apple.com>

        Move the border and padding methods from RenderObject to RenderBox.

        Reviewed by Oliver Hunt

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * editing/DeleteButtonController.cpp:
        (WebCore::DeleteButtonController::createDeletionUI):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::hitTestResultAtPoint):
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::placeBoxesVertically):
        * rendering/InlineFlowBox.h:
        (WebCore::InlineFlowBox::borderLeft):
        (WebCore::InlineFlowBox::borderRight):
        (WebCore::InlineFlowBox::paddingLeft):
        (WebCore::InlineFlowBox::paddingRight):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::clearFloats):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::paddingTop):
        (WebCore::RenderBox::paddingBottom):
        (WebCore::RenderBox::paddingLeft):
        (WebCore::RenderBox::paddingRight):
        (WebCore::RenderBox::calcHeight):
        (WebCore::RenderBox::containingBlockWidthForPositioned):
        (WebCore::RenderBox::containingBlockHeightForPositioned):
        (WebCore::RenderBox::calcAbsoluteHorizontal):
        (WebCore::RenderBox::calcAbsoluteHorizontalValues):
        (WebCore::RenderBox::calcAbsoluteVertical):
        (WebCore::RenderBox::calcAbsoluteVerticalValues):
        (WebCore::RenderBox::calcAbsoluteHorizontalReplaced):
        (WebCore::RenderBox::calcAbsoluteVerticalReplaced):
        * rendering/RenderBox.h:
        (WebCore::RenderBox::borderTop):
        (WebCore::RenderBox::borderBottom):
        (WebCore::RenderBox::borderLeft):
        (WebCore::RenderBox::borderRight):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::repaintAfterLayoutIfNeeded):
        * rendering/RenderObject.h:
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::textBlockWidth):
        (WebCore::RenderTextControl::calcHeight):
        (WebCore::RenderTextControl::calcPrefWidths):
        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::preferredContentWidth):
        * rendering/RenderTreeAsText.cpp:
        (WebCore::operator<<):
        * rendering/RenderView.cpp:
        (WebCore::RenderView::repaintViewRectangle):

2009-01-22  David Hyatt  <hyatt@apple.com>

        Devirtualize the marginTop/Right/Left/Bottom functions and move them to RenderBox (along with some of the
        other margin functions that have to come along for the ride).

        Reviewed by Oliver Hunt

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * editing/TextIterator.cpp:
        (WebCore::shouldEmitExtraNewlineForNode):
        * rendering/InlineBox.cpp:
        * rendering/InlineBox.h:
        (WebCore::InlineBox::renderBox):
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::marginLeft):
        (WebCore::InlineFlowBox::marginRight):
        (WebCore::InlineFlowBox::placeBoxesHorizontally):
        (WebCore::InlineFlowBox::computeLogicalBoxHeights):
        (WebCore::InlineFlowBox::placeBoxesVertically):
        (WebCore::InlineFlowBox::shrinkBoxesWithNoTextChildren):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::isSelfCollapsingBlock):
        (WebCore::RenderBlock::adjustPositionedBlock):
        (WebCore::RenderBlock::handleCompactChild):
        (WebCore::RenderBlock::estimateVerticalPosition):
        (WebCore::getBorderPaddingMargin):
        (WebCore::RenderBlock::calcInlinePrefWidths):
        * rendering/RenderBlock.h:
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::calcHeight):
        * rendering/RenderBox.h:
        (WebCore::RenderBox::hasHorizontalBordersPaddingOrMargin):
        (WebCore::RenderBox::hasHorizontalBordersOrPadding):
        (WebCore::RenderBox::marginTop):
        (WebCore::RenderBox::marginBottom):
        (WebCore::RenderBox::marginLeft):
        (WebCore::RenderBox::marginRight):
        (WebCore::RenderBox::isSelfCollapsingBlock):
        (WebCore::RenderBox::collapsedMarginTop):
        (WebCore::RenderBox::collapsedMarginBottom):
        (WebCore::RenderBox::isTopMarginQuirk):
        (WebCore::RenderBox::isBottomMarginQuirk):
        (WebCore::RenderBox::maxTopMargin):
        (WebCore::RenderBox::maxBottomMargin):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::getAbsoluteRepaintRectWithOutline):
        * rendering/RenderObject.h:
        * rendering/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::lineHeight):
        (WebCore::RenderSVGContainer::baselinePosition):
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::calcHeight):
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::baselinePosition):
        * rendering/bidi.cpp:
        (WebCore::getBorderPaddingMargin):
        (WebCore::inlineWidth):
        (WebCore::RenderBlock::computeHorizontalPositionsForLine):
        (WebCore::inlineFlowRequiresLineBox):
        (WebCore::requiresLineBox):
        (WebCore::RenderBlock::findNextLineBreak):

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

        Rubber-stamped by Anders Carlsson.

        Disable GCC_WARN_ABOUT_MISSING_PROTOTYPES temporarily.

        Current versions of Xcode only respect it for C and Objective-C files,
        and our code doesn't currently compile if it is applied to C++ and
        Objective-C++ files.

        * Configurations/Base.xcconfig:

2009-01-22  David Hyatt  <hyatt@apple.com>

        Move the m_widthChanged bit on RenderTableCell into RenderFlow's set of bits.  Let intrinsicPaddingTop and
        intrinsicPaddingBottom just be normal non-bitfield values.

        Reviewed by Oliver Hunt

        * rendering/RenderFlow.h:
        (WebCore::RenderFlow::RenderFlow):
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::RenderTableCell):
        (WebCore::RenderTableCell::updateWidth):
        (WebCore::RenderTableCell::layout):
        * rendering/RenderTableCell.h:

2009-01-22  David Hyatt  <hyatt@apple.com>

        Properly encapsulate m_frameRect.y() behind the RenderBox::y() method now that they are the same thing.
        Make m_frameRect private.

        Reviewed by Oliver Hunt

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::paint):
        (WebCore::RenderBlock::clearFloats):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::offsetTop):
        (WebCore::RenderBox::nodeAtPoint):
        (WebCore::RenderBox::paint):
        (WebCore::RenderBox::paintCustomHighlight):
        (WebCore::RenderBox::containingBlockWidth):
        (WebCore::RenderBox::localToAbsolute):
        (WebCore::RenderBox::offsetFromContainer):
        (WebCore::RenderBox::computeAbsoluteRepaintRect):
        (WebCore::RenderBox::repaintDuringLayoutIfMoved):
        * rendering/RenderContainer.cpp:
        (WebCore::RenderContainer::layout):
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::layoutBlock):
        * rendering/RenderFrameSet.cpp:
        (WebCore::RenderFrameSet::paint):
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::paintReplaced):
        (WebCore::RenderImage::nodeAtPoint):
        * rendering/RenderListMarker.cpp:
        (WebCore::RenderListMarker::paint):
        (WebCore::RenderListMarker::getRelativeMarkerRect):
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::paint):
        (WebCore::RenderReplaced::shouldPaint):
        * rendering/RenderReplica.cpp:
        (WebCore::RenderReplica::paint):
        * rendering/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::applyContentTransforms):
        (WebCore::RenderSVGRoot::paint):
        (WebCore::RenderSVGRoot::absoluteTransform):
        (WebCore::RenderSVGRoot::nodeAtPoint):
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::calcWidth):
        (WebCore::RenderTable::layout):
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::paint):
        (WebCore::RenderTableCell::paintBackgroundsBehindCell):
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::setCellWidths):
        (WebCore::RenderTableSection::calcRowHeight):
        (WebCore::RenderTableSection::layoutRows):
        (WebCore::RenderTableSection::paint):
        (WebCore::RenderTableSection::nodeAtPoint):
        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::paint):

2009-01-22  David Hyatt  <hyatt@apple.com>

        Fix for https://bugs.webkit.org/show_bug.cgi?id=23487.

        This patch completely reworks vertical alignment of table cells.  The current system uses methods called borderTopExtra() and borderBottomExtra() to
        add extra space above and below the content of a cell.  This system was not confined to the table code and spilled out into all the other RenderObjects.
        The y-position of the table cell box was set to the outer edge of the cell, but the y() method of RenderBox lied and added in borderTopExtra().  height()
        also excluded the extra space, so did not accurately reflect the true size of the cell.

        With the new system, the table cell box is completely accurate.  The extra space becomes part of the padding of the cell.  Padding has been reworked so that
        additional intrinsic padding can be added on to the specified padding from style.  Only the table code has to deal with the extra cell padding.

        localToAbsoluteForContent has now been removed, since there no longer has to be a special hacked content box.

        A number of table layout tests progress with this change, since the new layout system actually fixes existing bugs in baseline alignment of cells.

        Reviewed by Oliver Hunt

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        Make CSSComputedStyleDeclaration ask for padding values that exclude the built-in intrinsic padding.  This ensures that getComputedStyle continues
        to give the right answer.

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::getLowerRightCorner):
        * editing/visible_units.cpp:
        (WebCore::previousLinePosition):
        (WebCore::nextLinePosition):
        * rendering/LayoutState.cpp:
        (WebCore::LayoutState::LayoutState):
        Remove borderTopExtra()/borderBottomExtra() hacks and localToAbsoluteForContent calls.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::overflowRect):
        Remove borderTopExtra()/borderBottomExtra() hacks and localToAbsoluteForContent calls.

        (WebCore::RenderBlock::layoutBlock):
        (WebCore::RenderBlock::expandsToEncloseOverhangingFloats):
        The expandsToEncloseOverhangingFloats logic has been reworked.  Table cells and fieldsets did not properly handle floats that spilled into the bottom padding.  The
        resulting box needed to not only expand to encompass the float, but also needed to place the full bottom padding after the float.  The switch to make the extra table cell
        space into padding exposed this issue.  No extra layout test is required, since an existing table layout test exposes this issue and progresses to match Firefox with
        this change.

        (WebCore::RenderBlock::selectionGapRects):
        (WebCore::RenderBlock::paintSelection):
        (WebCore::RenderBlock::fillSelectionGaps):
        (WebCore::RenderBlock::nodeAtPoint):
        (WebCore::RenderBlock::positionForCoordinates):
        (WebCore::RenderBlock::offsetForContents):
        Remove borderTopExtra()/borderBottomExtra() hacks and localToAbsoluteForContent calls.

        * rendering/RenderBlock.h:
        Add the new simplified method for expanding to encompass overhanging floats.  The method has been devirtualized and made to include all of the cases (and not just a subset).

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::absoluteRects):
        (WebCore::RenderBox::absoluteQuads):
        (WebCore::RenderBox::absoluteContentBox):
        (WebCore::RenderBox::paintBoxDecorations):
        (WebCore::RenderBox::paintMask):
        (WebCore::RenderBox::getOverflowClipRect):
        (WebCore::RenderBox::localToAbsolute):
        (WebCore::RenderBox::absoluteToLocal):
        (WebCore::RenderBox::localToAbsoluteQuad):
        Remove borderTopExtra()/borderBottomExtra() hacks and localToAbsoluteForContent calls.

        * rendering/RenderBox.h:
        (WebCore::RenderBox::y):
        (WebCore::RenderBox::location):
        (WebCore::RenderBox::borderBoxRect):
        (WebCore::RenderBox::offsetHeight):
        Remove borderTopExtra()/borderBottomExtra() hacks and localToAbsoluteForContent calls.

        * rendering/RenderContainer.cpp:
        (WebCore::RenderContainer::addLineBoxRects):
        * rendering/RenderFieldset.cpp:
        (WebCore::RenderFieldset::paintBoxDecorations):
        (WebCore::RenderFieldset::paintMask):
        * rendering/RenderFieldset.h:
        (WebCore::RenderFieldset::avoidsFloats):
        * rendering/RenderFlow.cpp:
        (WebCore::RenderFlow::localCaretRect):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateLayerPosition):
        (WebCore::RenderLayer::paintLayer):
        (WebCore::RenderLayer::hitTestLayer):
        (WebCore::RenderLayer::boundingBox):
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::isPointInOverflowControl):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::localToAbsolute):
        (WebCore::RenderObject::absoluteToLocal):
        (WebCore::RenderObject::localToAbsoluteQuad):
        (WebCore::RenderObject::offsetFromContainer):
        (WebCore::RenderObject::paddingTop):
        (WebCore::RenderObject::paddingBottom):
        (WebCore::RenderObject::paddingLeft):
        (WebCore::RenderObject::paddingRight):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::hasOverhangingFloats):
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::selectionRect):
        (WebCore::RenderReplaced::localSelectionRect):
        Remove borderTopExtra()/borderBottomExtra() hacks and localToAbsoluteForContent calls.  Also modifed paddingLeft/Top/Right/Bottom to take an argument indicating
        whether or not the intrinsic padding of an object should be included (by default it is).  getComputedStyle needs to exclude it, which is why this argument is
        necessary.

        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::RenderTableCell):
        (WebCore::RenderTableCell::paddingTop):
        (WebCore::RenderTableCell::paddingBottom):
        The new paddingTop() and paddingBottom() methods on table cells include the extra intrinsic padding.

        (WebCore::RenderTableCell::setOverrideSize):
        When a table's override size gets altered, the intrinsic padding needs to be cleared.

        (WebCore::RenderTableCell::absoluteClippedOverflowRect):
        (WebCore::RenderTableCell::computeAbsoluteRepaintRect):
        (WebCore::RenderTableCell::baselinePosition):
        (WebCore::RenderTableCell::paint):
        (WebCore::RenderTableCell::paintBackgroundsBehindCell):
        (WebCore::RenderTableCell::paintBoxDecorations):
        (WebCore::RenderTableCell::paintMask):
        Remove borderTopExtra()/borderBottomExtra() hacks and localToAbsoluteForContent calls.

        * rendering/RenderTableCell.h:
        (WebCore::RenderTableCell::setIntrinsicPaddingTop):
        (WebCore::RenderTableCell::setIntrinsicPaddingBottom):
        (WebCore::RenderTableCell::setIntrinsicPadding):
        (WebCore::RenderTableCell::clearIntrinsicPadding):
        (WebCore::RenderTableCell::intrinsicPaddingTop):
        (WebCore::RenderTableCell::intrinsicPaddingBottom):
        Add new helper methods for getting/setting a cell's intrinsic padding.

        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::calcRowHeight):
        calcRowHeight has been modified to exclude the intrinsic padding when calculating the base height of rows prior to flexing.  Because a cell now includes that
        extra space, it has to be subtracted out in this method.

        (WebCore::RenderTableSection::layoutRows):
        Modify the code that sets up the intrinsic padding so that it does a relayout if the intrinsic padding changes.   There was also an error where the baseline
        position mismatched leading to negative intrinsic padding being added in (this error exists in ToT).  The code now properly ignores cells that don't establish
        a baseline.  A number of tests progress with this change.

        * rendering/RenderText.cpp:
        (WebCore::RenderText::addLineBoxRects):
        Remove borderTopExtra()/borderBottomExtra() hacks and localToAbsoluteForContent calls.

        * rendering/RenderTreeAsText.cpp:
        (WebCore::operator<<):
        (WebCore::writeTextRun):
        Modify the render tree dumping code to continue to produce the same results as before.  This is really a hack, since we're now capable of indicating the correct
        position for the descendants of cells with intrinsic padding (and also indicating what the correct cell box is).  A future patch can remove these hacks so that the
        layout test results can all be regenerated.

2009-01-22  Eric Seidel  <eric@webkit.org>

        Reviewed by Darin Adler.

        Remove <strong>/<em> tags when toggling bold/italic since IE inserts them instead of <b>/<i>
        https://bugs.webkit.org/show_bug.cgi?id=23486

        Test: editing/execCommand/toggle-styles.html

        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::isHTMLStyleNode):

2009-01-22  Eric Seidel  <eric@webkit.org>

        Reviewed by Justin Garcia.

        Remove <span> turds left by editing commands
        https://bugs.webkit.org/show_bug.cgi?id=23466

        Tests:
        * editing/execCommand/empty-span-removal.html
        * editing/execCommand/toggle-styles.html

        * editing/ApplyStyleCommand.cpp:
        (WebCore::styleSpanClassString):
        (WebCore::isStyleSpan):
        (WebCore::isUnstyledStyleSpan):
        (WebCore::isSpanWithoutAttributesOrUnstyleStyleSpan):
        (WebCore::ApplyStyleCommand::applyRelativeFontStyleChange):
        (WebCore::ApplyStyleCommand::removeEmbeddingUpToEnclosingBlock):
        (WebCore::ApplyStyleCommand::removeHTMLBidiEmbeddingStyle):
        (WebCore::ApplyStyleCommand::removeCSSStyle):

2009-01-22  Nikolas Zimmermann  <nikolas.zimmermann@torchmobile.com>

        Reviewed by Eric Seidel.

        Rename some of the casting functions in dom/*Element.cpp:
        formControlElementForElement -> toFormControlElement
        inputElementForElement -> toInputElement
        optionElementForElement -> toOptionElement
        optionGroupElementForElement -> toOptionGroupElement

        Suggested by Alexey, while refactoring the Element*->ScriptElement* code.
        The Element*->ScriptElement* helper function is already named 'toScriptElement'.

        * dom/FormControlElement.cpp:
        (WebCore::toFormControlElement):
        * dom/FormControlElement.h:
        * dom/InputElement.cpp:
        (WebCore::InputElement::setValueFromRenderer):
        (WebCore::toInputElement):
        * dom/InputElement.h:
        * dom/OptionElement.cpp:
        (WebCore::OptionElement::collectOptionTextRespectingGroupLabel):
        (WebCore::toOptionElement):
        * dom/OptionElement.h:
        * dom/OptionGroupElement.cpp:
        (WebCore::toOptionGroupElement):
        * dom/OptionGroupElement.h:
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::updateFromElement):
        (WebCore::RenderListBox::paintItemForeground):
        (WebCore::RenderListBox::paintItemBackground):
        * rendering/RenderMenuList.cpp:
        (WebCore::RenderMenuList::updateOptionsWidth):
        (WebCore::RenderMenuList::setTextFromOption):
        (WebCore::RenderMenuList::itemText):
        (WebCore::RenderMenuList::itemIsSelected):
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::formControlElement):
        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::inputElement):

2009-01-22  Nikolas Zimmermann  <nikolas.zimmermann@torchmobile.com>

        Rubber-stamped by George Staikos.

        Forgot to include in my last commit: Activate code depending on WMLOptionElement/WMLOptGroupElement.

        * dom/OptionElement.cpp:
        (WebCore::optionElementForElement):
        * dom/OptionGroupElement.cpp:
        (WebCore::optionGroupElementForElement):

2009-01-22  Nikolas Zimmermann  <nikolas.zimmermann@torchmobile.com>

        Reviewed by George Staikos.

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

        Add WML <option>/<optgroup> element support.
        Currently the implementation is stubbed, all relevant parts can be enabled
        once WMLSelectElement/SelectElement has been created.

        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * wml/WMLOptGroupElement.cpp: Added.
        (WebCore::WMLOptGroupElement::WMLOptGroupElement):
        (WebCore::WMLOptGroupElement::~WMLOptGroupElement):
        (WebCore::WMLOptGroupElement::insertBefore):
        (WebCore::WMLOptGroupElement::replaceChild):
        (WebCore::WMLOptGroupElement::removeChild):
        (WebCore::WMLOptGroupElement::appendChild):
        (WebCore::WMLOptGroupElement::removeChildren):
        (WebCore::ownerSelectElement):
        (WebCore::WMLOptGroupElement::accessKeyAction):
        (WebCore::WMLOptGroupElement::childrenChanged):
        (WebCore::WMLOptGroupElement::parseMappedAttribute):
        (WebCore::WMLOptGroupElement::attach):
        (WebCore::WMLOptGroupElement::detach):
        (WebCore::WMLOptGroupElement::setRenderStyle):
        (WebCore::WMLOptGroupElement::nonRendererRenderStyle):
        (WebCore::WMLOptGroupElement::groupLabelText):
        (WebCore::WMLOptGroupElement::recalcSelectOptions):
        * wml/WMLOptGroupElement.h: Added.
        (WebCore::WMLOptGroupElement::title):
        (WebCore::WMLOptGroupElement::valueMatchesRenderer):
        (WebCore::WMLOptGroupElement::setValueMatchesRenderer):
        (WebCore::WMLOptGroupElement::rendererIsNeeded):
        * wml/WMLOptionElement.cpp: Added.
        (WebCore::WMLOptionElement::WMLOptionElement):
        (WebCore::WMLOptionElement::~WMLOptionElement):
        (WebCore::ownerSelectElement):
        (WebCore::WMLOptionElement::accessKeyAction):
        (WebCore::WMLOptionElement::childrenChanged):
        (WebCore::WMLOptionElement::parseMappedAttribute):
        (WebCore::WMLOptionElement::attach):
        (WebCore::WMLOptionElement::detach):
        (WebCore::WMLOptionElement::setRenderStyle):
        (WebCore::WMLOptionElement::insertedIntoDocument):
        (WebCore::WMLOptionElement::selected):
        (WebCore::WMLOptionElement::setSelectedState):
        (WebCore::WMLOptionElement::value):
        (WebCore::WMLOptionElement::textIndentedToRespectGroupLabel):
        (WebCore::WMLOptionElement::nonRendererRenderStyle):
        (WebCore::WMLOptionElement::handleIntrinsicEventIfNeeded):
        * wml/WMLOptionElement.h: Added.
        (WebCore::WMLOptionElement::valueMatchesRenderer):
        (WebCore::WMLOptionElement::setValueMatchesRenderer):
        (WebCore::WMLOptionElement::rendererIsNeeded):
        * wml/WMLTagNames.in:

2009-01-22  Eric Roman  <eroman@chromium.org>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=20806
        Send referrer for history navigations.

        Test: http/tests/navigation/back-send-referrer.html

        Consolidates HistoryItem::rssFeedReferrer and HistoryItem::formReferrer into a single HistoryItem::referrer property.

        * history/HistoryItem.cpp:
        (WebCore::HistoryItem::HistoryItem):
        (WebCore::HistoryItem::referrer):
        (WebCore::HistoryItem::setReferrer):
        (WebCore::HistoryItem::formReferrer):
        (WebCore::HistoryItem::rssFeedReferrer):
        (WebCore::HistoryItem::setRSSFeedReferrer):
        (WebCore::HistoryItem::setFormInfoFromRequest):
        * history/HistoryItem.h:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadItem):

2009-01-22  Nikolas Zimmermann  <nikolas.zimmermann@torchmobile.com>

        Reviewed by Eric Seidel.

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

        Further enhancments to share code between HTMLOptionElement and the upcoming WMLOptionElement.

        Rename optionText() to textIndentedToRespectGroupLabel() in (HTML)OptionElement, as it fits better.
        optionText() returns the options text prefixed with some spaces, in case it got an optgroup parent.

        Add two more pure-virtual functions to OptionElement: setSelectedState(bool) & value().
        These aren't used outside of html/ at the moment (unlike the other pure-virtual functions
        used by RenderMenuList/RenderListBox) - but they will be used by SelectElement, once it exists.

        * dom/OptionElement.cpp:
        (WebCore::OptionElement::setSelectedState):
        (WebCore::OptionElement::collectOptionText):
        (WebCore::OptionElement::collectOptionTextRespectingGroupLabel):
        (WebCore::OptionElement::collectOptionValue):
        (WebCore::OptionElementData::OptionElementData):
        (WebCore::OptionElementData::~OptionElementData):
        * dom/OptionElement.h:
        (WebCore::OptionElementData::element):
        (WebCore::OptionElementData::value):
        (WebCore::OptionElementData::setValue):
        (WebCore::OptionElementData::label):
        (WebCore::OptionElementData::setLabel):
        (WebCore::OptionElementData::selected):
        (WebCore::OptionElementData::setSelected):
        * html/HTMLOptionElement.cpp:
        (WebCore::HTMLOptionElement::HTMLOptionElement):
        (WebCore::HTMLOptionElement::text):
        (WebCore::HTMLOptionElement::parseMappedAttribute):
        (WebCore::HTMLOptionElement::value):
        (WebCore::HTMLOptionElement::selected):
        (WebCore::HTMLOptionElement::setSelected):
        (WebCore::HTMLOptionElement::setSelectedState):
        (WebCore::HTMLOptionElement::label):
        (WebCore::HTMLOptionElement::textIndentedToRespectGroupLabel):
        * html/HTMLOptionElement.h:
        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::typeAheadFind):
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::updateFromElement):
        (WebCore::RenderListBox::paintItemForeground):
        * rendering/RenderMenuList.cpp:
        (WebCore::RenderMenuList::updateOptionsWidth):
        (WebCore::RenderMenuList::setTextFromOption):
        (WebCore::RenderMenuList::itemText):

2009-01-22  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Justin Garcia.

        Bug 23464: Infinite recursion at SelectionController::setSelection
        https://bugs.webkit.org/show_bug.cgi?id=23464

        Check for conditions leading to infinite recursion.

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

2009-01-22  Nikolas Zimmermann  <nikolas.zimmermann@torchmobile.com>

        Not reviewed. Fix WML build problem in RenderBox.cpp, WMLNames is undefined.

        * rendering/RenderBox.cpp:

2009-01-22  Adam Treat  <adam.treat@torchmobile.com>

        Fix the Qt build after RenderBox changes.

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

2009-01-22  David Hyatt  <hyatt@apple.com>

        Fix regressions in list box selection on Mac.  The wrong color was being used for the list box
        background, and list box colors actually weren't even being properly fetched because of a bug in
        the RenderTheme base class.  Existing pixel tests cover the bug fix.

        Reviewed by Jon Honeycutt

        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::activeListBoxSelectionBackgroundColor):
        (WebCore::RenderTheme::inactiveListBoxSelectionBackgroundColor):
        (WebCore::RenderTheme::activeListBoxSelectionForegroundColor):
        (WebCore::RenderTheme::inactiveListBoxSelectionForegroundColor):
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::platformInactiveListBoxSelectionBackgroundColor):

2009-01-22  David Levin  <levin@chromium.org>

        Reviewed by Alexey Proskuryakov.

        Bug 22720: Make XMLHttpRequest work in Workers
        <https://bugs.webkit.org/show_bug.cgi?id=22720>

        Add copy/adopt for HTTPHeaderMap to allow the data to be passed across threads.

        No observable change in behavior, so no test.

        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.scons:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * platform/network/HTTPHeaderMap.cpp: Added.
        (WebCore::HTTPHeaderMap::copyData):
        (WebCore::HTTPHeaderMap::adopt):
        * platform/network/HTTPHeaderMap.h:

2009-01-21  David Hyatt  <hyatt@apple.com>

        Back out a portion of my patch that I did not mean to land.  Revert paintOutline back to the way it
        was before my landing.  Fixes failing SVG focus ring tests.

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::paintOutline):
        * rendering/RenderObject.h:
        * rendering/RenderPath.cpp:
        (WebCore::RenderPath::paint):
        * rendering/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::paint):

2009-01-21  David Hyatt  <hyatt@apple.com>

        Fix Node's renderBox() method on Windows.

        * dom/Node.cpp:
        (WebCore::Node::renderBox):

2009-01-21  David Hyatt  <hyatt@apple.com>

        Fix RenderThemeSafari bustage on Win32.

        * rendering/RenderThemeSafari.cpp:
        (WebCore::RenderThemeSafari::baselinePosition):

2009-01-21  David Hyatt  <hyatt@apple.com>

        Fix bustage in RenderThemeWin. It's actually terrible that RenderThemeWin is using absoluteContentBox,
        but that's a problem for another day.

        * rendering/RenderThemeWin.cpp:
        (WebCore::RenderThemeWin::paintSearchFieldCancelButton):
        (WebCore::RenderThemeWin::paintSearchFieldResultsDecoration):
        (WebCore::RenderThemeWin::paintSearchFieldResultsButton):

2009-01-21  Oliver Hunt  <oliver@apple.com>

        Reviewed by Dave Hyatt.

        Bug 23470: Crash when page load occurs while processing scroll event with MallocScribble enabled
        <https://bugs.webkit.org/show_bug.cgi?id=23470>

        Add a RefPtr protector to handleWheelEvent to guard against destruction
        while processing the scroll event.  Alas the absurd set of circumstances
        required to trigger this do not appear to be reproducible in DRT.

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

2009-01-21  David Hyatt  <hyatt@apple.com>

        Fix for https://bugs.webkit.org/show_bug.cgi?id=23453

        Devirtualize the width/height/x/y methods of the render tree.  The methods are now non-virtual on RenderBox.
        Many functions that were previously in RenderObject.cpp are now in RenderBox.cpp.

        Reviewed by Eric Seidel and Darin Adler

        * WebCore.base.exp:
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::sizingBox):
        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::getUpperLeftCorner):
        (WebCore::ContainerNode::getLowerRightCorner):
        * dom/Element.cpp:
        (WebCore::Element::offsetLeft):
        (WebCore::Element::offsetTop):
        (WebCore::Element::offsetWidth):
        (WebCore::Element::offsetHeight):
        (WebCore::Element::offsetParent):
        (WebCore::Element::clientLeft):
        (WebCore::Element::clientTop):
        (WebCore::Element::clientWidth):
        (WebCore::Element::clientHeight):
        (WebCore::Element::scrollLeft):
        (WebCore::Element::scrollTop):
        (WebCore::Element::setScrollLeft):
        (WebCore::Element::setScrollTop):
        (WebCore::Element::scrollWidth):
        (WebCore::Element::scrollHeight):
        * dom/Node.cpp:
        (WebCore::Node::renderBox):
        (WebCore::Node::getRect):
        * dom/Node.h:
        * dom/Position.cpp:
        (WebCore::endsOfNodeAreVisuallyDistinctPositions):
        (WebCore::Position::hasRenderedNonAnonymousDescendantsWithHeight):
        (WebCore::Position::isCandidate):
        * dom/PositionIterator.cpp:
        (WebCore::PositionIterator::isCandidate):
        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::addBlockPlaceholderIfNeeded):
        * editing/DeleteButtonController.cpp:
        (WebCore::isDeletableElement):
        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::removeNode):
        * editing/Editor.cpp:
        (WebCore::Editor::insideVisibleArea):
        * editing/EditorCommand.cpp:
        (WebCore::verticalScrollDistance):
        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::isKeyboardFocusable):
        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::willDraw):
        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::isFocusable):
        * html/HTMLFrameElementBase.cpp:
        (WebCore::HTMLFrameElementBase::width):
        (WebCore::HTMLFrameElementBase::height):
        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::width):
        (WebCore::HTMLImageElement::height):
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::drawNodeHighlight):
        * page/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::accessibilityIsIgnored):
        * page/FrameView.cpp:
        (WebCore::FrameView::createScrollbar):
        (WebCore::FrameView::updateDashboardRegions):
        * page/animation/AnimationBase.cpp:
        (WebCore::blendFunc):
        * rendering/HitTestResult.cpp:
        (WebCore::HitTestResult::imageRect):
        * rendering/InlineBox.cpp:
        (WebCore::InlineBox::renderBox):
        (WebCore::InlineBox::adjustPosition):
        * rendering/InlineBox.h:
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::placeBoxesHorizontally):
        (WebCore::InlineFlowBox::verticallyAlignBoxes):
        (WebCore::InlineFlowBox::placeBoxesVertically):
        * rendering/InlineFlowBox.h:
        * rendering/RenderApplet.cpp:
        (WebCore::RenderApplet::createWidgetIfNecessary):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::overflowHeight):
        (WebCore::RenderBlock::overflowWidth):
        (WebCore::RenderBlock::overflowRect):
        (WebCore::RenderBlock::isSelfCollapsingBlock):
        (WebCore::RenderBlock::layout):
        (WebCore::RenderBlock::layoutBlock):
        (WebCore::RenderBlock::adjustPositionedBlock):
        (WebCore::RenderBlock::adjustFloatingBlock):
        (WebCore::RenderBlock::handleSpecialChild):
        (WebCore::RenderBlock::handlePositionedChild):
        (WebCore::RenderBlock::handleFloatingChild):
        (WebCore::RenderBlock::handleCompactChild):
        (WebCore::RenderBlock::insertCompactIfNeeded):
        (WebCore::RenderBlock::handleRunInChild):
        (WebCore::RenderBlock::collapseMargins):
        (WebCore::RenderBlock::clearFloatsIfNeeded):
        (WebCore::RenderBlock::estimateVerticalPosition):
        (WebCore::RenderBlock::determineHorizontalPosition):
        (WebCore::RenderBlock::handleBottomOfBlock):
        (WebCore::RenderBlock::layoutBlockChildren):
        (WebCore::RenderBlock::layoutOnlyPositionedObjects):
        (WebCore::RenderBlock::layoutPositionedObjects):
        (WebCore::RenderBlock::markPositionedObjectsForLayout):
        (WebCore::RenderBlock::repaintOverhangingFloats):
        (WebCore::RenderBlock::paint):
        (WebCore::RenderBlock::paintChildren):
        (WebCore::RenderBlock::paintObject):
        (WebCore::RenderBlock::paintFloats):
        (WebCore::RenderBlock::paintContinuationOutlines):
        (WebCore::clipOutPositionedObjects):
        (WebCore::RenderBlock::fillSelectionGaps):
        (WebCore::RenderBlock::fillBlockSelectionGaps):
        (WebCore::RenderBlock::leftSelectionOffset):
        (WebCore::RenderBlock::rightSelectionOffset):
        (WebCore::RenderBlock::insertPositionedObject):
        (WebCore::RenderBlock::removePositionedObject):
        (WebCore::RenderBlock::removePositionedObjects):
        (WebCore::RenderBlock::insertFloatingObject):
        (WebCore::RenderBlock::removeFloatingObject):
        (WebCore::RenderBlock::positionNewFloats):
        (WebCore::RenderBlock::newLine):
        (WebCore::RenderBlock::lowestPosition):
        (WebCore::RenderBlock::rightmostPosition):
        (WebCore::RenderBlock::leftmostPosition):
        (WebCore::RenderBlock::clearFloats):
        (WebCore::RenderBlock::addOverhangingFloats):
        (WebCore::RenderBlock::markAllDescendantsWithFloatsForLayout):
        (WebCore::RenderBlock::getClearDelta):
        (WebCore::RenderBlock::nodeAtPoint):
        (WebCore::RenderBlock::positionForCoordinates):
        (WebCore::RenderBlock::layoutColumns):
        (WebCore::RenderBlock::getBaselineOfFirstLineBox):
        (WebCore::RenderBlock::getBaselineOfLastLineBox):
        (WebCore::getHeightForLineCount):
        (WebCore::RenderBlock::adjustForBorderFit):
        * rendering/RenderBlock.h:
        (WebCore::RenderBlock::FloatWithRect::FloatWithRect):
        (WebCore::RenderBlock::hasOverhangingFloats):
        (WebCore::RenderBlock::CompactInfo::compact):
        (WebCore::RenderBlock::CompactInfo::set):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::RenderBox):
        (WebCore::RenderBox::offsetLeft):
        (WebCore::RenderBox::offsetTop):
        (WebCore::RenderBox::offsetParent):
        (WebCore::RenderBox::clientWidth):
        (WebCore::RenderBox::clientHeight):
        (WebCore::RenderBox::scrollWidth):
        (WebCore::RenderBox::scrollHeight):
        (WebCore::RenderBox::scrollLeft):
        (WebCore::RenderBox::scrollTop):
        (WebCore::RenderBox::setScrollLeft):
        (WebCore::RenderBox::setScrollTop):
        (WebCore::RenderBox::absoluteRects):
        (WebCore::RenderBox::absoluteQuads):
        (WebCore::RenderBox::absoluteContentBox):
        (WebCore::RenderBox::absoluteContentQuad):
        (WebCore::RenderBox::absoluteOutlineBounds):
        (WebCore::RenderBox::addFocusRingRects):
        (WebCore::RenderBox::reflectionBox):
        (WebCore::RenderBox::reflectionOffset):
        (WebCore::RenderBox::reflectedRect):
        (WebCore::RenderBox::overrideWidth):
        (WebCore::RenderBox::overrideHeight):
        (WebCore::RenderBox::nodeAtPoint):
        (WebCore::RenderBox::paint):
        (WebCore::RenderBox::maskClipRect):
        (WebCore::RenderBox::repaintLayerRectsForImage):
        (WebCore::RenderBox::paintCustomHighlight):
        (WebCore::RenderBox::getOverflowClipRect):
        (WebCore::RenderBox::getClipRect):
        (WebCore::RenderBox::containingBlockWidth):
        (WebCore::RenderBox::localToAbsolute):
        (WebCore::RenderBox::offsetFromContainer):
        (WebCore::RenderBox::position):
        (WebCore::RenderBox::computeAbsoluteRepaintRect):
        (WebCore::RenderBox::repaintDuringLayoutIfMoved):
        (WebCore::RenderBox::calcWidth):
        (WebCore::RenderBox::calcWidthUsing):
        (WebCore::RenderBox::calcHorizontalMargins):
        (WebCore::RenderBox::calcHeight):
        (WebCore::RenderBox::calcPercentageHeight):
        (WebCore::RenderBox::calcReplacedHeightUsing):
        (WebCore::RenderBox::containingBlockWidthForPositioned):
        (WebCore::RenderBox::containingBlockHeightForPositioned):
        (WebCore::RenderBox::calcAbsoluteHorizontal):
        (WebCore::RenderBox::calcAbsoluteVertical):
        (WebCore::RenderBox::calcAbsoluteVerticalValues):
        (WebCore::RenderBox::calcAbsoluteHorizontalReplaced):
        (WebCore::RenderBox::calcAbsoluteVerticalReplaced):
        (WebCore::RenderBox::localCaretRect):
        (WebCore::RenderBox::lowestPosition):
        (WebCore::RenderBox::rightmostPosition):
        (WebCore::RenderBox::leftmostPosition):
        (WebCore::RenderBox::localTransform):
        * rendering/RenderBox.h:
        (WebCore::):
        (WebCore::RenderBox::x):
        (WebCore::RenderBox::y):
        (WebCore::RenderBox::width):
        (WebCore::RenderBox::height):
        (WebCore::RenderBox::setX):
        (WebCore::RenderBox::setY):
        (WebCore::RenderBox::setWidth):
        (WebCore::RenderBox::setHeight):
        (WebCore::RenderBox::location):
        (WebCore::RenderBox::size):
        (WebCore::RenderBox::setLocation):
        (WebCore::RenderBox::setSize):
        (WebCore::RenderBox::move):
        (WebCore::RenderBox::frameRect):
        (WebCore::RenderBox::setFrameRect):
        (WebCore::RenderBox::borderBoxRect):
        (WebCore::RenderBox::contentBoxRect):
        (WebCore::RenderBox::previousSiblingBox):
        (WebCore::RenderBox::nextSiblingBox):
        (WebCore::RenderBox::parentBox):
        (WebCore::RenderBox::overflowHeight):
        (WebCore::RenderBox::overflowWidth):
        (WebCore::RenderBox::setOverflowHeight):
        (WebCore::RenderBox::setOverflowWidth):
        (WebCore::RenderBox::overflowLeft):
        (WebCore::RenderBox::overflowTop):
        (WebCore::RenderBox::overflowRect):
        (WebCore::RenderBox::contentWidth):
        (WebCore::RenderBox::contentHeight):
        (WebCore::RenderBox::offsetWidth):
        (WebCore::RenderBox::offsetHeight):
        (WebCore::RenderBox::clientLeft):
        (WebCore::RenderBox::clientTop):
        (WebCore::RenderBox::availableWidth):
        (WebCore::RenderBox::tryLayoutDoingPositionedMovementOnly):
        * rendering/RenderButton.cpp:
        (WebCore::RenderButton::controlClipRect):
        * rendering/RenderContainer.cpp:
        (WebCore::RenderContainer::layout):
        (WebCore::RenderContainer::positionForCoordinates):
        * rendering/RenderContainer.h:
        (WebCore::RenderContainer::firstChildBox):
        (WebCore::RenderContainer::lastChildBox):
        * rendering/RenderFieldset.cpp:
        (WebCore::RenderFieldset::calcPrefWidths):
        (WebCore::RenderFieldset::layoutLegend):
        (WebCore::RenderFieldset::findLegend):
        (WebCore::RenderFieldset::paintBoxDecorations):
        (WebCore::RenderFieldset::paintMask):
        * rendering/RenderFieldset.h:
        * rendering/RenderFileUploadControl.cpp:
        (WebCore::RenderFileUploadControl::maxFilenameWidth):
        (WebCore::RenderFileUploadControl::paintObject):
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::FlexBoxIterator::FlexBoxIterator):
        (WebCore::FlexBoxIterator::first):
        (WebCore::FlexBoxIterator::next):
        (WebCore::RenderFlexibleBox::calcHorizontalPrefWidths):
        (WebCore::RenderFlexibleBox::calcVerticalPrefWidths):
        (WebCore::RenderFlexibleBox::layoutBlock):
        (WebCore::RenderFlexibleBox::layoutHorizontalBox):
        (WebCore::RenderFlexibleBox::layoutVerticalBox):
        (WebCore::RenderFlexibleBox::placeChild):
        (WebCore::RenderFlexibleBox::allowedChildFlex):
        * rendering/RenderFlexibleBox.h:
        * rendering/RenderFlow.cpp:
        (WebCore::RenderFlow::absoluteClippedOverflowRect):
        (WebCore::RenderFlow::lowestPosition):
        (WebCore::RenderFlow::rightmostPosition):
        (WebCore::RenderFlow::leftmostPosition):
        (WebCore::RenderFlow::localCaretRect):
        (WebCore::RenderFlow::addFocusRingRects):
        * rendering/RenderFrameSet.cpp:
        (WebCore::RenderFrameSet::paint):
        (WebCore::RenderFrameSet::layout):
        (WebCore::RenderFrameSet::positionFrames):
        * rendering/RenderHTMLCanvas.cpp:
        (WebCore::RenderHTMLCanvas::paintReplaced):
        (WebCore::RenderHTMLCanvas::canvasSizeChanged):
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::imageChanged):
        (WebCore::RenderImage::paintReplaced):
        (WebCore::RenderImage::nodeAtPoint):
        (WebCore::RenderImage::calcReplacedWidth):
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::absoluteRects):
        (WebCore::RenderInline::boundingBoxWidth):
        (WebCore::RenderInline::boundingBoxHeight):
        (WebCore::RenderInline::positionForCoordinates):
        * rendering/RenderInline.h:
        (WebCore::RenderInline::offsetWidth):
        (WebCore::RenderInline::offsetHeight):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateTransform):
        (WebCore::RenderLayer::updateLayerPosition):
        (WebCore::RenderLayer::scrollbarCornerPresent):
        (WebCore::RenderLayer::createScrollbar):
        (WebCore::RenderLayer::positionOverflowControls):
        (WebCore::RenderLayer::paintScrollCorner):
        (WebCore::RenderLayer::paintResizer):
        (WebCore::RenderLayer::paintLayer):
        (WebCore::RenderLayer::hitTestLayer):
        (WebCore::RenderLayer::calculateRects):
        (WebCore::RenderLayer::boundingBox):
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::calcHeight):
        (WebCore::RenderListBox::controlClipRect):
        * rendering/RenderListItem.cpp:
        (WebCore::RenderListItem::positionListMarker):
        (WebCore::RenderListItem::paint):
        * rendering/RenderListMarker.cpp:
        (WebCore::RenderListMarker::paint):
        (WebCore::RenderListMarker::layout):
        (WebCore::RenderListMarker::imageChanged):
        (WebCore::RenderListMarker::getRelativeMarkerRect):
        (WebCore::RenderListMarker::selectionRect):
        * rendering/RenderMarquee.cpp:
        (WebCore::RenderMarquee::computePosition):
        * rendering/RenderMedia.cpp:
        (WebCore::RenderMedia::layout):
        (WebCore::RenderMedia::lowestPosition):
        (WebCore::RenderMedia::rightmostPosition):
        (WebCore::RenderMedia::leftmostPosition):
        * rendering/RenderMenuList.cpp:
        (WebCore::RenderMenuList::controlClipRect):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::RenderObject):
        (WebCore::RenderObject::markAllDescendantsWithFloatsForLayout):
        (WebCore::RenderObject::paintOutline):
        (WebCore::RenderObject::addLineBoxRects):
        (WebCore::RenderObject::absoluteBoundingBoxRect):
        (WebCore::RenderObject::addAbsoluteRectForLayer):
        (WebCore::RenderObject::paintingRootRect):
        (WebCore::RenderObject::container):
        (WebCore::RenderObject::removeFromObjectLists):
        (WebCore::RenderObject::updateHitTestResult):
        (WebCore::RenderObject::addDashboardRegions):
        (WebCore::RenderObject::localTransform):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::isBox):
        (WebCore::RenderObject::hasMask):
        (WebCore::RenderObject::setIsText):
        (WebCore::RenderObject::setIsBox):
        (WebCore::RenderObject::borderTop):
        (WebCore::RenderObject::borderBottom):
        (WebCore::RenderObject::absoluteRects):
        (WebCore::RenderObject::collectAbsoluteLineBoxQuads):
        (WebCore::RenderObject::absoluteQuads):
        (WebCore::RenderObject::hasReflection):
        (WebCore::RenderObject::addFocusRingRects):
        (WebCore::RenderObject::absoluteOutlineBounds):
        * rendering/RenderPart.cpp:
        (WebCore::RenderPart::updateWidgetPosition):
        * rendering/RenderPath.cpp:
        (WebCore::RenderPath::layout):
        (WebCore::RenderPath::paint):
        (WebCore::RenderPath::absoluteOutlineBounds):
        * rendering/RenderPath.h:
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::layout):
        (WebCore::RenderReplaced::paint):
        (WebCore::RenderReplaced::shouldPaint):
        (WebCore::RenderReplaced::positionForCoordinates):
        (WebCore::RenderReplaced::localSelectionRect):
        (WebCore::RenderReplaced::adjustOverflowForBoxShadow):
        (WebCore::RenderReplaced::overflowRect):
        * rendering/RenderReplica.cpp:
        (WebCore::RenderReplica::layout):
        (WebCore::RenderReplica::calcPrefWidths):
        (WebCore::RenderReplica::paint):
        * rendering/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::paint):
        (WebCore::RenderSVGContainer::absoluteOutlineBounds):
        * rendering/RenderSVGContainer.h:
        (WebCore::RenderSVGContainer::width):
        (WebCore::RenderSVGContainer::height):
        * rendering/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::layout):
        * rendering/RenderSVGInlineText.cpp:
        (WebCore::RenderSVGInlineText::computeAbsoluteRectForRange):
        (WebCore::RenderSVGInlineText::positionForCoordinates):
        * rendering/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::layout):
        (WebCore::RenderSVGRoot::applyContentTransforms):
        (WebCore::RenderSVGRoot::paint):
        (WebCore::RenderSVGRoot::absoluteTransform):
        (WebCore::RenderSVGRoot::nodeAtPoint):
        * rendering/RenderSVGTSpan.cpp:
        (WebCore::RenderSVGTSpan::absoluteRects):
        (WebCore::RenderSVGTSpan::absoluteQuads):
        * rendering/RenderSVGText.cpp:
        (WebCore::RenderSVGText::layout):
        (WebCore::RenderSVGText::relativeBBox):
        * rendering/RenderSVGTextPath.cpp:
        (WebCore::RenderSVGTextPath::absoluteRects):
        (WebCore::RenderSVGTextPath::absoluteQuads):
        * rendering/RenderSVGViewportContainer.cpp:
        (WebCore::RenderSVGViewportContainer::nodeAtPoint):
        * rendering/RenderScrollbar.cpp:
        (WebCore::RenderScrollbar::createCustomScrollbar):
        (WebCore::RenderScrollbar::RenderScrollbar):
        (WebCore::RenderScrollbar::setParent):
        * rendering/RenderScrollbar.h:
        (WebCore::RenderScrollbar::owningRenderer):
        * rendering/RenderScrollbarPart.cpp:
        (WebCore::RenderScrollbarPart::layout):
        (WebCore::RenderScrollbarPart::layoutHorizontalPart):
        (WebCore::RenderScrollbarPart::layoutVerticalPart):
        (WebCore::RenderScrollbarPart::computeScrollbarWidth):
        (WebCore::RenderScrollbarPart::computeScrollbarHeight):
        (WebCore::RenderScrollbarPart::paintIntoRect):
        * rendering/RenderSlider.cpp:
        (WebCore::HTMLSliderThumbElement::defaultEventHandler):
        (WebCore::RenderSlider::layout):
        (WebCore::RenderSlider::mouseEventIsInThumb):
        (WebCore::RenderSlider::positionForOffset):
        (WebCore::RenderSlider::trackSize):
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::calcWidth):
        (WebCore::RenderTable::layout):
        (WebCore::RenderTable::paint):
        (WebCore::RenderTable::getBaselineOfFirstLineBox):
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::updateWidth):
        (WebCore::RenderTableCell::computeAbsoluteRepaintRect):
        (WebCore::RenderTableCell::localToAbsolute):
        (WebCore::RenderTableCell::absoluteToLocal):
        (WebCore::RenderTableCell::localToAbsoluteQuad):
        (WebCore::RenderTableCell::paint):
        (WebCore::RenderTableCell::paintBackgroundsBehindCell):
        * rendering/RenderTableCell.h:
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::addChild):
        (WebCore::RenderTableSection::addCell):
        (WebCore::RenderTableSection::setCellWidths):
        (WebCore::RenderTableSection::calcRowHeight):
        (WebCore::RenderTableSection::layoutRows):
        (WebCore::RenderTableSection::lowestPosition):
        (WebCore::RenderTableSection::rightmostPosition):
        (WebCore::RenderTableSection::leftmostPosition):
        (WebCore::RenderTableSection::getBaselineOfFirstLineBox):
        (WebCore::RenderTableSection::paint):
        (WebCore::RenderTableSection::recalcCells):
        (WebCore::RenderTableSection::nodeAtPoint):
        * rendering/RenderTableSection.h:
        (WebCore::RenderTableSection::overflowWidth):
        (WebCore::RenderTableSection::overflowHeight):
        * rendering/RenderText.cpp:
        (WebCore::RenderText::RenderText):
        (WebCore::RenderText::boundingBoxX):
        (WebCore::RenderText::boundingBoxY):
        (WebCore::RenderText::firstRunX):
        (WebCore::RenderText::firstRunY):
        (WebCore::RenderText::boundingBoxHeight):
        (WebCore::RenderText::boundingBoxWidth):
        * rendering/RenderText.h:
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::textBlockHeight):
        (WebCore::RenderTextControl::textBlockWidth):
        (WebCore::RenderTextControl::setSelectionRange):
        (WebCore::RenderTextControl::calcHeight):
        (WebCore::RenderTextControl::hitInnerTextBlock):
        (WebCore::RenderTextControl::controlClipRect):
        * rendering/RenderTextControlMultiLine.cpp:
        (WebCore::RenderTextControlMultiLine::layout):
        (WebCore::RenderTextControlMultiLine::adjustControlHeightBasedOnLineHeight):
        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::paint):
        (WebCore::RenderTextControlSingleLine::layout):
        (WebCore::RenderTextControlSingleLine::nodeAtPoint):
        (WebCore::RenderTextControlSingleLine::forwardEvent):
        (WebCore::RenderTextControlSingleLine::textBlockWidth):
        (WebCore::RenderTextControlSingleLine::adjustControlHeightBasedOnLineHeight):
        (WebCore::RenderTextControlSingleLine::clientPaddingLeft):
        (WebCore::RenderTextControlSingleLine::clientPaddingRight):
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::hitTestMediaControlPart):
        (WebCore::RenderTheme::baselinePosition):
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::paintSearchFieldCancelButton):
        (WebCore::RenderThemeMac::paintSearchFieldResultsDecoration):
        (WebCore::RenderThemeMac::paintSearchFieldResultsButton):
        (WebCore::RenderThemeMac::hitTestMediaControlPart):
        * rendering/RenderTreeAsText.cpp:
        (WebCore::operator<<):
        * rendering/RenderVideo.cpp:
        (WebCore::RenderVideo::videoBox):
        * rendering/RenderView.cpp:
        (WebCore::RenderView::RenderView):
        (WebCore::RenderView::calcHeight):
        (WebCore::RenderView::calcWidth):
        (WebCore::RenderView::layout):
        (WebCore::RenderView::viewRect):
        (WebCore::RenderView::docHeight):
        (WebCore::RenderView::docWidth):
        (WebCore::RenderView::setBestTruncatedAt):
        * rendering/RenderView.h:
        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::paint):
        (WebCore::RenderWidget::updateWidgetPosition):
        (WebCore::RenderWidget::nodeAtPoint):
        * rendering/RootInlineBox.h:
        (WebCore::RootInlineBox::floats):
        (WebCore::RootInlineBox::floatsPtr):
        * rendering/SVGInlineFlowBox.cpp:
        (WebCore::SVGInlineFlowBox::verticallyAlignBoxes):
        * rendering/SVGInlineFlowBox.h:
        * rendering/SVGRenderTreeAsText.cpp:
        (WebCore::operator<<):
        (WebCore::write):
        * rendering/SVGRootInlineBox.cpp:
        (WebCore::SVGRootInlineBox::verticallyAlignBoxes):
        (WebCore::SVGRootInlineBox::computePerCharacterLayoutInformation):
        (WebCore::SVGRootInlineBox::layoutInlineBoxes):
        * rendering/SVGRootInlineBox.h:
        * rendering/bidi.cpp:
        (WebCore::RenderBlock::computeHorizontalPositionsForLine):
        (WebCore::RenderBlock::computeVerticalPositionsForLine):
        (WebCore::RenderBlock::layoutInlineChildren):
        (WebCore::RenderBlock::determineStartPosition):
        (WebCore::RenderBlock::matchedEndLine):
        (WebCore::RenderBlock::skipTrailingWhitespace):
        (WebCore::RenderBlock::skipLeadingWhitespace):
        (WebCore::RenderBlock::fitBelowFloats):
        (WebCore::RenderBlock::findNextLineBreak):
        (WebCore::RenderBlock::checkLinesForOverflow):
        * svg/SVGLength.cpp:
        (WebCore::SVGLength::PercentageOfViewport):

2009-01-21  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        * WebCore.LP64.exp:
        Add some bridge related symbols.

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

2009-01-20  David Levin  <levin@chromium.org>

        Reviewed by Alexey Proskuryakov.

        Bug 22720: Make XMLHttpRequest work in Workers
        <https://bugs.webkit.org/show_bug.cgi?id=22720>

        More removal of document usage from XMLHttpRequest.
        * Abstracted away the sync and async requests behind the ThreadableLoader class, which
          will get an implementation for Workers.  ThreadableLoader follows the same model as
          SubresourceLoader because DocumentThreadableLoader is a thin wrapper around SubresourceLoader.
          Also, WorkerThreadableLoader (coming soon) will use DocumentThreadableLoader to get things done.
        * Consolidated dashboard compatibility checks into usesDashboardBackwardCompatibilityMode
          which handles workers.

        No observable change in behavior, so no test.

        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.scons:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * loader/DocumentThreadableLoader.cpp: Added.
        (WebCore::DocumentThreadableLoader::create):
        (WebCore::DocumentThreadableLoader::DocumentThreadableLoader):
        (WebCore::DocumentThreadableLoader::~DocumentThreadableLoader):
        (WebCore::DocumentThreadableLoader::cancel):
        (WebCore::DocumentThreadableLoader::willSendRequest):
        (WebCore::DocumentThreadableLoader::didSendData):
        (WebCore::DocumentThreadableLoader::didReceiveResponse):
        (WebCore::DocumentThreadableLoader::didReceiveData):
        (WebCore::DocumentThreadableLoader::didFinishLoading):
        (WebCore::DocumentThreadableLoader::didFail):
        (WebCore::DocumentThreadableLoader::receivedCancellation):
        * loader/DocumentThreadableLoader.h: Added.
        (WebCore::DocumentThreadableLoader::refThreadableLoader):
        (WebCore::DocumentThreadableLoader::derefThreadableLoader):
        * loader/SubresourceLoaderClient.h:
        (WebCore::SubresourceLoaderClient::didReceiveData):
        * loader/ThreadableLoader.cpp: Added.
        (WebCore::ThreadableLoader::create):
        (WebCore::ThreadableLoader::loadResourceSynchronously):
        * loader/ThreadableLoader.h: Added.
        (WebCore::):
        (WebCore::ThreadableLoader::ref):
        (WebCore::ThreadableLoader::deref):
        (WebCore::ThreadableLoader::~ThreadableLoader):
        * loader/ThreadableLoaderClient.h: Added.
        (WebCore::ThreadableLoaderClient::didSendData):
        (WebCore::ThreadableLoaderClient::didReceiveResponse):
        (WebCore::ThreadableLoaderClient::didReceiveData):
        (WebCore::ThreadableLoaderClient::didFinishLoading):
        (WebCore::ThreadableLoaderClient::didFail):
        (WebCore::ThreadableLoaderClient::didGetCancelled):
        (WebCore::ThreadableLoaderClient::didReceiveAuthenticationCancellation):
        (WebCore::ThreadableLoaderClient::~ThreadableLoaderClient):
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::XMLHttpRequest):
        (WebCore::XMLHttpRequest::usesDashboardBackwardCompatibilityMode):
        (WebCore::XMLHttpRequest::send):
        (WebCore::XMLHttpRequest::loadRequestSynchronously):
        (WebCore::XMLHttpRequest::loadRequestAsynchronously):
        (WebCore::XMLHttpRequest::setRequestHeader):
        (WebCore::XMLHttpRequest::processSyncLoadResults):
        (WebCore::XMLHttpRequest::didFail):
        (WebCore::XMLHttpRequest::didGetCancelled):
        (WebCore::XMLHttpRequest::didFinishLoading):
        (WebCore::XMLHttpRequest::didFinishLoadingPreflight):
        (WebCore::XMLHttpRequest::didSendData):
        (WebCore::XMLHttpRequest::didReceiveResponse):
        (WebCore::XMLHttpRequest::didReceiveResponsePreflight):
        (WebCore::XMLHttpRequest::didReceiveAuthenticationCancellation):
        (WebCore::XMLHttpRequest::didReceiveData):
        * xml/XMLHttpRequest.h:

2009-01-19  Chris Marrin  <cmarrin@apple.com>

        Reviewed by David Hyatt.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=23317

        The high CPU usage was really from repeatedly firing transitions caused
        by a bug in the way we handle background-color animations. If animating
        from a valid background color to no background color, we sometimes left
        (based on timing) the background color as transparent black, but valid
        rather than invalid, which it should be. Fixing that got rid of the
        repeated firing.

        But we really were doing more expensive iteration of all objects with
        animations or transitions on them (running or not). So I added two
        optimizations to quickly short circuit when an object had no running
        animations or transitions. Things are now as zippy as ever.

        Test: transitions/repeated-firing-background-color.html

        * page/animation/AnimationBase.cpp:
        (WebCore::blendFunc):
        * page/animation/AnimationController.cpp:
        (WebCore::AnimationControllerPrivate::updateAnimationTimer):
        * page/animation/CompositeAnimation.cpp:
        (WebCore::CompositeAnimationPrivate::hasAnimations):
        (WebCore::CompositeAnimationPrivate::clearRenderer):
        (WebCore::CompositeAnimationPrivate::animate):
        (WebCore::CompositeAnimationPrivate::setAnimating):
        (WebCore::CompositeAnimationPrivate::willNeedService):
        (WebCore::CompositeAnimationPrivate::getAnimationForProperty):
        (WebCore::CompositeAnimationPrivate::cleanupFinishedAnimations):
        (WebCore::CompositeAnimationPrivate::setAnimationStartTime):
        (WebCore::CompositeAnimationPrivate::setTransitionStartTime):
        (WebCore::CompositeAnimationPrivate::suspendAnimations):
        (WebCore::CompositeAnimationPrivate::resumeAnimations):
        (WebCore::CompositeAnimationPrivate::overrideImplicitAnimations):
        (WebCore::CompositeAnimationPrivate::resumeOverriddenImplicitAnimations):
        (WebCore::CompositeAnimationPrivate::styleAvailable):
        (WebCore::CompositeAnimationPrivate::isAnimatingProperty):
        (WebCore::CompositeAnimationPrivate::numberOfActiveAnimations):
        (WebCore::CompositeAnimation::hasAnimations):
        * page/animation/CompositeAnimation.h:

2009-01-21  Eric Seidel  <eric@webkit.org>

        Reviewed by Justin Garcia.

        Remove the style='' turds left by some editing commands
        https://bugs.webkit.org/show_bug.cgi?id=23463

        Test: editing/execCommand/toggle-styles.html

        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::removeCSSStyle): check if we just removed the last CSS property and remove the style attribute as well
        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::removeNodeAttribute): remove extra ;

2009-01-21  Eric Seidel  <eric@webkit.org>

        No review, build fix.

        Fix release-only build failure (and do a tiny code-cleanup).

        * editing/ApplyStyleCommand.cpp:
        (WebCore::createFontElement):
        (WebCore::createStyleSpanElement):
        (WebCore::ApplyStyleCommand::addInlineStyleIfNeeded):

2009-01-21  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Beth Dakin.

        Bug 23443: Table accessibility should be re-enabled after fixing crash that occurs at WebCore::AccessibilityTable::isTableExposableThroughAccessibility()
        https://bugs.webkit.org/show_bug.cgi?id=23443

        Test: accessibility/table-modification-crash.html

        * page/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::updateBackingStore):
        * page/AccessibilityObject.h:
        * page/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::childrenChanged):
        (WebCore::AccessibilityRenderObject::children):
        (WebCore::AccessibilityRenderObject::updateBackingStore):
        * page/AccessibilityRenderObject.h:
        (WebCore::AccessibilityRenderObject::markChildrenDirty):
        * page/AccessibilityTable.cpp:
        (WebCore::AccessibilityTable::AccessibilityTable):
        * page/mac/AccessibilityObjectWrapper.mm:
        (-[AccessibilityObjectWrapper accessibilityActionNames]):
        (-[AccessibilityObjectWrapper accessibilityAttributeNames]):
        (-[AccessibilityObjectWrapper accessibilityAttributeValue:]):
        (-[AccessibilityObjectWrapper accessibilityFocusedUIElement]):
        (-[AccessibilityObjectWrapper accessibilityHitTest:]):
        (-[AccessibilityObjectWrapper accessibilityIsAttributeSettable:]):
        (-[AccessibilityObjectWrapper accessibilityIsIgnored]):
        (-[AccessibilityObjectWrapper accessibilityParameterizedAttributeNames]):
        (-[AccessibilityObjectWrapper accessibilityPerformPressAction]):
        (-[AccessibilityObjectWrapper accessibilityPerformAction:]):
        (-[AccessibilityObjectWrapper accessibilitySetValue:forAttribute:]):
        (-[AccessibilityObjectWrapper accessibilityAttributeValue:forParameter:]):
        (-[AccessibilityObjectWrapper accessibilityIndexOfChild:]):
        (-[AccessibilityObjectWrapper accessibilityArrayAttributeCount:]):
        (-[AccessibilityObjectWrapper accessibilityArrayAttributeValues:index:maxCount:]):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::destroy):
        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::destroy):

2009-01-16  Eric Seidel  <eric@webkit.org>

        Reviewed by Justin Garcia.

        Fix execCommand() 'super' and 'sub' commands to add <sup> and <sub> in quirks mode, and to toggle when called twice
        https://bugs.webkit.org/show_bug.cgi?id=17733

        Test changed: editing/execCommand/toggle-styles-expected.txt

        * editing/ApplyStyleCommand.cpp:
        (WebCore::StyleChange::applySubscript):
        (WebCore::StyleChange::applySuperscript):
        (WebCore::StyleChange::StyleChange):
        (WebCore::StyleChange::init):
        (WebCore::StyleChange::checkForLegacyHTMLStyleChange):
        (WebCore::ApplyStyleCommand::isHTMLStyleNode):
        (WebCore::ApplyStyleCommand::addInlineStyleIfNeeded):
        * editing/EditorCommand.cpp:
        (WebCore::executeSubscript):
        (WebCore::executeSuperscript):
        * editing/htmlediting.cpp:
        (WebCore::createHTMLElement):
        * editing/htmlediting.h:

2009-01-21  Anders Carlsson  <andersca@apple.com>

        Fix 64-bit build.

        * WebCore.LP64.exp:

2009-01-21  Oliver Hunt  <oliver@apple.com>

        Reviewed by Alexey Proskuryakov.

        Bug 23458: Reintroduce CanvasPixelArray in ImageData.idl
        <https://bugs.webkit.org/show_bug.cgi?id=23458>

        Return CanvasPixelArray, et al -- the only difference between this
        and the original CPA implementation is that it now uses a ByteArray
        rather than a vector.  JSC still uses a custom wrapper, but this allows
        ObjC, COM, and V8 bindings to be autogenerated again.

        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * bindings/js/JSImageDataCustom.cpp:
        (WebCore::toJS):
        * html/CanvasPixelArray.cpp: Added.
        (WebCore::CanvasPixelArray::create):
        (WebCore::CanvasPixelArray::CanvasPixelArray):
        * html/CanvasPixelArray.h: Added.
        (WebCore::CanvasPixelArray::data):
        (WebCore::CanvasPixelArray::length):
        (WebCore::CanvasPixelArray::set):
        (WebCore::CanvasPixelArray::get):
        * html/CanvasPixelArray.idl: Added.
        * html/CanvasRenderingContext2D.cpp:
        (WebCore::createEmptyImageData):
        * html/ImageData.cpp:
        (WebCore::ImageData::ImageData):
        * html/ImageData.h:
        (WebCore::ImageData::data):
        * html/ImageData.idl:
        * platform/graphics/cairo/ImageBufferCairo.cpp:
        (WebCore::ImageBuffer::getImageData):
        (WebCore::ImageBuffer::putImageData):
        * platform/graphics/cg/ImageBufferCG.cpp:
        (WebCore::ImageBuffer::getImageData):
        (WebCore::ImageBuffer::putImageData):

2009-01-21  Dirk Schulze  <krit@webkit.org>

        Reviewed by Nikolas Zimmermann.

        Remove last relics of platform dependent PaintServer in SVG.
        We draw everything with the help of GraphicsContext.

        Remove SVGPaintServerPlatform's
        [https://bugs.webkit.org/show_bug.cgi?id=23439]

        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * svg/graphics/SVGPaintServer.cpp:
        (WebCore::SVGPaintServer::draw):
        (WebCore::SVGPaintServer::renderPath):
        (WebCore::SVGPaintServer::teardown):
        * svg/graphics/SVGPaintServer.h:
        * svg/graphics/SVGPaintServerGradient.cpp:
        * svg/graphics/SVGPaintServerGradient.h:
        * svg/graphics/SVGPaintServerPattern.cpp:
        * svg/graphics/SVGPaintServerPattern.h:
        * svg/graphics/SVGPaintServerSolid.cpp:
        * svg/graphics/SVGPaintServerSolid.h:
        * svg/graphics/cairo/SVGPaintServerCairo.cpp: Removed.
        * svg/graphics/cg/SVGPaintServerCg.cpp: Removed.
        * svg/graphics/qt/SVGPaintServerQt.cpp: Removed.
        * svg/graphics/skia/SVGPaintServerSkia.cpp: Removed.

2009-01-21  Nikolas Zimmermann  <nikolas.zimmermann@torchmobile.com>

        Reviewed by Alexey Proskuryakov.

        Move "Element -> ScriptElement" casting functionality into ScriptElement.h
        to be consistent with FormControlElement/InputElement/OptionElement/OptionGroupElement.

        It was living in XMLTokenizer before, which is not an obvious place for this.
        TODO: Rename 'formControlElementForElement' to 'toFormControlElement' (analogous changes for InputElement etc.)
              as suggested by Alexey, it really reads better this way.

        * dom/ScriptElement.cpp:
        (WebCore::toScriptElement):
        * dom/ScriptElement.h:
        * dom/XMLTokenizer.cpp:
        (WebCore::XMLTokenizer::notifyFinished):
        * dom/XMLTokenizer.h:
        * dom/XMLTokenizerLibxml2.cpp:
        (WebCore::XMLTokenizer::startElementNs):
        (WebCore::XMLTokenizer::endElementNs):
        * dom/XMLTokenizerQt.cpp:
        (WebCore::XMLTokenizer::parseStartElement):
        (WebCore::XMLTokenizer::parseEndElement):

2009-01-20  Nikolas Zimmermann  <nikolas.zimmermann@torchmobile.com>

        Reviewed by George Staikos.

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

        Refactor some functionality from HTMLOption/OptGroupElement needed by RenderListBox/RenderMenuList
        in two abstract base classes: OptionElement & OptionGroupElement living in dom/ - just like it
        has been done before for FormControlElement and RenderTextControl.

        This is needed to prepare the addtion of WMLOption/OptGroupElement.

        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.scons:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * dom/OptionElement.cpp: Added.
        (WebCore::optionElementForElement):
        * dom/OptionElement.h: Added.
        (WebCore::OptionElement::~OptionElement):
        (WebCore::OptionElement::OptionElement):
        * dom/OptionGroupElement.cpp: Added.
        (WebCore::optionGroupElementForElement):
        * dom/OptionGroupElement.h: Added.
        (WebCore::OptionGroupElement::~OptionGroupElement):
        (WebCore::OptionGroupElement::OptionGroupElement):
        * html/HTMLOptGroupElement.h:
        * html/HTMLOptionElement.cpp:
        (WebCore::HTMLOptionElement::optionText):
        * html/HTMLOptionElement.h:
        (WebCore::HTMLOptionElement::selected):
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::updateFromElement):
        (WebCore::RenderListBox::paintItemForeground):
        (WebCore::RenderListBox::paintItemBackground):
        * rendering/RenderMenuList.cpp:
        (WebCore::RenderMenuList::updateOptionsWidth):
        (WebCore::RenderMenuList::setTextFromOption):
        (WebCore::RenderMenuList::itemText):
        (WebCore::RenderMenuList::itemIsSelected):

2009-01-20  Darin Adler  <darin@apple.com>

        Reviewed by Alexey Proskuryakov.

        Bug 23448: memory leak in Mac version of preferredExtensionForImageSourceType
        https://bugs.webkit.org/show_bug.cgi?id=23448

        * platform/graphics/cg/ImageSourceCGMac.mm:
        (WebCore::preferredExtensionForImageSourceType): Use RetainPtr to avoid the leak.

2009-01-20  Darin Adler  <darin@apple.com>

        Try to fix Wx build.

        * platform/wx/PasteboardWx.cpp:
        (WebCore::Pasteboard::writeSelection): Removed code that replaces backslash
        with backslashAsCurrencySymbol. I'm pretty sure this is not needed when writing
        to the clipboard. Other platforms don't do it. If it was needed, the new function
        to use would be displayStringModifiedByEncoding.

2009-01-19  Brent Fulgham  <bfulgham@gmail.com>

        Reviewed by Mitz Pettel.

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

        The Windows Cairo post-build targets (Release/Debug) do not
        copy all of the headers that the CG-based build does.

        * WebCore.vcproj/WebCore.vcproj: Extend WebCore Cairo build targets
          to copy the page/animation/*.h files into WebKitBuild so that
          WebKit can find them.

2009-01-20  Dmitry Titov  <dimich@chromium.org>

        Reviewed by Alexey Proskuryakov.

        https://bugs.webkit.org/show_bug.cgi?id=23413
        Remove unused WebCore::setDeferringTimers()

        * platform/Timer.cpp:
        (WebCore::updateSharedTimer):
        * platform/Timer.h:

2009-01-20  David Hyatt  <hyatt@apple.com>

        Tighten up the type of RenderObject owned by RenderLayer to be a RenderBox.  Rename m_object to
        m_renderer to be consistent with the corresponding member function.

        Reviewed by Jon Honeycutt

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::RenderLayer):
        (WebCore::RenderLayer::updateLayerPositions):
        (WebCore::RenderLayer::updateVisibilityStatus):
        (WebCore::RenderLayer::updateLayerPosition):
        (WebCore::RenderLayer::stackingContext):
        (WebCore::RenderLayer::enclosingPositionedAncestor):
        (WebCore::RenderLayer::enclosingTransformedAncestor):
        (WebCore::RenderLayer::isTransparent):
        (WebCore::RenderLayer::convertToLayerCoords):
        (WebCore::RenderLayer::scrollByRecursively):
        (WebCore::RenderLayer::scrollToOffset):
        (WebCore::RenderLayer::scrollRectToVisible):
        (WebCore::RenderLayer::resize):
        (WebCore::RenderLayer::scrollbarCornerPresent):
        (WebCore::RenderLayer::createScrollbar):
        (WebCore::RenderLayer::setHasHorizontalScrollbar):
        (WebCore::RenderLayer::setHasVerticalScrollbar):
        (WebCore::RenderLayer::positionOverflowControls):
        (WebCore::RenderLayer::computeScrollDimensions):
        (WebCore::RenderLayer::updateOverflowStatus):
        (WebCore::RenderLayer::updateScrollInfoAfterLayout):
        (WebCore::RenderLayer::paintOverflowControls):
        (WebCore::RenderLayer::paintScrollCorner):
        (WebCore::RenderLayer::paintResizer):
        (WebCore::RenderLayer::isPointInResizeControl):
        (WebCore::RenderLayer::paintLayer):
        (WebCore::RenderLayer::hitTestLayer):
        (WebCore::RenderLayer::updateClipRects):
        (WebCore::RenderLayer::calculateClipRects):
        (WebCore::RenderLayer::calculateRects):
        (WebCore::RenderLayer::clearClipRects):
        (WebCore::RenderLayer::repaintIncludingDescendants):
        (WebCore::RenderLayer::styleChanged):
        (WebCore::RenderLayer::updateScrollCornerStyle):
        (WebCore::RenderLayer::updateResizerStyle):
        * rendering/RenderLayer.h:
        (WebCore::RenderLayer::renderer):
        (WebCore::RenderLayer::hasReflection):
        (WebCore::RenderLayer::hasTransform):

2009-01-20  David Hyatt  <hyatt@apple.com>

        Fix Mac build bustage from my selection changes.  I forgot to implement the functions on RenderThemeMac
        for returning the appropriate listbox selection colors.

        Reviewed by Adele

        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::platformActiveListBoxSelectionForegroundColor):
        (WebCore::RenderThemeMac::platformInactiveListBoxSelectionForegroundColor):
        (WebCore::RenderThemeMac::platformInactiveListBoxSelectionBackgroundColor):

2009-01-20  Dave Hyatt  <hyatt@apple.com>

        Fix for focus rings on Windows.  Make sure that focus rings draw for all controls but buttons.

        Fix list box selection colors on Windows.  Also add a cache for all of the selection colors (and not just the two
        background selection colors).

        Reviewed by Adam Roben

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::selectionForegroundColor):
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::activeSelectionBackgroundColor):
        (WebCore::RenderTheme::inactiveSelectionBackgroundColor):
        (WebCore::RenderTheme::activeSelectionForegroundColor):
        (WebCore::RenderTheme::inactiveSelectionForegroundColor):
        (WebCore::RenderTheme::activeListBoxSelectionBackgroundColor):
        (WebCore::RenderTheme::inactiveListBoxSelectionBackgroundColor):
        (WebCore::RenderTheme::activeListBoxSelectionForegroundColor):
        (WebCore::RenderTheme::inactiveListBoxSelectionForegroundColor):
        (WebCore::RenderTheme::platformActiveSelectionForegroundColor):
        (WebCore::RenderTheme::platformInactiveSelectionBackgroundColor):
        (WebCore::RenderTheme::platformInactiveSelectionForegroundColor):
        (WebCore::RenderTheme::platformActiveListBoxSelectionBackgroundColor):
        (WebCore::RenderTheme::platformActiveListBoxSelectionForegroundColor):
        (WebCore::RenderTheme::platformInactiveListBoxSelectionBackgroundColor):
        (WebCore::RenderTheme::platformInactiveListBoxSelectionForegroundColor):
        (WebCore::RenderTheme::platformColorsDidChange):
        * rendering/RenderTheme.h:
        (WebCore::RenderTheme::supportsForegroundSelectionColors):
        (WebCore::RenderTheme::supportsForegroundListBoxSelectionColors):
        * rendering/RenderThemeMac.h:
        (WebCore::RenderThemeMac::supportsForegroundSelectionColors):
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::platformActiveListBoxSelectionBackgroundColor):
        * rendering/RenderThemeWin.cpp:
        (WebCore::RenderThemeWin::platformInactiveSelectionBackgroundColor):
        (WebCore::RenderThemeWin::platformInactiveSelectionForegroundColor):
        (WebCore::RenderThemeWin::supportsFocus):
        (WebCore::RenderThemeWin::supportsFocusRing):
        * rendering/RenderThemeWin.h:

2009-01-20  Nikolas Zimmermann  <nikolas.zimmermann@torchmobile.com>

        Reviewed by George Staikos.

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

        Add WML <input> element support - it required a lot of changes to the RenderText*/HTMLInput* code.
        Now any language can provide <input>-style elements, without having to inherit from HTML* classes.

        No WML specific features/attributes are handled so far. A follow-up patch will provide those bits.
        Added very simple fast/wml/input.wml, just checking that input elements can be rendered properly now.
        Detailed testcases will follow in conjunction with the WML specific attribute support.

        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::adjustRenderStyle):
        * dom/FormControlElement.cpp: Activate disabled code from previous checking.
        (WebCore::formControlElementForElement):
        * dom/InputElement.cpp: Ditto.
        (WebCore::inputElementForElement):
        * wml/WMLInputElement.cpp: Added.
        (WebCore::WMLInputElement::WMLInputElement):
        (WebCore::WMLInputElement::~WMLInputElement):
        (WebCore::isInputFocusable):
        (WebCore::WMLInputElement::isKeyboardFocusable):
        (WebCore::WMLInputElement::isMouseFocusable):
        (WebCore::WMLInputElement::dispatchFocusEvent):
        (WebCore::WMLInputElement::dispatchBlurEvent):
        (WebCore::WMLInputElement::updateFocusAppearance):
        (WebCore::WMLInputElement::aboutToUnload):
        (WebCore::WMLInputElement::size):
        (WebCore::WMLInputElement::name):
        (WebCore::WMLInputElement::value):
        (WebCore::WMLInputElement::setValue):
        (WebCore::WMLInputElement::setValueFromRenderer):
        (WebCore::WMLInputElement::saveState):
        (WebCore::WMLInputElement::restoreState):
        (WebCore::WMLInputElement::select):
        (WebCore::WMLInputElement::accessKeyAction):
        (WebCore::WMLInputElement::parseMappedAttribute):
        (WebCore::WMLInputElement::copyNonAttributeProperties):
        (WebCore::WMLInputElement::createRenderer):
        (WebCore::WMLInputElement::attach):
        (WebCore::WMLInputElement::detach):
        (WebCore::WMLInputElement::appendFormData):
        (WebCore::WMLInputElement::reset):
        (WebCore::WMLInputElement::defaultEventHandler):
        (WebCore::WMLInputElement::cacheSelection):
        (WebCore::WMLInputElement::constrainValue):
        (WebCore::WMLInputElement::documentDidBecomeActive):
        (WebCore::WMLInputElement::placeholderShouldBeVisible):
        (WebCore::WMLInputElement::willMoveToNewOwnerDocument):
        (WebCore::WMLInputElement::didMoveToNewOwnerDocument):
        * wml/WMLInputElement.h: Added.
        (WebCore::WMLInputElement::valueMatchesRenderer):
        (WebCore::WMLInputElement::setValueMatchesRenderer):
        (WebCore::WMLInputElement::shouldUseInputMethod):
        (WebCore::WMLInputElement::isChecked):
        (WebCore::WMLInputElement::isIndeterminate):
        (WebCore::WMLInputElement::isTextControl):
        (WebCore::WMLInputElement::isRadioButton):
        (WebCore::WMLInputElement::isTextField):
        (WebCore::WMLInputElement::isSearchField):
        (WebCore::WMLInputElement::isInputTypeHidden):
        (WebCore::WMLInputElement::isPasswordField):
        (WebCore::WMLInputElement::searchEventsShouldBeDispatched):
        (WebCore::WMLInputElement::placeholderValue):
        * wml/WMLTagNames.in:

2009-01-20  Darin Adler  <darin@apple.com>

        Reviewed by John Sullivan.

        Remove a little dead code left over after the fix for
        https://bugs.webkit.org/show_bug.cgi?id=11395, which
        moved pointer-events from SVG to be shared with HTML.

        * css/SVGCSSParser.cpp:
        (WebCore::CSSParser::parseSVGValue): Remove SVG's parsing of this
        property since it's handled in the non-SVG function now so we'll
        never get here.

2009-01-20  Julien Chaffraix  <jchaffraix@webkit.org>

        Reviewed by Darin Adler.

        Bug 23438: Provide a default value to the .in file parser

        Added the default value 1 as it simplifies some of
        the format by removing some "=1" that were awkward.

        This was suggested by Darin Adler as par of a previous
        review.

        * bindings/scripts/InFilesParser.pm: When no value
        was entered (the second part of the split is undef),
        provide the default value.

        * html/HTMLAttributeNames.in: Removed unnecessary "=1".
        * html/HTMLTagNames.in: Ditto.
        * svg/svgattrs.in: Ditto.
        * svg/svgtags.in: Ditto.
        * svg/xlinkattrs.in: Ditto.
        * wml/WMLAttributeNames.in: Ditto.

2009-01-20  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin Adler.

        * bridge/c/c_class.cpp:
        * bridge/c/c_class.h:
        Get rid of CClass::name().

        * bridge/jni/jni_class.h:
        Get rid of JavaClass::name().

        * bridge/objc/objc_class.h:
        * bridge/objc/objc_class.mm:
        Get rid of ObjcClass::name().

        * bridge/objc/objc_instance.h:
        Get rid of supportsSetValueOfUndefinedField.

        * bridge/objc/objc_instance.mm:
        (ObjcInstance::setValueOfUndefinedField):
        Fold supportsSetValueOfUndefinedField into setValueOfUndefinedField.

        * bridge/runtime.cpp:
        Get rid of getValueOfField and setValueOfField.

        * bridge/runtime.h:
        (JSC::Bindings::Instance::setValueOfUndefinedField):
        Have this return a bool and get rid of supportsSetValueOfUndefinedField

        * bridge/runtime_object.cpp:
        (JSC::RuntimeObjectImp::fieldGetter):
        Call Field::valueFromInstance on the field.

        (JSC::RuntimeObjectImp::put):
        Call Field::setValueToInstance on the field.

2009-01-20  Nikolas Zimmermann  <nikolas.zimmermann@torchmobile.com>

        Not reviewed. Forgot to land build changes for non-mac platforms.

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

2009-01-20  Nikolas Zimmermann  <nikolas.zimmermann@torchmobile.com>

        Reviewed by Adam Roben.

        Fix last-minute regression, introduced by simplifying max length determination - by
        clamping using min/max, negative maxLength values got broken.

        * dom/InputElement.cpp:
        (WebCore::InputElement::parseMaxLengthAttribute):

2009-01-20  Nikolas Zimmermann  <nikolas.zimmermann@torchmobile.com>

        Reviewed by Adam Roben.

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

        Add InputElement abstraction, similar to the FormControlElement refactorization
        done a month ago. The goal is to share as much code as possible between HTML/WMLInputElement.
        In a previous patch the RenderTextControl class has been split-up in RenderTextControlSingle/MultiLine,
        RenderTextControl itself only depends on FormControlElement, RenderTextControlSingleLine still
        depends on HTMLInputElement directly -> change that and make it use the new InputElement abstraction.

        A lot of code from HTMLInputElement now lives in InputElement, as static member functions - the
        InputElement class itself is an abstract virtual class, just like ScriptElement. HTML/WMLInputElement
        derive from InputElement, and hold a InputElementData member variable, that they pass to the
        static functions in InputElement. The abstraction is equal to the one chosen for HTML/SVGScriptElement.

        * WebCore.xcodeproj/project.pbxproj:
        * dom/FormControlElement.cpp: Added.
        (WebCore::formControlElementForElement):
        * dom/FormControlElement.h:
        * dom/InputElement.cpp: Added.
        (WebCore::InputElement::dispatchFocusEvent):
        (WebCore::InputElement::dispatchBlurEvent):
        (WebCore::InputElement::updatePlaceholderVisibility):
        (WebCore::InputElement::updateFocusAppearance):
        (WebCore::InputElement::updateSelectionRange):
        (WebCore::InputElement::aboutToUnload):
        (WebCore::InputElement::setValueFromRenderer):
        (WebCore::numCharactersInGraphemeClusters):
        (WebCore::InputElement::constrainValue):
        (WebCore::numGraphemeClusters):
        (WebCore::InputElement::handleBeforeTextInsertedEvent):
        (WebCore::InputElement::parseSizeAttribute):
        (WebCore::InputElement::parseMaxLengthAttribute):
        (WebCore::InputElement::updateValueIfNeeded):
        (WebCore::InputElement::notifyFormStateChanged):
        (WebCore::InputElementData::InputElementData):
        (WebCore::InputElementData::~InputElementData):
        (WebCore::InputElementData::name):
        (WebCore::inputElementForElement):
        * dom/InputElement.h: Added.
        (WebCore::InputElement::~InputElement):
        (WebCore::InputElement::InputElement):
        (WebCore::InputElementData::inputElement):
        (WebCore::InputElementData::element):
        (WebCore::InputElementData::placeholderShouldBeVisible):
        (WebCore::InputElementData::setPlaceholderShouldBeVisible):
        (WebCore::InputElementData::setName):
        (WebCore::InputElementData::value):
        (WebCore::InputElementData::setValue):
        (WebCore::InputElementData::size):
        (WebCore::InputElementData::setSize):
        (WebCore::InputElementData::maxLength):
        (WebCore::InputElementData::setMaxLength):
        (WebCore::InputElementData::cachedSelectionStart):
        (WebCore::InputElementData::setCachedSelectionStart):
        (WebCore::InputElementData::cachedSelectionEnd):
        (WebCore::InputElementData::setCachedSelectionEnd):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::HTMLInputElement):
        (WebCore::HTMLInputElement::name):
        (WebCore::HTMLInputElement::updateFocusAppearance): Moved to InputElement.
        (WebCore::HTMLInputElement::aboutToUnload): Ditto.
        (WebCore::HTMLInputElement::dispatchFocusEvent): Ditto.
        (WebCore::HTMLInputElement::dispatchBlurEvent): Ditto.
        (WebCore::HTMLInputElement::setSelectionRange): Moved to InputElement::updateSelectionRange, call it from here.
        (WebCore::HTMLInputElement::parseMappedAttribute):
        (WebCore::HTMLInputElement::size): Make virtual and override InputElements abstract version.
        (WebCore::HTMLInputElement::copyNonAttributeProperties):
        (WebCore::HTMLInputElement::value): Make virtual and override InputElements abstract version.
        (WebCore::HTMLInputElement::setValue): Ditto.
        (WebCore::HTMLInputElement::placeholderValue): Ditto.
        (WebCore::HTMLInputElement::searchEventsShouldBeDispatched): Ditto.
        (WebCore::HTMLInputElement::setValueFromRenderer): Ditto.
        (WebCore::HTMLInputElement::setFileListFromRenderer): Use new code in InputElement::setValueFromRenderer
        (WebCore::HTMLInputElement::defaultEventHandler):
        (WebCore::HTMLInputElement::setDefaultName): Added as helper function for HTMLIsIndexElement.
        (WebCore::HTMLInputElement::maxLength): Added accesor.
        (WebCore::HTMLInputElement::constrainValue): Move functionality to InputElement::constrainValue.
        (WebCore::HTMLInputElement::cacheSelection): Move functionality to InputElement::cacheSelection.
        (WebCore::HTMLInputElement::selection):
        (WebCore::HTMLInputElement::placeholderShouldBeVisible): Make virtual and override InputElements abstract version.
        * html/HTMLInputElement.h:
        (WebCore::HTMLInputElement::isTextField):
        (WebCore::HTMLInputElement::isSearchField):
        (WebCore::HTMLInputElement::isAutofilled):
        * html/HTMLIsIndexElement.cpp:
        (WebCore::HTMLIsIndexElement::HTMLIsIndexElement):
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::formControlElement):
        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::placeholderShouldBeVisible):
        (WebCore::RenderTextControlSingleLine::addSearchResult):
        (WebCore::RenderTextControlSingleLine::stopSearchEventTimer):
        (WebCore::RenderTextControlSingleLine::showPopup):
        (WebCore::RenderTextControlSingleLine::hidePopup):
        (WebCore::RenderTextControlSingleLine::subtreeHasChanged):
        (WebCore::RenderTextControlSingleLine::capsLockStateMayHaveChanged):
        (WebCore::RenderTextControlSingleLine::preferredContentWidth):
        (WebCore::RenderTextControlSingleLine::createSubtreeIfNeeded):
        (WebCore::RenderTextControlSingleLine::updateFromElement):
        (WebCore::RenderTextControlSingleLine::cacheSelection):
        (WebCore::RenderTextControlSingleLine::createInnerBlockStyle):
        (WebCore::RenderTextControlSingleLine::createResultsButtonStyle):
        (WebCore::RenderTextControlSingleLine::createCancelButtonStyle):
        (WebCore::RenderTextControlSingleLine::updateCancelButtonVisibility):
        (WebCore::RenderTextControlSingleLine::startSearchEventTimer):
        (WebCore::RenderTextControlSingleLine::searchEventTimerFired):
        (WebCore::RenderTextControlSingleLine::valueChanged):
        (WebCore::RenderTextControlSingleLine::setTextFromItem):
        (WebCore::RenderTextControlSingleLine::inputElement):
        * rendering/RenderTextControlSingleLine.h:

2009-01-20  Dirk Schulze  <krit@webkit.org>

        Reviewed by Nikolas Zimmermann.

        Make SVG pattern platform independent and remove platform code.

        Make SVGPattern platform independent
        https://bugs.webkit.org/show_bug.cgi?id=21205

        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/GraphicsContext.h:
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::applyStrokePattern):
        (WebCore::GraphicsContext::applyFillPattern):
        (WebCore::GraphicsContext::drawPath):
        (WebCore::GraphicsContext::fillPath):
        (WebCore::GraphicsContext::strokePath):
        (WebCore::GraphicsContext::fillRect):
        (WebCore::GraphicsContext::strokeRect):
        * svg/graphics/SVGPaintServerPattern.cpp:
        (WebCore::SVGPaintServerPattern::SVGPaintServerPattern):
        (WebCore::SVGPaintServerPattern::~SVGPaintServerPattern):
        (WebCore::SVGPaintServerPattern::setup):
        (WebCore::SVGPaintServerPattern::renderPath):
        (WebCore::SVGPaintServerPattern::teardown):
        * svg/graphics/SVGPaintServerPattern.h:
        * svg/graphics/cairo/SVGPaintServerPatternCairo.cpp: Removed.
        * svg/graphics/cg/SVGPaintServerPatternCg.cpp: Removed.
        * svg/graphics/qt/SVGPaintServerPatternQt.cpp: Removed.
        * svg/graphics/skia/SVGPaintServerPatternSkia.cpp: Removed.

2009-01-20  Darin Fisher  <darin@chromium.org>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=23436
        Upstream rendering/RenderThemeChromium*

        * rendering/RenderThemeChromiumGtk.cpp: Added.
        * rendering/RenderThemeChromiumGtk.h: Added.
        * rendering/RenderThemeChromiumMac.h: Added.
        * rendering/RenderThemeChromiumMac.mm: Added.
        * rendering/RenderThemeChromiumWin.cpp: Added.
        * rendering/RenderThemeChromiumWin.h: Added.

2009-01-20  Darin Adler  <darin@apple.com>

        Reviewed by Mark Rowe.

        Bug 23352: Turn on more compiler warnings in the Mac build
        https://bugs.webkit.org/show_bug.cgi?id=23352

        First patch: Fix some simple cases of various warnings.

        * platform/DeprecatedPtrListImpl.cpp:
        (WebCore::DeprecatedPtrListImpl::insert): Use const_cast to change const-ness.
        * platform/graphics/mac/SimpleFontDataMac.mm:
        (WebCore::SimpleFontData::containsCharacters): Ditto.

        * platform/text/PlatformString.h: Overload for short and unsigned short to avoid
        ambiguity leading to warnings.
        * platform/text/String.cpp:
        (WebCore::String::number): Implemented overloads.

        * platform/text/TextStream.cpp:
        (WebCore::TextStream::operator<<): Overload for bool to avoid ambiguity leading
        to warnings.
        * platform/text/TextStream.h: Ditto.

        * rendering/InlineFlowBox.h: Fix declaration that was specifying the wrong type.

        * svg/graphics/filters/cg/WKLinearTransferFilter.m: Fix stray characters after
        #endif that should be a comment instead.
        * svg/graphics/filters/cg/WKSpecularLightingFilter.h: Ditto.

        * xml/XPathPath.h: Remove unneeded redundant declaration.

2009-01-20  Nikolas Zimmermann  <nikolas.zimmermann@torchmobile.com>

        Build fix for WML enabled builds, not reviewed.

        Fix unused variable warning.

        * wml/WMLGoElement.cpp:
        (WebCore::WMLGoElement::executeTask):

2009-01-20  Nikolas Zimmermann  <nikolas.zimmermann@torchmobile.com>

        Build fix for WML enabled builds, not reviewed.

        Rename 'continuation' to 'virtualContinuation'.

        * wml/WMLAElement.cpp:
        (WebCore::WMLAElement::isKeyboardFocusable):

2009-01-20  Oliver Hunt  <oliver@apple.com>

        RS=Dan Bernstein

        Move runtime/ByteArray to wtf/ByteArray

        * ForwardingHeaders/wtf/ByteArray.h: Renamed from WebCore/ForwardingHeaders/runtime/ByteArray.h.
        * html/CanvasRenderingContext2D.cpp:
        * html/ImageData.cpp:
        (WebCore::ImageData::ImageData):
        * html/ImageData.h:
        (WebCore::ImageData::data):

2009-01-20  Darin Fisher  <darin@chromium.org>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=23391
        Upstream plugins/chromium/

        * plugins/chromium: Added.
        * plugins/chromium/PluginDataChromium.cpp: Added.

2009-01-19  Steve Falkenburg  <sfalken@apple.com>

        Fix Windows release build.
        Move SVG files into all-in-one file for Windows build.

        * WebCore.vcproj/WebCore.vcproj:
        * svg/SVGAllInOne.cpp: Added.

2009-01-19  Steve Falkenburg  <sfalken@apple.com>

        Partial build fix.
        Move new derived sources into all-in-one DerivedSources.cpp

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

2009-01-19  Sam Weinig  <sam@webkit.org>

        Fix Qt build.

        * bridge/qt/qt_instance.cpp:
        (JSC::Bindings::QtInstance::mark):
        * bridge/qt/qt_runtime.cpp:
        (JSC::Bindings::valueRealType):
        (JSC::Bindings::convertValueToQVariant):
        (JSC::Bindings::QtRuntimeConnectionMethod::call):
        (JSC::Bindings::QtConnectionObject::execute):

2009-01-19  Sam Weinig  <sam@webkit.org>

        Fix wx build.

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

2009-01-19  Sam Weinig  <sam@webkit.org>

        Rubber-stamped by Gavin Barraclough.

        Remove temporary operator-> from JSValuePtr.

        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSAudioConstructor.cpp:
        (WebCore::constructAudio):
        * bindings/js/JSCanvasRenderingContext2DCustom.cpp:
        (WebCore::toHTMLCanvasStyle):
        (WebCore::JSCanvasRenderingContext2D::setFillColor):
        (WebCore::JSCanvasRenderingContext2D::setStrokeColor):
        (WebCore::JSCanvasRenderingContext2D::strokeRect):
        (WebCore::JSCanvasRenderingContext2D::drawImage):
        (WebCore::JSCanvasRenderingContext2D::drawImageFromRect):
        (WebCore::JSCanvasRenderingContext2D::setShadow):
        (WebCore::JSCanvasRenderingContext2D::createPattern):
        (WebCore::JSCanvasRenderingContext2D::putImageData):
        (WebCore::JSCanvasRenderingContext2D::fillText):
        (WebCore::JSCanvasRenderingContext2D::strokeText):
        * bindings/js/JSClipboardCustom.cpp:
        (WebCore::JSClipboard::clearData):
        (WebCore::JSClipboard::getData):
        (WebCore::JSClipboard::setData):
        (WebCore::JSClipboard::setDragImage):
        * bindings/js/JSCustomPositionCallback.cpp:
        (WebCore::JSCustomPositionCallback::handleEvent):
        * bindings/js/JSCustomPositionErrorCallback.cpp:
        (WebCore::JSCustomPositionErrorCallback::handleEvent):
        * bindings/js/JSCustomSQLStatementCallback.cpp:
        (WebCore::JSCustomSQLStatementCallback::handleEvent):
        * bindings/js/JSCustomSQLStatementErrorCallback.cpp:
        (WebCore::JSCustomSQLStatementErrorCallback::handleEvent):
        * bindings/js/JSCustomSQLTransactionCallback.cpp:
        (WebCore::JSCustomSQLTransactionCallback::handleEvent):
        * bindings/js/JSCustomSQLTransactionErrorCallback.cpp:
        (WebCore::JSCustomSQLTransactionErrorCallback::handleEvent):
        * bindings/js/JSCustomVoidCallback.cpp:
        (WebCore::JSCustomVoidCallback::handleEvent):
        (WebCore::toVoidCallback):
        * bindings/js/JSCustomXPathNSResolver.cpp:
        (WebCore::JSCustomXPathNSResolver::create):
        (WebCore::JSCustomXPathNSResolver::lookupNamespaceURI):
        * bindings/js/JSDOMApplicationCacheCustom.cpp:
        (WebCore::JSDOMApplicationCache::hasItem):
        (WebCore::JSDOMApplicationCache::add):
        (WebCore::JSDOMApplicationCache::remove):
        (WebCore::JSDOMApplicationCache::addEventListener):
        (WebCore::JSDOMApplicationCache::removeEventListener):
        * bindings/js/JSDOMBinding.cpp:
        (WebCore::valueToStringWithNullCheck):
        (WebCore::valueToStringWithUndefinedOrNullCheck):
        (WebCore::reportException):
        * bindings/js/JSDOMGlobalObject.cpp:
        (WebCore::JSDOMGlobalObject::findJSEventListener):
        (WebCore::JSDOMGlobalObject::findOrCreateJSEventListener):
        (WebCore::JSDOMGlobalObject::findJSUnprotectedEventListener):
        (WebCore::JSDOMGlobalObject::findOrCreateJSUnprotectedEventListener):
        * bindings/js/JSDOMStringListCustom.cpp:
        (WebCore::JSDOMStringList::item):
        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::getOwnPropertySlot):
        (windowProtoFuncOpen):
        (WebCore::toJSDOMWindow):
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::setLocation):
        (WebCore::JSDOMWindow::postMessage):
        (WebCore::setTimeoutOrInterval):
        (WebCore::JSDOMWindow::clearTimeout):
        (WebCore::JSDOMWindow::clearInterval):
        (WebCore::JSDOMWindow::atob):
        (WebCore::JSDOMWindow::btoa):
        (WebCore::JSDOMWindow::addEventListener):
        (WebCore::JSDOMWindow::removeEventListener):
        (WebCore::toDOMWindow):
        * bindings/js/JSDatabaseCustom.cpp:
        (WebCore::JSDatabase::changeVersion):
        (WebCore::JSDatabase::transaction):
        * bindings/js/JSDocumentCustom.cpp:
        (WebCore::JSDocument::setLocation):
        * bindings/js/JSElementCustom.cpp:
        (WebCore::JSElement::setAttribute):
        (WebCore::JSElement::setAttributeNS):
        * bindings/js/JSEventListener.cpp:
        (WebCore::JSAbstractEventListener::handleEvent):
        (WebCore::JSLazyEventListener::parseCode):
        * bindings/js/JSEventTargetNodeCustom.cpp:
        (WebCore::JSEventTargetNode::addEventListener):
        (WebCore::JSEventTargetNode::removeEventListener):
        * bindings/js/JSGeolocationCustom.cpp:
        (WebCore::createPositionOptions):
        (WebCore::JSGeolocation::getCurrentPosition):
        (WebCore::JSGeolocation::watchPosition):
        * bindings/js/JSHTMLCollectionCustom.cpp:
        (WebCore::callHTMLCollection):
        (WebCore::JSHTMLCollection::canGetItemsForName):
        (WebCore::JSHTMLCollection::item):
        (WebCore::JSHTMLCollection::namedItem):
        * bindings/js/JSHTMLDocumentCustom.cpp:
        (WebCore::JSHTMLDocument::open):
        (WebCore::writeHelper):
        * bindings/js/JSHTMLOptionsCollectionCustom.cpp:
        (WebCore::JSHTMLOptionsCollection::setLength):
        (WebCore::JSHTMLOptionsCollection::add):
        * bindings/js/JSHTMLSelectElementCustom.cpp:
        (WebCore::JSHTMLSelectElement::remove):
        (WebCore::selectIndexSetter):
        * bindings/js/JSImageConstructor.cpp:
        (WebCore::constructImage):
        * bindings/js/JSInspectedObjectWrapper.cpp:
        (WebCore::JSInspectedObjectWrapper::wrap):
        (WebCore::JSInspectedObjectWrapper::prepareIncomingValue):
        * bindings/js/JSInspectorCallbackWrapper.cpp:
        (WebCore::JSInspectorCallbackWrapper::wrap):
        * bindings/js/JSJavaScriptCallFrameCustom.cpp:
        (WebCore::JSJavaScriptCallFrame::evaluate):
        * bindings/js/JSLocationCustom.cpp:
        (WebCore::JSLocation::setHref):
        (WebCore::JSLocation::setProtocol):
        (WebCore::JSLocation::setHost):
        (WebCore::JSLocation::setHostname):
        (WebCore::JSLocation::setPort):
        (WebCore::JSLocation::setPathname):
        (WebCore::JSLocation::setSearch):
        (WebCore::JSLocation::setHash):
        (WebCore::JSLocation::replace):
        (WebCore::JSLocation::assign):
        * bindings/js/JSMessageChannelConstructor.cpp:
        (WebCore::JSMessageChannelConstructor::mark):
        * bindings/js/JSMessagePortCustom.cpp:
        (WebCore::JSMessagePort::startConversation):
        (WebCore::JSMessagePort::addEventListener):
        (WebCore::JSMessagePort::removeEventListener):
        * bindings/js/JSNodeFilterCondition.cpp:
        (WebCore::JSNodeFilterCondition::mark):
        (WebCore::JSNodeFilterCondition::acceptNode):
        * bindings/js/JSNodeFilterCondition.h:
        * bindings/js/JSNodeFilterCustom.cpp:
        (WebCore::toNodeFilter):
        * bindings/js/JSNodeListCustom.cpp:
        (WebCore::callNodeList):
        * bindings/js/JSOptionConstructor.cpp:
        (WebCore::constructHTMLOptionElement):
        * bindings/js/JSQuarantinedObjectWrapper.cpp:
        (WebCore::JSQuarantinedObjectWrapper::asWrapper):
        (WebCore::JSQuarantinedObjectWrapper::construct):
        * bindings/js/JSSQLResultSetRowListCustom.cpp:
        (WebCore::JSSQLResultSetRowList::item):
        * bindings/js/JSSQLTransactionCustom.cpp:
        (WebCore::JSSQLTransaction::executeSql):
        * bindings/js/JSSVGElementInstanceCustom.cpp:
        (WebCore::JSSVGElementInstance::addEventListener):
        (WebCore::JSSVGElementInstance::removeEventListener):
        * bindings/js/JSSVGLengthCustom.cpp:
        (WebCore::JSSVGLength::convertToSpecifiedUnits):
        * bindings/js/JSSVGMatrixCustom.cpp:
        (WebCore::JSSVGMatrix::translate):
        (WebCore::JSSVGMatrix::scale):
        (WebCore::JSSVGMatrix::scaleNonUniform):
        (WebCore::JSSVGMatrix::rotate):
        (WebCore::JSSVGMatrix::rotateFromVector):
        (WebCore::JSSVGMatrix::skewX):
        (WebCore::JSSVGMatrix::skewY):
        * bindings/js/JSSVGPathSegListCustom.cpp:
        (WebCore::JSSVGPathSegList::getItem):
        (WebCore::JSSVGPathSegList::insertItemBefore):
        (WebCore::JSSVGPathSegList::replaceItem):
        (WebCore::JSSVGPathSegList::removeItem):
        * bindings/js/JSSVGPointListCustom.cpp:
        (WebCore::JSSVGPointList::getItem):
        (WebCore::JSSVGPointList::insertItemBefore):
        (WebCore::JSSVGPointList::replaceItem):
        (WebCore::JSSVGPointList::removeItem):
        * bindings/js/JSSVGTransformListCustom.cpp:
        (WebCore::JSSVGTransformList::getItem):
        (WebCore::JSSVGTransformList::insertItemBefore):
        (WebCore::JSSVGTransformList::replaceItem):
        (WebCore::JSSVGTransformList::removeItem):
        * bindings/js/JSStorageCustom.cpp:
        (WebCore::JSStorage::deleteProperty):
        (WebCore::JSStorage::customPut):
        * bindings/js/JSWebKitCSSMatrixConstructor.cpp:
        (WebCore::constructWebKitCSSMatrix):
        * bindings/js/JSWorkerConstructor.cpp:
        (WebCore::constructWorker):
        * bindings/js/JSWorkerContextCustom.cpp:
        (WebCore::JSWorkerContext::addEventListener):
        (WebCore::JSWorkerContext::removeEventListener):
        * bindings/js/JSWorkerCustom.cpp:
        (WebCore::JSWorker::addEventListener):
        (WebCore::JSWorker::removeEventListener):
        * bindings/js/JSXMLHttpRequestCustom.cpp:
        (WebCore::JSXMLHttpRequest::open):
        (WebCore::JSXMLHttpRequest::setRequestHeader):
        (WebCore::JSXMLHttpRequest::send):
        (WebCore::JSXMLHttpRequest::getResponseHeader):
        (WebCore::JSXMLHttpRequest::overrideMimeType):
        (WebCore::JSXMLHttpRequest::addEventListener):
        (WebCore::JSXMLHttpRequest::removeEventListener):
        * bindings/js/JSXMLHttpRequestUploadCustom.cpp:
        (WebCore::JSXMLHttpRequestUpload::addEventListener):
        (WebCore::JSXMLHttpRequestUpload::removeEventListener):
        * bindings/js/JSXSLTProcessorCustom.cpp:
        (WebCore::JSXSLTProcessor::importStylesheet):
        (WebCore::JSXSLTProcessor::transformToFragment):
        (WebCore::JSXSLTProcessor::transformToDocument):
        (WebCore::JSXSLTProcessor::setParameter):
        (WebCore::JSXSLTProcessor::getParameter):
        (WebCore::JSXSLTProcessor::removeParameter):
        * bindings/js/ScheduledAction.cpp:
        (WebCore::ScheduledAction::executeFunctionInContext):
        * bindings/js/ScriptCallStack.cpp:
        (WebCore::ScriptCallStack::initialize):
        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::createScriptObjectForPluginElement):
        * bindings/js/ScriptValue.cpp:
        (WebCore::ScriptValue::getString):
        (WebCore::ScriptValue::isNull):
        (WebCore::ScriptValue::isUndefined):
        * bindings/objc/WebScriptObject.mm:
        (-[WebScriptObject callWebScriptMethod:withArguments:]):
        (+[WebScriptObject _convertValueToObjcValue:originRootObject:rootObject:]):
        * bindings/scripts/CodeGeneratorJS.pm:
        * bridge/NP_jsobject.cpp:
        (_NPN_InvokeDefault):
        (_NPN_Invoke):
        (_NPN_HasMethod):
        (_NPN_Construct):
        * bridge/c/c_utility.cpp:
        (JSC::Bindings::convertValueToNPVariant):
        * bridge/jni/jni_instance.cpp:
        (JavaInstance::invokeMethod):
        * bridge/jni/jni_jsobject.mm:
        (JavaJSObject::call):
        (JavaJSObject::convertValueToJObject):
        * bridge/jni/jni_runtime.cpp:
        (JavaField::dispatchValueFromInstance):
        (JavaField::valueFromInstance):
        (JavaField::dispatchSetValueToInstance):
        (JavaField::setValueToInstance):
        * bridge/jni/jni_utility.cpp:
        (JSC::Bindings::convertArrayInstanceToJavaArray):
        (JSC::Bindings::convertValueToJValue):
        * bridge/objc/objc_runtime.mm:
        (JSC::Bindings::callObjCFallbackObject):
        * bridge/objc/objc_utility.mm:
        (JSC::Bindings::convertValueToObjcValue):
        * bridge/runtime_method.cpp:
        (JSC::callRuntimeMethod):
        * bridge/runtime_object.cpp:
        (JSC::RuntimeObjectImp::getOwnPropertySlot):
        (JSC::callRuntimeConstructor):

2009-01-20  Gustavo Noronha Silva  <gns@gnome.org>

         Reviewed by Mark Rowe.

         https://bugs.webkit.org/show_bug.cgi?id=23419
         removal of FramePrivate.h breaks GTK+'s make dist

         * GNUmakefile.am: No longer mention FramePrivate.h in our build,
         since it was removed.

2009-01-20  Alexander V. Butenko  <alex@digiqube.com>

        Reviewed by Holger Freyther.

        http://bugs.webkit.org/show_bug.cgi?id=23116
        [GTK] Fix crash due a callback called from GIO after the
        destruction of the ResourceHandle

        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::ResourceHandle::cancel): Only call didFinishLoading if
        'client' is set, otherwise cancelling a load could lead to a crash.

2009-01-19  Simon Fraser  <simon.fraser@apple.com>

        Build fix: remove duplicate entries in the Xcode project, and
        sort the project with sort-Xcode-project-file .

        * WebCore.xcodeproj/project.pbxproj:

2009-01-19  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dave Hyatt

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

        Support animations and transitions of shorthand properties by creating
        PropertyWrappers that simply wrap a vector of atomic wrappers, and implement
        equal() and blend(). Build that collection of shorthand wrappers using the
        shorthand map that CSSMutableStyleDeclaration already has. Skip comparing these
        shorthand wrappers during 'all' transitions.

        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.scons:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        Add CSSPropertyLonghand.h/cpp.

        * css/CSSMutableStyleDeclaration.cpp:
        (WebCore::CSSMutableStyleDeclaration::removeShorthandProperty):
        Move CSSPropertyLonghand to its own file.

        * css/CSSPropertyLonghand.cpp: Added.
        (WebCore::initShorthandMap):
        (WebCore::longhandForProperty):
        * css/CSSPropertyLonghand.h: Added.
        (WebCore::CSSPropertyLonghand::CSSPropertyLonghand):
        (WebCore::CSSPropertyLonghand::properties):
        (WebCore::CSSPropertyLonghand::length):
        Code moved from CSSMutableStyleDeclaration.h/cpp

        * page/animation/AnimationBase.cpp:
        (WebCore::PropertyWrapperBase::isShorthandWrapper):
        (WebCore::ShorthandPropertyWrapper::ShorthandPropertyWrapper):
        (WebCore::ShorthandPropertyWrapper::isShorthandWrapper):
        (WebCore::ShorthandPropertyWrapper::equals):
        (WebCore::ShorthandPropertyWrapper::blend):
        Add a wrapper class for shorthand properties that simply wraps an
        array of atomic property wrappers.

        (WebCore::ensurePropertyMap):
        (WebCore::addPropertyWrapper):
        (WebCore::addShorthandProperties):
        (WebCore::wrapperForProperty):
        (WebCore::AnimationBase::propertiesEqual):
        (WebCore::AnimationBase::getPropertyAtIndex):
        Some minor refactoring to re-use wrapperForProperty(), and ensure that gPropertyWrapperMap
        is filled with an invalid index (-1), not 0.

        (WebCore::AnimationBase::blendProperties):
        * page/animation/AnimationBase.h:
        * page/animation/CompositeAnimation.cpp:
        (WebCore::CompositeAnimationPrivate::updateTransitions):
        When doing 'all' transitions, skip shorthand wrappers, since 'all' transitions
        just need to compare all the atomic property wrappers.

2009-01-19  Oliver Hunt  <oliver@apple.com>

        Reviewed by NOBODY (Build fix).

        Actually add the new header.

        * dom/GenericWorkerTask.h: Added.

2009-01-19  David Levin  <levin@chromium.org>

        Reviewed by Alexey Proskuryakov.

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

        Provide a generic class to handle the pattern of task callbacks across worker/parent threads.  It
        only works for methods that need 6 parameters but similar classes could be added as needed for
        other numbers of parameters.

        Add addMessage and resourceRetrievedByXMLHttpRequest to ScriptExecutionContext.

        Use these methods and others to remove document() from XMLHttpRequest in a few more places.

        No observable change in behavior, so no test.

        * GNUmakefile.am:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        Sorted project file while adding GenericWorkerTask.h

        * bindings/js/ScriptString.h:
        (WebCore::ScriptString::operator=):
        (WebCore::ScriptString::operator+=):
        (WebCore::ScriptString::operator==):
        (WebCore::ScriptString::operator!=):
        Removed unnecessary JSLock.

        * dom/Document.cpp:
        (WebCore::Document::addMessage):
        (WebCore::Document::resourceRetrievedByXMLHttpRequest):
        * dom/Document.h:
        * dom/GenericWorkerTask.h: Added.
        (WebCore::GenericWorkerTaskBase::GenericWorkerTaskBase):
        (WebCore::GenericWorkerTaskBase::canPerformTask):
        (WebCore::GenericWorkerTask6::create):
        (WebCore::GenericWorkerTask6::GenericWorkerTask6):
        (WebCore::GenericWorkerTask6::performTask):
        (WebCore::createCallbackTask):
        * dom/ScriptExecutionContext.h:
        * dom/WorkerContext.cpp:
        (WebCore::addMessageTask):
        (WebCore::WorkerContext::addMessage):
        (WebCore::WorkerContext::resourceRetrievedByXMLHttpRequest):
        (WebCore::WorkerContext::postTaskToParentContext):
        * dom/WorkerContext.h:
        * dom/WorkerMessagingProxy.cpp:
        (WebCore::WorkerMessagingProxy::postTaskToParentContext):
        * dom/WorkerMessagingProxy.h:
        * dom/WorkerThread.h:
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::XMLHttpRequest):
        (WebCore::XMLHttpRequest::dropProtection):
        (WebCore::reportUnsafeUsage):
        (WebCore::XMLHttpRequest::setRequestHeader):
        (WebCore::XMLHttpRequest::getResponseHeader):
        (WebCore::XMLHttpRequest::didFinishLoading):
        * xml/XMLHttpRequest.h:
        (WebCore::XMLHttpRequest::create):


2009-01-19  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Beth Dakin.

        Bug 23422: AX: AXLinks should expose access key information
        https://bugs.webkit.org/show_bug.cgi?id=23422

        Test: accessibility/accesskey.html

        * page/mac/AccessibilityObjectWrapper.mm:
        (-[AccessibilityObjectWrapper accessibilityAttributeNames]):
        (-[AccessibilityObjectWrapper accessibilityAttributeValue:]):

2009-01-19  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Anders Carlsson.

        https://bugs.webkit.org/show_bug.cgi?id=23417
        Implement application cache obsolete state

        Test: http/tests/appcache/remove-cache.html

        * bindings/js/JSDOMApplicationCacheCustom.cpp:
        (WebCore::JSDOMApplicationCache::mark):
        * dom/EventNames.h:
        * loader/appcache/DOMApplicationCache.h:
        (WebCore::DOMApplicationCache::Status):
        (WebCore::DOMApplicationCache::setOnobsolete):
        (WebCore::DOMApplicationCache::onobsolete):
        * loader/appcache/DOMApplicationCache.idl:
        Added "obsolete" event and status.

        * loader/appcache/ApplicationCacheGroup.h:
        (WebCore::ApplicationCacheGroup::savedNewestCachePointer): Removed, there is no longer
        any need to track what the newest cache was during teardown.
        (WebCore::ApplicationCacheGroup::updateStatus): Renamed Status to UpdateStatus, reducing
        confusion with cache group lifecycle status.
        (WebCore::ApplicationCacheGroup::m_isObsolete): Added an obsolete state flag.

        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::ApplicationCacheGroup::ApplicationCacheGroup): Initialize m_isObsolete.
        (WebCore::ApplicationCacheGroup::cacheForMainRequest): Assert that the returned cache does
        not belong to an obsolete group.
        (WebCore::ApplicationCacheGroup::fallbackCacheForMainRequest): Ditto.
        (WebCore::ApplicationCacheGroup::disassociateDocumentLoader): Disassociation can now happen
        via a JS swapCache() call, not only when the loader is destroyed.
        (WebCore::ApplicationCacheGroup::cacheDestroyed): Don't track m_savedNewestCachePointer.
        (WebCore::ApplicationCacheGroup::setNewestCache): Remove old newest cache from storage is
        a caller responsibility, because this method is also used when loading caches from disk.
        (WebCore::ApplicationCacheGroup::makeObsolete): Added. Mark the cache group as obsolete, and
        inform cache storage, so that it could be removed.
        (WebCore::ApplicationCacheGroup::didFailToLoadManifest): Removed, as all this method did
        was call cacheUpdateFailed().
        (WebCore::ApplicationCacheGroup::didReceiveResponse): Added a FIXME about correct failure
        handing.
        (WebCore::ApplicationCacheGroup::didFail): Ditto.
        (WebCore::ApplicationCacheGroup::didReceiveManifestResponse): Call a new manifestNotFound()
        method for 404 and 410 responses.
        (WebCore::ApplicationCacheGroup::didFinishLoadingManifest): Call cacheUpdateFailed()
        directly, instead of the removed didFailToLoadManifest().
        (WebCore::ApplicationCacheGroup::manifestNotFound): Implement "remove a cache" algorithm.
        (WebCore::ApplicationCacheGroup::checkIfLoadIsComplete): Remove superceded cache from storage
        after update successfully finishes (moved from setNewestCache()).
        (WebCore::ApplicationCacheGroup::associateDocumentLoaderWithCache): Revive the group using
        an explicitly passed pointer, without the need to save it during teardown.

        * loader/DocumentLoader.cpp: (WebCore::DocumentLoader::~DocumentLoader):
        Call the general ApplicationCacheGroup::disassociateDocumentLoader() method.

        * loader/appcache/ApplicationCacheStorage.h: Added a cacheGroupMadeObsolete() method, updated
        some comments.

        * loader/appcache/ApplicationCacheStorage.cpp:
        (WebCore::ApplicationCacheStorage::cacheGroupForURL): Assert that iterated caches are not
        obsolete.
        (WebCore::ApplicationCacheStorage::fallbackCacheGroupForURL): Ditto.
        (WebCore::ApplicationCacheStorage::cacheGroupDestroyed): Don't do anything for obsolete
        groups, as they cannot be in storage.
        (WebCore::ApplicationCacheStorage::cacheGroupMadeObsolete): Remove the cache group from storage
        completely, so that a new one could replace it, if necessary.
        (WebCore::ApplicationCacheStorage::storeNewestCache): Added assertions.
        (WebCore::ApplicationCacheStorage::remove): Remove cache group if its newest cache is removed.

        * loader/appcache/DOMApplicationCache.cpp:
        (WebCore::DOMApplicationCache::status): Added support for OBSOLETE state.
        (WebCore::DOMApplicationCache::swapCache): Disassociate document loader from cache if the
        application was removed server-side.
        (WebCore::DOMApplicationCache::callObsoleteListener): Added support for obsolete event.

        * loader/appcache/DOMApplicationCache.h:
        (WebCore::DOMApplicationCache::Status):
        (WebCore::DOMApplicationCache::setOnobsolete):
        (WebCore::DOMApplicationCache::onobsolete):
        Added support for OBSOLETE state and obsolete event.

        * loader/appcache/DOMApplicationCache.idl: Ditto.

2009-01-19  Anders Carlsson  <andersca@apple.com>

        Reviewed by Kevin Decker.

        Allow plug-in views to return an instance directly.

        * bindings/js/ScriptControllerMac.mm:
        (WebCore::ScriptController::createScriptInstanceForWidget):

2009-01-19  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by David Hyatt.

        AX: some buttons don't expose AXPress as an action
        https://bugs.webkit.org/show_bug.cgi?id=23399

        Test: accessibility/button-press-action.html

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

2009-01-19  Adam Roben  <aroben@apple.com>

        Windows build fix

        * WebCore.vcproj/WebCore.vcproj: Copy headers from page/animation into
        $WebKitOutputDir so that WebKit can access them.

        * html/HTMLBaseFontElement.cpp: Touched this file to cause a rebuild
        and header copy.

2009-01-19  Ariya Hidayat  <ariya.hidayat@trolltech.com>

        Reviewed by Simon Hausmann.

        http://qt.nokia.com/developer/task-tracker/index_html?id=211228&method=entry

        [Qt] Show focus rect when a button gets the focus for the first time.
        This is important at least for Windows style.

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

2009-01-19  Ariya Hidayat  <ariya.hidayat@trolltech.com>

        [Qt] Build fix after r39971.

        * platform/qt/LoggingQt.cpp:
        (WebCore::InitializeLoggingChannelsIfNecessary):

2009-01-18  Sam Weinig  <sam@webkit.org>

        Reviewed by Cameron Zwarich.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=23415
        Remove FramePrivate

        Minor PLT speedup.

        * WebCore.base.exp:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * loader/FrameLoader.cpp:
        * page/Frame.cpp:
        (WebCore::Frame::Frame):
        (WebCore::Frame::~Frame):
        (WebCore::Frame::init):
        (WebCore::Frame::loader):
        (WebCore::Frame::view):
        (WebCore::Frame::setView):
        (WebCore::Frame::script):
        (WebCore::Frame::document):
        (WebCore::Frame::setDocument):
        (WebCore::Frame::settings):
        (WebCore::Frame::selection):
        (WebCore::Frame::editor):
        (WebCore::Frame::selectionGranularity):
        (WebCore::Frame::setSelectionGranularity):
        (WebCore::Frame::dragCaretController):
        (WebCore::Frame::animation):
        (WebCore::Frame::mark):
        (WebCore::Frame::setMark):
        (WebCore::Frame::setCaretVisible):
        (WebCore::Frame::clearCaretRectIfNeeded):
        (WebCore::Frame::selectionLayoutChanged):
        (WebCore::Frame::caretBlinkTimerFired):
        (WebCore::Frame::paintCaret):
        (WebCore::Frame::paintDragCaret):
        (WebCore::Frame::zoomFactor):
        (WebCore::Frame::isZoomFactorTextOnly):
        (WebCore::Frame::shouldApplyTextZoom):
        (WebCore::Frame::shouldApplyPageZoom):
        (WebCore::Frame::setZoomFactor):
        (WebCore::Frame::setPrinting):
        (WebCore::Frame::setJSStatusBarText):
        (WebCore::Frame::setJSDefaultStatusBarText):
        (WebCore::Frame::jsStatusBarText):
        (WebCore::Frame::jsDefaultStatusBarText):
        (WebCore::Frame::setNeedsReapplyStyles):
        (WebCore::Frame::needsReapplyStyles):
        (WebCore::Frame::reapplyStyles):
        (WebCore::Frame::isContentEditable):
        (WebCore::Frame::updateSecureKeyboardEntryIfActive):
        (WebCore::Frame::typingStyle):
        (WebCore::Frame::setTypingStyle):
        (WebCore::Frame::clearTypingStyle):
        (WebCore::Frame::computeAndSetTypingStyle):
        (WebCore::Frame::selectionComputedStyle):
        (WebCore::Frame::applyEditingStyleToBodyElement):
        (WebCore::Frame::removeEditingStyleFromBodyElement):
        (WebCore::Frame::keepAlive):
        (WebCore::Frame::cancelAllKeepAlive):
        (WebCore::Frame::clearDOMWindow):
        (WebCore::Frame::ownerElement):
        (WebCore::Frame::ownerRenderer):
        (WebCore::Frame::isDisconnected):
        (WebCore::Frame::setIsDisconnected):
        (WebCore::Frame::excludeFromTextSearch):
        (WebCore::Frame::setExcludeFromTextSearch):
        (WebCore::Frame::selectionBounds):
        (WebCore::Frame::selectionTextRects):
        (WebCore::Frame::isFrameSet):
        (WebCore::Frame::currentForm):
        (WebCore::Frame::forceLayout):
        (WebCore::Frame::sendScrollEvent):
        (WebCore::Frame::clearTimers):
        (WebCore::Frame::styleForSelectionStart):
        (WebCore::Frame::inViewSourceMode):
        (WebCore::Frame::setInViewSourceMode):
        (WebCore::Frame::markAllMatchesForText):
        (WebCore::Frame::markedTextMatchesAreHighlighted):
        (WebCore::Frame::setMarkedTextMatchesAreHighlighted):
        (WebCore::Frame::tree):
        (WebCore::Frame::setDOMWindow):
        (WebCore::Frame::domWindow):
        (WebCore::Frame::clearFormerDOMWindow):
        (WebCore::Frame::page):
        (WebCore::Frame::eventHandler):
        (WebCore::Frame::pageDestroyed):
        (WebCore::Frame::disconnectOwnerElement):
        (WebCore::Frame::documentAtPoint):
        * page/Frame.h:
        * page/FramePrivate.h: Removed.
        * page/FrameTree.h:
        * page/chromium/FrameChromium.cpp:
        * page/mac/FrameMac.mm:
        (WebCore::Frame::imageFromRect):
        (WebCore::Frame::selectionImage):
        (WebCore::Frame::snapshotDragImage):
        (WebCore::Frame::nodeImage):
        (WebCore::Frame::setUserStyleSheetLocation):
        (WebCore::Frame::setUserStyleSheet):
        * page/qt/FrameQt.cpp:
        (WebCore::Frame::setUserStyleSheetLocation):
        (WebCore::Frame::setUserStyleSheet):
        * page/win/FrameCGWin.cpp:
        (WebCore::Frame::nodeImage):
        * page/win/FrameWin.cpp:

2009-01-18  Eric Carlson  <eric.carlson@apple.com>

        Build fix for !ENABLE(VIDEO) following r40016.

        * rendering/RenderSlider.cpp:
        (WebCore::RenderSlider::mouseEventIsInThumb):

2009-01-17  Steve Falkenburg  <sfalken@apple.com>

        Build fix.

2009-01-17  David Hyatt  <hyatt@apple.com>

        Optimize isTextNode() the same way isElementNode() was optimized in an earlier checkin.  isTextNode()
        on Node is now non-virtual and just checks a bit that is set at construction time by Text.

        Reviewed by Sam Weinig

        * dom/CharacterData.cpp:
        (WebCore::CharacterData::CharacterData):
        * dom/CharacterData.h:
        * dom/EventTargetNode.cpp:
        (WebCore::EventTargetNode::EventTargetNode):
        * dom/EventTargetNode.h:
        * dom/Node.cpp:
        (WebCore::Node::Node):
        * dom/Node.h:
        (WebCore::Node::isTextNode):
        (WebCore::Node::isAttributeNode):
        * dom/Text.cpp:
        (WebCore::Text::Text):
        * dom/Text.h:

2009-01-17  David Hyatt  <hyatt@apple.com>

        Change how backslashAsCurrencySymbol() works.  Instead of forcing call sites to do the direct
        replacement themselves, the exact transformation is instead done by the encoding (indirectly through
        a method on Document).

        These changes allow the fast case (where no replacement is needed) checks to be completely inlined for
        a slight speedup, and also allow encodings to do future alterations to displayed string content without
        having to patch call sites again.

        Reviewed by Oliver Hunt

        * WebCore.base.exp:
        * dom/Document.cpp:
        * dom/Document.h:
        (WebCore::Document::displayStringModifiedByEncoding):
        (WebCore::Document::displayBufferModifiedByEncoding):
        * editing/Editor.cpp:
        (WebCore::Editor::addToKillRing):
        * editing/TextIterator.cpp:
        (WebCore::plainTextToMallocAllocatedBuffer):
        (WebCore::plainText):
        * editing/TextIterator.h:
        * html/HTMLOptGroupElement.cpp:
        (WebCore::HTMLOptGroupElement::groupLabelText):
        * html/HTMLOptionElement.cpp:
        (WebCore::HTMLOptionElement::text):
        * loader/DocumentLoader.cpp:
        (WebCore::canonicalizedTitle):
        * page/Chrome.cpp:
        (WebCore::displayString):
        (WebCore::Chrome::runJavaScriptAlert):
        (WebCore::Chrome::runJavaScriptConfirm):
        (WebCore::Chrome::runJavaScriptPrompt):
        (WebCore::Chrome::setStatusbarText):
        * page/Frame.cpp:
        (WebCore::Frame::shouldClose):
        * page/Frame.h:
        * platform/mac/PasteboardMac.mm:
        (WebCore::Pasteboard::writeSelection):
        * platform/text/TextCodecICU.cpp:
        (WebCore::TextCodecICU::encode):
        * platform/text/TextEncoding.cpp:
        (WebCore::TextEncoding::TextEncoding):
        * platform/text/TextEncoding.h:
        (WebCore::TextEncoding::displayString):
        (WebCore::TextEncoding::displayBuffer):
        * rendering/HitTestResult.cpp:
        (WebCore::displayString):
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::paintReplaced):
        * rendering/RenderObject.cpp:
        * rendering/RenderObject.h:
        * rendering/RenderText.cpp:
        (WebCore::RenderText::RenderText):
        (WebCore::RenderText::setTextInternal):
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::setInnerTextValue):
        (WebCore::RenderTextControl::finishText):

2009-01-17  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Adele Peterson

        Complete <rdar://problem/6293969>

        * DerivedSources.make: include mediaControlsQT.css for Mac build.

        * WebCore.xcodeproj/project.pbxproj: add mediaControlsQT.css

        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue): add MediaTimelineContainerPart,
        CSSValueMediaCurrentTimeDisplay, and CSSValueMediaTimeRemainingDisplay

        * css/CSSSelector.cpp:
        (WebCore::CSSSelector::extractPseudoType): include new media controller element styles
        * css/CSSSelector.h:
        (WebCore::CSSSelector::): Ditto.

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::SelectorChecker::checkOneSelector):  include new media
        controller element styles

        * css/CSSValueKeywords.in: add keywords for new media time display controls

        * css/mediaControls.css: adjust css for new control elements

        * css/mediaControlsQT.css: Added.

        * platform/ThemeTypes.h:
        (WebCore::): add media time display controls to ControlPart

        * platform/mac/WebCoreSystemInterface.h:
        * platform/mac/WebCoreSystemInterface.mm: pass controller style to WKSI functions

        * rendering/MediaControlElements.cpp:
        (WebCore::MediaTextDisplayElement::MediaTextDisplayElement): Added
        (WebCore::MediaTextDisplayElement::attachToParent): Added
        (WebCore::MediaTextDisplayElement::update): Added
        (WebCore::MediaTimeDisplayElement::MediaTimeDisplayElement): Added
        (WebCore::MediaControlInputElement::MediaControlInputElement): Added
        (WebCore::MediaControlInputElement::hitTest): Added
        (WebCore::MediaControlTimelineElement::defaultEventHandler): Update the time display when
        dragging the thumb
        * rendering/MediaControlElements.h:
        (WebCore::): Add MediaTextDisplayElement

        * rendering/RenderMedia.cpp:
        (WebCore::RenderMedia::createTimelineContainer): Added
        (WebCore::RenderMedia::createTimeline): Parent is now the timeline container
        (WebCore::RenderMedia::createCurrentTimeDisplay): Added
        (WebCore::RenderMedia::createTimeRemainingDisplay): Added
        (WebCore::RenderMedia::updateControls): Create new elements. Don't ever start the time update
        timer when the time display elements are not visible
        (WebCore::RenderMedia::formatTime): Handle negative times. Don't display 0 hours or minutes
        (WebCore::RenderMedia::updateTimeDisplay): Do nothing when the time display elements are not
        visible. Display time remaining as well as current time.
        (WebCore::RenderMedia::updateControlVisibility): Don't assume opacity should be set to 0 when
        visibility changes
        (WebCore::RenderMedia::forwardEvent): Call element hitTest() method instead of local function
        as we can't assume that all controls are rectangular
        * rendering/RenderMedia.h: Updated

        * rendering/RenderSlider.cpp:
        (WebCore::RenderSlider::mouseEventIsInThumb): When slider is media timeline control, call
        element hitTest() method instead of assuming it is rectangular
        * rendering/RenderSlider.h: make mouseEventIsInThumb virtual

        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::paint): Deal with time display and timeline container
        * rendering/RenderTheme.h:
        (WebCore::RenderTheme::paintMediaTimelineContainer): Updated
        (WebCore::RenderTheme::paintMediaCurrentTime): Added
        (WebCore::RenderTheme::paintMediaTimeRemaining): Added

        * rendering/RenderThemeMac.h: Updated
        * rendering/RenderThemeMac.mm:
        (WebCore::):
        (WebCore::mediaControllerTheme):
        (WebCore::RenderThemeMac::adjustSliderThumbSize): Call WebKitSystemInterface to get the thumb
        size when appropriate
        (WebCore::RenderThemeMac::paintMediaFullscreenButton): pass controller style to render function
        (WebCore::RenderThemeMac::paintMediaMuteButton): Ditto
        (WebCore::RenderThemeMac::paintMediaPlayButton): Ditto
        (WebCore::RenderThemeMac::paintMediaSeekBackButton): Ditto
        (WebCore::RenderThemeMac::paintMediaSeekForwardButton): Ditto
        (WebCore::RenderThemeMac::paintMediaSliderTrack): Ditto
        (WebCore::RenderThemeMac::paintMediaSliderThumb): Ditto
        (WebCore::RenderThemeMac::paintMediaTimelineContainer): Added
        (WebCore::RenderThemeMac::paintMediaCurrentTime): Added
        (WebCore::RenderThemeMac::paintMediaTimeRemaining): Added
        (WebCore::RenderThemeMac::extraMediaControlsStyleSheet): Added
        (WebCore::RenderThemeMac::hitTestMediaControlPart): Added
        * rendering/style/RenderStyle.h: Updated
        (WebCore::):

2009-01-17  David Hyatt  <hyatt@apple.com>

        Inline a few methods in FrameView for speed.

        Reviewed by Oliver Hunt

        * page/FrameView.cpp:
        * page/FrameView.h:
        (WebCore::FrameView::layoutCount):
        (WebCore::FrameView::needsFullRepaint):

2009-01-17  David Hyatt  <hyatt@apple.com>

        Inline Document::documentElement(), since it is used by the (very hot) RenderObject::isRoot().  Split off
        the code that fetches and caches the document element into a separate function and inline the part that
        does the null check and the return of the already-cached element.

        Reviewed by Oliver Hunt

        * dom/Document.cpp:
        (WebCore::Document::cacheDocumentElement):
        * dom/Document.h:
        (WebCore::Document::documentElement):

2009-01-17  David Hyatt  <hyatt@apple.com>

        Minor tweaks to RenderBox::styleChange to speed it up.

        Reviewed by Oliver Hunt

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::styleDidChange):

2009-01-17  David Hyatt  <hyatt@apple.com>

        Inline FrameLoader::client().

        Reviewed by Oliver Hunt

        * WebCore.base.exp:
        * loader/FrameLoader.cpp:
        * loader/FrameLoader.h:
        (WebCore::FrameLoader::client):

2009-01-17  David Hyatt  <hyatt@apple.com>

        Inline some Image methods for speed.  Fix CachedImage's addClient method to just use isNull rather
        than needlessly creating a rect.

        Reviewed by Oliver Hunt

        * loader/CachedImage.cpp:
        (WebCore::CachedImage::addClient):
        * platform/graphics/Image.cpp:
        * platform/graphics/Image.h:
        (WebCore::Image::isNull):
        (WebCore::Image::rect):
        (WebCore::Image::width):
        (WebCore::Image::height):

2009-01-17  David Hyatt  <hyatt@apple.com>

        Avoid using the non-inlined isVariable() when adding parsed values during CSS parsing.

        Reviewed by Oliver Hunt

        * css/CSSParserValues.cpp:
        (WebCore::CSSParserValueList::addValue):

2009-01-17  David Hyatt  <hyatt@apple.com>

        Inline Document::inPageCache(), since - because of animation code - it is now called every time
        styles change on any element and so is now super-hot.

        Reviewed by Oliver Hunt

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

2009-01-16  David Hyatt  <hyatt@apple.com>

        Take Font out of the GraphicsContext.  Fonts are moderately expensive to both compare and to assign to.
        The Font's presence in the GraphicsContext was making save/restore more expensive than it needed to be,
        and was also causing expensive comparison checks to be made before doing alterations of the Font in the
        GraphicsContext.

        A font must now be passed as a parameter to all text drawing functions.

        Reviewed by Oliver Hunt

        * html/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::setFont):
        (WebCore::CanvasRenderingContext2D::drawTextInternal):
        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::drawText):
        (WebCore::GraphicsContext::drawBidiText):
        (WebCore::GraphicsContext::drawHighlightForText):
        * platform/graphics/GraphicsContext.h:
        * platform/graphics/GraphicsContextPrivate.h:
        * platform/graphics/qt/GraphicsContextQt.cpp:
        * rendering/EllipsisBox.cpp:
        (WebCore::EllipsisBox::paint):
        * rendering/InlineTextBox.cpp:
        (WebCore::paintTextWithShadows):
        (WebCore::InlineTextBox::paint):
        (WebCore::InlineTextBox::paintSelection):
        (WebCore::InlineTextBox::paintCompositionBackground):
        (WebCore::InlineTextBox::paintSpellingOrGrammarMarker):
        (WebCore::InlineTextBox::paintTextMatchMarker):
        (WebCore::InlineTextBox::paintDocumentMarkers):
        * rendering/InlineTextBox.h:
        * rendering/RenderFileUploadControl.cpp:
        (WebCore::RenderFileUploadControl::paintObject):
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::paintReplaced):
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::paintItemForeground):
        * rendering/RenderListMarker.cpp:
        (WebCore::RenderListMarker::paint):
        * rendering/SVGInlineTextBox.cpp:
        (WebCore::SVGInlineTextBox::paintCharacters):
        (WebCore::SVGInlineTextBox::paintSelection):
        * rendering/SVGInlineTextBox.h:
        * svg/SVGFont.cpp:
        (WebCore::Font::drawTextUsingSVGFont):

2009-01-16  David Hyatt  <hyatt@apple.com>

        Fix a regression from the virtualContinuation()/continuation() split where I accidentally changed
        two if statements.

        Reviewed by Oliver Hunt

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::absoluteRects):
        (WebCore::RenderObject::absoluteQuads):

2009-01-16  David Hyatt  <hyatt@apple.com>

        Fix a regression from my before/after optimization.  Make sure the <q> element puts the document
        into a mode where it will respect before/after rules, since <q> implicitly uses such rules.

        Make sure view source mode documents also turn on before/after rules, since they are used there also.

        Reviewed by Oliver Hunt

        * html/HTMLElementFactory.cpp:
        (WebCore::quoteConstructor):
        * html/HTMLViewSourceDocument.cpp:
        (WebCore::HTMLViewSourceDocument::HTMLViewSourceDocument):

2009-01-16  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Oliver Hunt.

        Bug 23397: AXURL is not reported for <INPUT type="image"> elements
        https://bugs.webkit.org/show_bug.cgi?id=23397

        Report an AXURL for inputs that have an image type.

        Test: accessibility/input-image-url.html

        * page/AccessibilityObject.h:
        (WebCore::AccessibilityObject::isInputImage):
        * page/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::isInputImage):
        (WebCore::AccessibilityRenderObject::url):
        * page/AccessibilityRenderObject.h:
        * page/mac/AccessibilityObjectWrapper.mm:
        (-[AccessibilityObjectWrapper accessibilityAttributeNames]):

2009-01-16  Adele Peterson  <adele@apple.com>

        Windows build fix.

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

2009-01-16  Steve Falkenburg  <sfalken@apple.com>

        <rdar://problem/6502511> Safari crashes if it's running while the desktop theme is changed.

        This was caused by mismatched ENABLE definitions across WebCore and WebKit.

        Several virtual methods were added to RenderTheme.h, conditionalized by ENABLE(VIDEO).
        In addition to adding ENABLE_VIDEO to WebKit, this change also adds ENABLE_DATABASE and ENABLE_ICONDATABASE
        to Windows WebCore/WebKit, and adds ENABLE_WORKERS, and several ENABLE_SVG_ flags to WebKit on Windows.
        Our Windows ENABLE flags now match Mac.

        Reviewed by Adele Peterson.

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

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

        40,000!

        * ChangeLog: Point out revision 40,000.

2009-01-16  Eric Seidel  <eric@webkit.org>

        Reviewed by Justin Garcia.

        Make surroundNodeRangeWithElement call insertNodeBefore implicitly
        Make insertNodeBefore take PassRefPtr
        Clean up the use of PassRefPtr vs. raw pointers a few places in the editing code.
        https://bugs.webkit.org/show_bug.cgi?id=23389

        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::applyRelativeFontStyleChange):
        (WebCore::ApplyStyleCommand::applyTextDecorationStyle):
        (WebCore::ApplyStyleCommand::surroundNodeRangeWithElement):
        (WebCore::ApplyStyleCommand::addInlineStyleIfNeeded):
        * editing/ApplyStyleCommand.h:
        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::insertNodeAt):
        * editing/IndentOutdentCommand.cpp:
        (WebCore::IndentOutdentCommand::prepareBlockquoteLevelForInsertion):
        * editing/InsertLineBreakCommand.cpp:
        (WebCore::InsertLineBreakCommand::doApply):
        * editing/InsertParagraphSeparatorCommand.cpp:
        (WebCore::InsertParagraphSeparatorCommand::doApply):
        * editing/InsertTextCommand.cpp:
        (WebCore::InsertTextCommand::insertTab):
        * editing/ModifySelectionListLevel.cpp:
        (WebCore::IncreaseSelectionListLevelCommand::doApply):
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplacementFragment::removeNodePreservingChildren):
        (WebCore::ReplacementFragment::insertNodeBefore):
        (WebCore::ReplacementFragment::removeInterchangeNodes):
        (WebCore::ReplaceSelectionCommand::doApply):
        (WebCore::ReplaceSelectionCommand::insertNodeAfterAndUpdateNodesInserted):
        (WebCore::ReplaceSelectionCommand::insertNodeAtAndUpdateNodesInserted):
        (WebCore::ReplaceSelectionCommand::insertNodeBeforeAndUpdateNodesInserted):
        * editing/ReplaceSelectionCommand.h:

2009-01-16  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Oliver Hunt.

        Bug 23393: TextField has AXTitle and AXTitleUIElement
        https://bugs.webkit.org/show_bug.cgi?id=23393

        Test: accessibility/double-title.html

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

2009-01-16  Adam Treat  <adam.treat@torchmobile.com>

        The correct build fix for all platforms.

        * platform/graphics/Font.h:

2009-01-16  Adam Treat  <adam.treat@torchmobile.com>

        Fix the Qt build.

        * platform/graphics/Font.h:

2009-01-16  David Hyatt  <hyatt@apple.com>

        Add a new flag (similar to first-line and first-letter) to Document to track whether any before/after rules
        are being used.  If not, don't waste time probing for those pseudo element styles.

        Reviewed by Sam Weinig

        * css/CSSGrammar.y:
        * dom/Document.cpp:
        (WebCore::Document::Document):
        * dom/Document.h:
        (WebCore::Document::usesBeforeAfterRules):
        (WebCore::Document::setUsesBeforeAfterRules):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::styleDidChange):
        * rendering/RenderContainer.cpp:
        (WebCore::RenderContainer::updateBeforeAfterContentForContainer):
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::styleDidChange):
        (WebCore::RenderInline::addChildToFlow):
        (WebCore::RenderInline::splitInlines):

2009-01-16  Dmitry Titov  <dimich@chromium.org>

        Reviewed by Alp Toker.

        https://bugs.webkit.org/show_bug.cgi?id=23394
        Remove unnecessary calls to setDeferringTimers().

        Use of this function was obsoleted by better handling of EINTR.

        * platform/network/curl/ResourceHandleManager.cpp:
        (WebCore::ResourceHandleManager::downloadTimerCallback): removed setDeferringTimers calls.

2009-01-16  David Hyatt  <hyatt@apple.com>

        Fix badness with the cursor CSS property.  For all links and form controls, resetting to a value of auto
        was resulting in the creation of a cursor list.  clearCursorList was creating a new list rather than just
        nulling out the pointer.  Since addCursor already lazily recreates the list, in the case of simple cursor types,
        the clear method was wastefully creating a completely unnecessary list for all of these elements.

        Also optimized the setting of simple cursor values to not alter the RenderStyle's cursor setting if it is already
        set to the same value.  Since this is the common case, it prevents a fault and copy of StyleInheritedData for
        all links and form controls.

        This is a PLT speedup.

        Reviewed by Oliver Hunt

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::clearCursorList):

2009-01-16  Darin Fisher  <darin@chromium.org>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=23384
        PLATFORM(CHROMIUM) needs to delegate BackForwardList.cpp methods to the embedder

        * history/BackForwardList.h:
        (WebCore::BackForwardListClient::~BackForwardListClient):
        (WebCore::BackForwardList::setClient):
        * history/BackForwardListChromium.cpp: Added.

2009-01-16  Dan Bernstein  <mitz@apple.com>

        Reviewed by Kevin Decker and Adam Roben.

        - fix a regression that resulted in a crash when plug-ins were
          disabled.

        * rendering/RenderPartObject.cpp:
        (WebCore::RenderPartObject::updateWidget): Added a null check.

2009-01-16  David Hyatt  <hyatt@apple.com>

        Split continuation() into virtual and non-virtual versions so that the non-virtual version can
        be used whereever possible.  Eventually the virtual method can be eliminated completely.

        Reviewed by Sam Weinig and Oliver Hunt

        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::isKeyboardFocusable):
        * page/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::anchorElement):
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::determineSpacingForFlowBoxes):
        (WebCore::InlineFlowBox::paint):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::removeChild):
        * rendering/RenderContainer.cpp:
        (WebCore::RenderContainer::updateBeforeAfterContentForContainer):
        * rendering/RenderFlow.h:
        (WebCore::RenderFlow::virtualContinuation):
        (WebCore::RenderFlow::continuation):
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::positionForCoordinates):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::absoluteRects):
        (WebCore::RenderObject::absoluteQuads):
        (WebCore::RenderObject::addFocusRingRects):
        (WebCore::RenderObject::repaintAfterLayoutIfNeeded):
        (WebCore::RenderObject::getAbsoluteRepaintRectWithOutline):
        (WebCore::RenderObject::handleDynamicFloatPositionChange):
        (WebCore::RenderObject::hoverAncestor):
        (WebCore::RenderObject::updateDragState):
        (WebCore::RenderObject::updateHitTestResult):
        (WebCore::RenderObject::getTextDecorationColors):
        (WebCore::RenderObject::adjustRectForOutlineAndShadow):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::virtualContinuation):

2009-01-16  David Hyatt  <hyatt@apple.com>

        Inline the methods of Font for obtaining metrics such as ascent, descent and line spacing.

        Reviewed by ggaren

        * platform/graphics/Font.cpp:
        * platform/graphics/Font.h:
        (WebCore::Font::width):
        (WebCore::Font::ascent):
        (WebCore::Font::descent):
        (WebCore::Font::lineSpacing):
        (WebCore::Font::lineGap):
        (WebCore::Font::xHeight):
        (WebCore::Font::unitsPerEm):
        (WebCore::Font::spaceWidth):

2009-01-16  Sam Weinig  <sam@webkit.org>

        Reviewed by David Hyatt.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=23388
        Remove FrameViewPrivate

        Removes an indirection and is a small speedup on PLT.

        * page/FrameView.cpp:
        (WebCore::FrameView::FrameView):
        (WebCore::FrameView::~FrameView):
        (WebCore::FrameView::reset):
        (WebCore::FrameView::resetScrollbars):
        (WebCore::FrameView::init):
        (WebCore::FrameView::clear):
        (WebCore::FrameView::didFirstLayout):
        (WebCore::FrameView::initScrollbars):
        (WebCore::FrameView::updateDefaultScrollbarState):
        (WebCore::FrameView::setCanHaveScrollbars):
        (WebCore::FrameView::applyOverflowToViewport):
        (WebCore::FrameView::layoutCount):
        (WebCore::FrameView::needsFullRepaint):
        (WebCore::FrameView::layoutRoot):
        (WebCore::FrameView::layout):
        (WebCore::FrameView::setMediaType):
        (WebCore::FrameView::mediaType):
        (WebCore::FrameView::useSlowRepaints):
        (WebCore::FrameView::setUseSlowRepaints):
        (WebCore::FrameView::addSlowRepaintObject):
        (WebCore::FrameView::removeSlowRepaintObject):
        (WebCore::FrameView::scrollRectIntoViewRecursively):
        (WebCore::FrameView::setScrollPosition):
        (WebCore::FrameView::repaintContentRectangle):
        (WebCore::FrameView::beginDeferredRepaints):
        (WebCore::FrameView::endDeferredRepaints):
        (WebCore::FrameView::scheduleRelayout):
        (WebCore::FrameView::scheduleRelayoutOfSubtree):
        (WebCore::FrameView::layoutPending):
        (WebCore::FrameView::needsLayout):
        (WebCore::FrameView::unscheduleRelayout):
        (WebCore::FrameView::isTransparent):
        (WebCore::FrameView::setTransparent):
        (WebCore::FrameView::baseBackgroundColor):
        (WebCore::FrameView::setBaseBackgroundColor):
        (WebCore::FrameView::shouldUpdateWhileOffscreen):
        (WebCore::FrameView::setShouldUpdateWhileOffscreen):
        (WebCore::FrameView::scheduleEvent):
        (WebCore::FrameView::pauseScheduledEvents):
        (WebCore::FrameView::resumeScheduledEvents):
        (WebCore::FrameView::performPostLayoutTasks):
        (WebCore::FrameView::updateOverflowStatus):
        (WebCore::FrameView::dispatchScheduledEvents):
        (WebCore::FrameView::wasScrolledByUser):
        (WebCore::FrameView::setWasScrolledByUser):
        (WebCore::FrameView::paintContents):
        (WebCore::FrameView::setPaintRestriction):
        (WebCore::FrameView::isPainting):
        (WebCore::FrameView::setNodeToDraw):
        * page/FrameView.h:
        (WebCore::FrameView::setIsVisuallyNonEmpty): Inline.

2009-01-14  Julien Chaffraix  <jchaffraix@webkit.org>

        Reviewed by Darin Adler.

        Bug 23237: Some HTML constructors in HTMLElementFactory needs
        an HTMLFormElement argument

        - Added 'constructorNeedsFormElement' parameter to make_names.pl to account
          for HTML form elements.

        - Added the new information to HTMLTagNames.in.

        * dom/make_names.pl:
        * html/HTMLTagNames.in:

2009-01-16  David Hyatt  <hyatt@apple.com>

        Eliminate a bunch of save/restore pairs from commonly used GraphicsContext methods.  The most common reason
        for needing save/restore in the line-drawing methods was antialiasing, so this has now been made part of
        the cross-platform graphics state.  By being able to query for the current antialiasing setting, antialiasing
        can be temporarily changed and then restored back to the real value without needing to do a save/restore.

        The line drawing code also set the fill color to the stroke color and relied on save/restore to prevent
        a permanent mutation of the fill color in the CGContext.   The new code just restores the fill color back
        to its original value without doing the much more expensive save/restore.

        Reviewed by Oliver Hunt

        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::setShouldAntialias):
        (WebCore::GraphicsContext::shouldAntialias):
        * platform/graphics/GraphicsContext.h:
        * platform/graphics/GraphicsContextPrivate.h:
        (WebCore::GraphicsContextState::GraphicsContextState):
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::setPlatformShouldAntialias):
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::drawLine):
        (WebCore::GraphicsContext::drawConvexPolygon):
        (WebCore::GraphicsContext::drawLineForText):
        (WebCore::GraphicsContext::setPlatformShouldAntialias):
        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::GraphicsContext::setPlatformShouldAntialias):
        * platform/graphics/skia/GraphicsContextSkia.cpp:
        (WebCore::GraphicsContext::setPlatformShouldAntialias):
        * platform/graphics/wx/GraphicsContextWx.cpp:
        (WebCore::GraphicsContext::setPlatformShouldAntialias):
        * rendering/RenderPath.cpp:
        (WebCore::RenderPath::paint):

2009-01-16  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Clean up the bridge code and get rid of Field::name() and Method::name().

        * bridge/c/c_instance.cpp:
        (JSC::Bindings::CInstance::invokeMethod):
        * bridge/c/c_runtime.cpp:
        * bridge/c/c_runtime.h:
        (JSC::Bindings::CField::identifier):
        (JSC::Bindings::CMethod::identifier):
        * bridge/jni/jni_class.cpp:
        (JavaClass::JavaClass):
        * bridge/jni/jni_instance.cpp:
        (JavaInstance::invokeMethod):
        * bridge/jni/jni_runtime.cpp:
        (JavaField::valueFromInstance):
        (JavaField::setValueToInstance):
        (JavaMethod::methodID):
        * bridge/jni/jni_runtime.h:
        (JSC::Bindings::JavaField::name):
        (JSC::Bindings::JavaMethod::name):
        * bridge/objc/objc_class.mm:
        (JSC::Bindings::ObjcClass::methodsNamed):
        * bridge/objc/objc_instance.mm:
        (ObjcInstance::invokeMethod):
        * bridge/objc/objc_runtime.h:
        (JSC::Bindings::ObjcMethod::isFallbackMethod):
        (JSC::Bindings::ObjcMethod::selector):
        * bridge/objc/objc_runtime.mm:
        (JSC::Bindings::ObjcMethod::ObjcMethod):
        (JSC::Bindings::ObjcMethod::getMethodSignature):
        (JSC::Bindings::ObjcField::ObjcField):
        (JSC::Bindings::ObjcField::valueFromInstance):
        (JSC::Bindings::ObjcField::setValueToInstance):
        (JSC::Bindings::callObjCFallbackObject):
        * bridge/runtime.h:

2009-01-16  David Hyatt  <hyatt@apple.com>

        Optimize RenderText::styleDidChange.  Don't call the base class, which does extra meaningless work.
        Instead just do the one check we need to do (for a diff of layout) and mark dirty as appropriate.
        Clean up the base class method also to just bail early if no m_parent is set instead of repeatedly checking
        for the existence of m_parent in each if clause.

        Reviewed by Darin Adler

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::styleDidChange):
        * rendering/RenderText.cpp:
        (WebCore::RenderText::styleDidChange):

2009-01-16  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Beth Dakin.

        Bug 23387: AX hierarchy is incorrect when iframes are present
        https://bugs.webkit.org/show_bug.cgi?id=23387

        The AX hierarchy is incorrect when iframes are present.

        Test: accessibility/iframe-bastardization.html

        * page/mac/AccessibilityObjectWrapper.mm:
        (-[AccessibilityObjectWrapper renderWidgetChildren]):

2009-01-16  Brady Eidson  <beidson@apple.com>

        Reviewed by Darin Adler

        <rdar://problem/3541409> - Split up some back/forward cache decision making and add detailed logging to
        better understand what the common disqualifiers are.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::canCachePageContainingThisFrame):
        (WebCore::FrameLoader::canCachePage): Split off what will be per-frame decision making into canCacheSubframe.
        (WebCore::FrameLoader::logCanCachePageDecision): Detailed logging about why a page may not be considered for
          the back/forward cache.
        (WebCore::FrameLoader::logCanCacheFrameDecision): Same detailed logging on the per-frame basis.
        (WebCore::FrameLoader::commitProvisionalLoad): Move the m_client->canCachePage() call into canCachePageContainingThisFrame().
        * loader/FrameLoader.h:

2009-01-16  Chris Marrin  <cmarrin@apple.com>

        Reviewed by David Hyatt.

        Test: transitions/hang-with-bad-transition-list.html

        Fixed https://bugs.webkit.org/show_bug.cgi?id=23088.
        This was happening because I was calling setChanged() from inside updateRendering()
        which causes an infinite loop. I fixed this by deferring the setChanged to the next
        run loop iteration. That made it not infinite loop, but it still retriggers the
        transition forever. The problem is that there is both an 'all' and specific transition
        on 'opacity'. This tickled a bug in AnimationController which causes the opacity
        transition to get constantly cancelled and then retriggered. The problem is that
        the specific opacity transition has a duration of 0. I got rid of the logic to
        flush out 0 duration transitions and it is no longer constantly triggered. The
        logic to flush them was just an optimization, and you really need to keep them
        around to make the logic to override earlier animations by later ones work. And there is
        very little overhead in this case anyway, so the optimization was not that useful.

        I made a LayoutTest from the original testcase which tests both the infinite
        loop and constantly triggering animation cases.

        * page/animation/AnimationBase.cpp:
        (WebCore::AnimationBase::updateStateMachine):
        * page/animation/AnimationController.cpp:
        (WebCore::AnimationControllerPrivate::updateRenderingDispatcherFired):
        (WebCore::AnimationControllerPrivate::addNodeChangeToDispatch):
        (WebCore::AnimationController::addNodeChangeToDispatch):
        * page/animation/AnimationController.h:
        * page/animation/CompositeAnimation.cpp:
        (WebCore::CompositeAnimationPrivate::updateTransitions):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::adjustAnimations):
        (WebCore::RenderStyle::adjustTransitions):

2009-01-16  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Darin Adler.

        Bug 23385: crash at com.apple.WebCore  WebCore::HTMLAnchorElement::isKeyboardFocusable
        https://bugs.webkit.org/show_bug.cgi?id=23385

        Option-tabbing through the page mentioned in the bug causes a crash

        Test: fast/events/tab-crash-with-image-map.html

        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::isKeyboardFocusable):

2009-01-16  Thiago Macieira  <thiago.macieira@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Fixes QString and 8-bit mix fixes.

        Details:  Make sure we use QLatin1String where appropriate (and don't
        use QString when not necessary)

        * platform/graphics/qt/ImageDecoderQt.cpp:
        (WebCore::ImageDecoderQt::create):
        * platform/graphics/qt/SimpleFontDataQt.cpp:
        (WebCore::SimpleFontData::platformInit):
        * platform/qt/FileSystemQt.cpp:
        (WebCore::openTemporaryFile):
        * platform/qt/LoggingQt.cpp:
        (WebCore::InitializeLoggingChannelsIfNecessary):
        * platform/qt/RenderThemeQt.cpp:
        (WebCore::RenderThemeQt::extraMediaControlsStyleSheet):
        * plugins/qt/PluginDataQt.cpp:
        (WebCore::PluginData::initPlugins):

2009-01-16  Ariya Hidayat  <ariya.hidayat@trolltech.com>

        Reviewed by Adam Roben.

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

        When plugins are disabled, plugin data should not be available for
        the page. This ensures that navigator.plugins would not see the
        additional MIME types supported by the plugins.

        * page/Page.cpp:
        (WebCore::Page::pluginData):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::shouldUsePlugin):
        * rendering/RenderPartObject.cpp:
        (WebCore::RenderPartObject::updateWidget):

2009-01-15  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Sam Weinig.

        Got rid of .idl file in Resources for bug https://bugs.webkit.org/show_bug.cgi?id=21421.
        Also fixed the test case to work on ppc.

        * WebCore.xcodeproj/project.pbxproj:

2009-01-16  Ariya Hidayat  <ariya.hidayat@trolltech.com>

        Another attempt at fixing the Qt build.

        * bridge/qt/qt_instance.cpp:
        (JSC::Bindings::QtInstance::getInstance):

2009-01-16  David Hyatt  <hyatt@apple.com>

        Fix for 1.85% PLT regression.  Since asking if a frame is "complete" actually aggressively decodes
        the frame, we add an optimization when advancing animations.  If we have received all of the animated
        image's data, then obviously we can go ahead and advance safely.  This prevents the first draw of an image
        from decoding two frames' worth of data in the case where all of the image's data has been received.

        While this fixes the cached case, there could in fact be a regression on the uncached PLT from this change
        as well.  It's not immediately clear how that regression would be fixed, though, and it would likely be
        a much smaller percentage of that overall uncached time.

        Reviewed by Dan Bernstein

        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::startAnimation):

2009-01-15  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Anders Carlsson.

        https://bugs.webkit.org/show_bug.cgi?id=23349
        Don't store obsolete caches in disk storage

        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::ResourceLoader):
        (WebCore::ResourceLoader::load):
        (WebCore::ResourceLoader::scheduleLoadFallbackResourceFromApplicationCache):
        * loader/ResourceLoader.h:
        Don't maintain m_wasLoadedFromApplicationCache, which was never used.

        * loader/appcache/ApplicationCache.cpp: (WebCore::ApplicationCache::addResource):
        Assert that only implicit and dynamic resources can be added after the cache has been fully
        loaded and stored to disk database.

        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::ApplicationCacheGroup::cacheDestroyed): Don't remove non-newest caches from disk
        database, as this is now done whenever the cache becomes obsolete.
        (WebCore::ApplicationCacheGroup::setNewestCache): Remove an obsolete cache from disk storage.

        * loader/appcache/ApplicationCacheStorage.cpp: (WebCore::ApplicationCacheStorage::cacheGroupDestroyed):
        A cache group that has never been saved should not be remembered in m_cacheHostSet. Changed
        the check to no longer rely on savedNewestCachePointer.

2009-01-15  Dimitri Dupuis-Latour  <dupuislatour@apple.com>

        <rdar://problem/5870656> selectorText and cssText are clipped for :nth-child() and :nth-of-type();

        Reviewed by Timothy Hatcher.

        * css/CSSSelector.cpp:
        (WebCore::CSSSelector::selectorText):

2009-01-15  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by Oliver Hunt.

        <rdar://problem/6444148> Styling a selection that ends in a line break can sometimes style what's after the break

        If the range to style ended at [node, 0] or inside node (and if for some reason the node didn't get split),
        applyInlineStyle would style node.

        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::applyInlineStyle): Rename pastLast to pastEndNode, since it doesn't come from
        Range::pastLastNode() anymore.  pastEndNode is the node after the last one that is fully selected, since
        the work done in the loop that follows should only be performed on fully selected nodes.
        * editing/InsertLineBreakCommand.cpp:
        (WebCore::InsertLineBreakCommand::doApply): Explicitly handle insertion into containers and after non-text nodes.
        Those were handled accidently before.
        * editing/htmlediting.cpp:
        (WebCore::caretMaxOffset): In various places we call this with a container and expect to be given the number
        of children in that container, so I changed it to match that.  RenderBR and RenderObject::caretMaxOffset() should
        also be eliminated since maxDeepOffset handles non-text nodes.

2009-01-15  Anders Carlsson  <andersca@apple.com>

        Reviewed by Geoffrey Garen.

        Get rid of the dreaded BindingLanguage once and for all. Also get rid of Instance::getInstance.

        * bridge/c/c_instance.h:
        * bridge/jni/jni_instance.h:
        * bridge/objc/objc_instance.h:
        * bridge/qt/qt_instance.h:
        * bridge/runtime.cpp:
        * bridge/runtime.h:
        * bridge/runtime_object.h:

2009-01-15  David Hyatt  <hyatt@apple.com>

        Eliminate an extra virtual function call that occurs for every single RenderText by moving the SVG-specific
        code that was placed into RenderText::styleDidChange into RenderSVGInlineText::styleDidChange.

        Reviewed by Oliver Hunt

        * rendering/RenderSVGInlineText.cpp:
        (WebCore::RenderSVGInlineText::styleDidChange):
        * rendering/RenderSVGInlineText.h:
        * rendering/RenderText.cpp:
        (WebCore::RenderText::styleDidChange):

2009-01-15  Anders Carlsson  <andersca@apple.com>

        Another attempt at fixing the Qt build.

        * bridge/qt/qt_instance.cpp:
        (JSC::Bindings::QtInstance::getOwnPropertySlot):
        (JSC::Bindings::QtInstance::put):
        * bridge/qt/qt_instance.h:
        * bridge/runtime.h:
        (JSC::Bindings::Instance::getOwnPropertySlot):
        (JSC::Bindings::Instance::put):
        * bridge/runtime_object.cpp:
        (JSC::RuntimeObjectImp::getOwnPropertySlot):
        (JSC::RuntimeObjectImp::put):

2009-01-15  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin Adler.

        Add QtInstance::getInstance and start using it.

        * bridge/qt/qt_instance.cpp:
        (JSC::Bindings::QtRuntimeObjectImp::mark):
        (JSC::Bindings::QtRuntimeObjectImp::classInfo):
        (JSC::Bindings::):
        (JSC::Bindings::QtInstance::getInstance):
        * bridge/qt/qt_instance.h:
        * bridge/qt/qt_runtime.cpp:
        (JSC::Bindings::convertValueToQVariant):

2009-01-15  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Add the ability for Instance objects to override getOwnPropertySlot/put for runtime objects.

        * bridge/qt/qt_instance.cpp:
        (JSC::Bindings::QtInstance::getOwnPropertySlot):
        (JSC::Bindings::QtInstance::put):
        * bridge/qt/qt_instance.h:
        * bridge/runtime.h:
        (JSC::Bindings::Instance::getOwnPropertySlot):
        (JSC::Bindings::Instance::put):
        * bridge/runtime_object.cpp:
        (JSC::RuntimeObjectImp::getOwnPropertySlot):
        (JSC::RuntimeObjectImp::put):

2009-01-15  Anders Carlsson  <andersca@apple.com>

        Fix the QT build.

        * bridge/qt/qt_instance.cpp:
        (JSC::Bindings::QtInstance::createRuntimeObject):
        * bridge/qt/qt_instance.h:

2009-01-15  David Hyatt  <hyatt@apple.com>

        Fix for <rdar://problem/6500278> REGRESSION: 3.5% of samples on iBench in WebCore::Frame::setZoomFactor

        setZoomFactor was supposed to bail if both the zoom factor and mode were the same.  The mode check was
        buggy and doing the wrong thing.

        Reviewed by Darin Adler

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

2009-01-15  Anders Carlsson  <andersca@apple.com>

        Reviewed by Geoffrey Garen.

        Make Instance::createRuntimeObject a virtual function and override it for QtInstance.

        * bindings/js/JSPluginElementFunctions.cpp:
        (WebCore::getRuntimeObject):
        * bridge/c/c_utility.cpp:
        (JSC::Bindings::convertNPVariantToValue):
        * bridge/jni/jni_instance.cpp:
        (JavaInstance::invokeMethod):
        * bridge/jni/jni_jsobject.mm:
        (JavaJSObject::convertJObjectToValue):
        * bridge/jni/jni_runtime.cpp:
        (JavaField::valueFromInstance):
        (JavaArray::valueAt):
        * bridge/objc/objc_utility.mm:
        (JSC::Bindings::convertObjcValueToValue):
        * bridge/qt/qt_instance.cpp:
        (JSC::Bindings::QtInstance::getRuntimeObject):
        (JSC::Bindings::QtInstance::createRuntimeObject):
        * bridge/qt/qt_instance.h:
        * bridge/qt/qt_runtime.cpp:
        (JSC::Bindings::convertQVariantToValue):
        (JSC::Bindings::QtConnectionObject::execute):
        * bridge/runtime.cpp:
        (JSC::Bindings::Instance::createRuntimeObject):
        * bridge/runtime.h:

2009-01-15  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=23354
        Fix up graphics/chromium files to account for Uniscribe style scrubbing.

        * platform/graphics/chromium/FontChromiumWin.cpp:
        (WebCore::windowsCanHandleTextDrawing):
        (WebCore::Font::selectionRectForComplexText):
        (WebCore::Font::drawComplexText):
        (WebCore::Font::floatWidthForComplexText):
        (WebCore::Font::offsetForPositionForComplexText):
        * platform/graphics/chromium/GlyphPageTreeNodeChromiumWin.cpp:
        (WebCore::fillNonBMPGlyphs):

2009-01-15  David Levin  <levin@chromium.org>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=23333
        Adjust due to a name change that happened in a WebKit.

        * svg/graphics/skia/SVGPaintServerPatternSkia.cpp:
        (WebCore::SVGPaintServerPattern::setup):

2009-01-15  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=23340
        Add remaining bits of graphics/chromium.

        * platform/graphics/chromium/SimpleFontDataChromiumWin.cpp: Added.
        (WebCore::scaleEmToUnits):
        (WebCore::SimpleFontData::platformInit):
        (WebCore::SimpleFontData::platformDestroy):
        (WebCore::SimpleFontData::smallCapsFontData):
        (WebCore::SimpleFontData::containsCharacters):
        (WebCore::SimpleFontData::determinePitch):
        (WebCore::SimpleFontData::platformWidthForGlyph):
        * platform/graphics/chromium/SimpleFontDataLinux.cpp: Added.
        (WebCore::SimpleFontData::platformInit):
        (WebCore::SimpleFontData::platformDestroy):
        (WebCore::SimpleFontData::smallCapsFontData):
        (WebCore::SimpleFontData::containsCharacters):
        (WebCore::SimpleFontData::determinePitch):
        (WebCore::SimpleFontData::platformWidthForGlyph):
        * platform/graphics/chromium/ThemeHelperChromiumWin.cpp: Added.
        (WebCore::ThemeHelperWin::ThemeHelperWin):
        (WebCore::ThemeHelperWin::~ThemeHelperWin):
        * platform/graphics/chromium/ThemeHelperChromiumWin.h: Added.
        (WebCore::ThemeHelperWin::):
        (WebCore::ThemeHelperWin::context):
        (WebCore::ThemeHelperWin::rect):
        * platform/graphics/chromium/UniscribeHelper.cpp: Added.
        (WebCore::treatAsSpace):
        (WebCore::containsMissingGlyphs):
        (WebCore::setLogFontAndStyle):
        (WebCore::UniscribeHelper::UniscribeHelper):
        (WebCore::UniscribeHelper::~UniscribeHelper):
        (WebCore::UniscribeHelper::initWithOptionalLengthProtection):
        (WebCore::UniscribeHelper::width):
        (WebCore::UniscribeHelper::justify):
        (WebCore::UniscribeHelper::characterToX):
        (WebCore::UniscribeHelper::xToCharacter):
        (WebCore::UniscribeHelper::draw):
        (WebCore::UniscribeHelper::firstGlyphForCharacter):
        (WebCore::UniscribeHelper::fillRuns):
        (WebCore::UniscribeHelper::shape):
        (WebCore::UniscribeHelper::fillShapes):
        (WebCore::UniscribeHelper::fillScreenOrder):
        (WebCore::UniscribeHelper::adjustSpaceAdvances):
        (WebCore::UniscribeHelper::applySpacing):
        (WebCore::UniscribeHelper::advanceForItem):
        * platform/graphics/chromium/UniscribeHelper.h: Added.
        (WebCore::UniscribeHelper::directionalOverride):
        (WebCore::UniscribeHelper::setDirectionalOverride):
        (WebCore::UniscribeHelper::inhibitLigate):
        (WebCore::UniscribeHelper::setInhibitLigate):
        (WebCore::UniscribeHelper::letterSpacing):
        (WebCore::UniscribeHelper::setLetterSpacing):
        (WebCore::UniscribeHelper::spaceWidth):
        (WebCore::UniscribeHelper::setSpaceWidth):
        (WebCore::UniscribeHelper::wordSpacing):
        (WebCore::UniscribeHelper::setWordSpacing):
        (WebCore::UniscribeHelper::setAscent):
        (WebCore::UniscribeHelper::init):
        (WebCore::UniscribeHelper::tryToPreloadFont):
        (WebCore::UniscribeHelper::Shaping::Shaping):
        (WebCore::UniscribeHelper::Shaping::glyphLength):
        (WebCore::UniscribeHelper::Shaping::charLength):
        (WebCore::UniscribeHelper::Shaping::effectiveAdvances):
        (WebCore::UniscribeHelper::nextWinFontData):
        (WebCore::UniscribeHelper::resetFontIndex):
        * platform/graphics/chromium/UniscribeHelperTextRun.cpp: Added.
        (WebCore::UniscribeHelperTextRun::UniscribeHelperTextRun):
        (WebCore::UniscribeHelperTextRun::tryToPreloadFont):
        (WebCore::UniscribeHelperTextRun::nextWinFontData):
        (WebCore::UniscribeHelperTextRun::resetFontIndex):
        * platform/graphics/chromium/UniscribeHelperTextRun.h: Added.

2009-01-15  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Dan Bernstein.

        Fixed Windows project file after https://bugs.webkit.org/show_bug.cgi?id=21421

        * WebCore.vcproj/WebCore.vcproj:

2009-01-15  Aaron Boodman  <aa@chromium.org>

        Reviewed by Adam Roben.

        https://bugs.webkit.org/show_bug.cgi?id=15279
        Right clicking over text (or multiple spaces) auto selects the word
        (or multiple spaces) under it, which is not a desirable effect for some
        platforms.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::sendContextMenuEvent):
        Don't select words on right-click on Chromium.

2009-01-15  Darin Fisher  <darin@chromium.org>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=23345
        SharedBuffer.h should include wtf/OwnPtr.h

        * platform/SharedBuffer.h:

2009-01-14  David Kilzer  <ddkilzer@apple.com>

        Bug 23338: Make "Streamline Inspector Source" build script check for a directory before using it

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

        Reviewed by Timothy Hatcher.

        * WebCore.xcodeproj/project.pbxproj: Check to see if
        "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/inspector"
        exists before trying to change directories into it and then
        deleting, modifying and adding files to it.

2009-01-14  miggilin  <mr.diggilin@gmail.com>

        Reviewed by Kevin Ollivier.

        Fixing wx compilation for wx 2.9/trunk.

        * platform/graphics/wx/FontPlatformData.h:
        (WebCore::FontPlatformData::operator==):
        (WebCore::FontPlatformData::computeHash):
        * platform/graphics/wx/GraphicsContextWx.cpp:
        (WebCore::GraphicsContext::clip):
        (WebCore::GraphicsContext::setCompositeOperation):
        * platform/graphics/wx/ImageSourceWx.cpp:
        (WebCore::ImageSource::createFrameAtIndex):
        * platform/graphics/wx/PathWx.cpp:
        (WebCore::Path::contains):
        * platform/wx/RenderThemeWx.cpp:
        (WebCore::RenderThemeWx::paintButton):
        (WebCore::RenderThemeWx::paintTextField):
        (WebCore::RenderThemeWx::paintMenuList):
        * platform/wx/wxcode/gtk/non-kerned-drawing.cpp:

2009-01-14  Kevin Ollivier  <kevino@theolliviers.com>

        wx build fix. Adding WebKitCSSMatrix.

        * WebCoreSources.bkl:

2009-01-14  Adam Treat  <adam.treat@torchmobile.com>

        Prospective build fix for Qt following r39922.

        * WebCore.pro:

2009-01-14  Darin Adler  <darin@apple.com>

        Fix debug build.

        * bindings/js/JSWebKitCSSMatrixConstructor.cpp:
        (WebCore::JSWebKitCSSMatrixConstructor::JSWebKitCSSMatrixConstructor):
        Use ASSERT_UNUSED.

2009-01-14  Adele Peterson  <adele@apple.com>

        Reviewed by Darin Adler.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=23335
        <rdar://problem/6247650> Update <input type="search"> for RenderThemeWin

        No new tests added.  In the future, we need to update DumpRenderTree to be able to run with different RenderThemes and
        we'll need a separate set of results for different themes.

        * css/themeWin.css: Renable search fields.  Added new rules for sub-element placement.

        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::textBlockWidth): Consider margin set on the sub-elements when computing the
        desired width for the text block.

        * rendering/RenderThemeWin.cpp:
        (WebCore::RenderThemeWin::supportsFocus): Treat SearchFieldPart the same as TextFieldPart.
        (WebCore::RenderThemeWin::determineState): ditto.
        (WebCore::RenderThemeWin::getClassicThemeData): ditto.
        (WebCore::RenderThemeWin::getThemeData): ditto.
        (WebCore::RenderThemeWin::paintSearchFieldCancelButton): Draw a scaled, vertically centered, version of the new artwork.
        (WebCore::RenderThemeWin::paintSearchFieldResultsDecoration): ditto.
        (WebCore::RenderThemeWin::paintSearchFieldResultsButton): ditto.
        (WebCore::RenderThemeWin::adjustSearchFieldCancelButtonStyle): Set the scaled width and height.
        (WebCore::RenderThemeWin::adjustSearchFieldResultsDecorationStyle): ditto.
        (WebCore::RenderThemeWin::adjustSearchFieldResultsButtonStyle): ditto.

2009-01-14  Alp Toker  <alp@nuanti.com>

        GTK+ build fix following r39922.
        Add WebKitCSSMatrix to the build system.

        * GNUmakefile.am:

2009-01-14  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Sam Weinig.

        Implemented 2D WebKitCSSMatrix
        https://bugs.webkit.org/show_bug.cgi?id=21421

        Test: transforms/2d/cssmatrix-interface.xhtml

        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSDOMWindowBase.cpp:
        (jsDOMWindowBaseWebKitCSSMatrix):
        (setJSDOMWindowBaseWebKitCSSMatrix):
        * bindings/js/JSWebKitCSSMatrixConstructor.cpp: Added.
        (WebCore::):
        (WebCore::JSWebKitCSSMatrixConstructor::JSWebKitCSSMatrixConstructor):
        (WebCore::constructWebKitCSSMatrix):
        (WebCore::JSWebKitCSSMatrixConstructor::getConstructData):
        * bindings/js/JSWebKitCSSMatrixConstructor.h: Added.
        (WebCore::JSWebKitCSSMatrixConstructor::classInfo):
        * bindings/objc/DOMInternal.h:
        * css/WebKitCSSMatrix.cpp: Added.
        (WebCore::WebKitCSSMatrix::WebKitCSSMatrix):
        (WebCore::WebKitCSSMatrix::~WebKitCSSMatrix):
        (WebCore::WebKitCSSMatrix::setMatrixValue):
        (WebCore::WebKitCSSMatrix::multiply):
        (WebCore::WebKitCSSMatrix::inverse):
        (WebCore::WebKitCSSMatrix::translate):
        (WebCore::WebKitCSSMatrix::scale):
        (WebCore::WebKitCSSMatrix::rotate):
        (WebCore::WebKitCSSMatrix::toString):
        * css/WebKitCSSMatrix.h: Added.
        (WebCore::WebKitCSSMatrix::create):
        (WebCore::WebKitCSSMatrix::a):
        (WebCore::WebKitCSSMatrix::b):
        (WebCore::WebKitCSSMatrix::c):
        (WebCore::WebKitCSSMatrix::d):
        (WebCore::WebKitCSSMatrix::e):
        (WebCore::WebKitCSSMatrix::f):
        (WebCore::WebKitCSSMatrix::setA):
        (WebCore::WebKitCSSMatrix::setB):
        (WebCore::WebKitCSSMatrix::setC):
        (WebCore::WebKitCSSMatrix::setD):
        (WebCore::WebKitCSSMatrix::setE):
        (WebCore::WebKitCSSMatrix::setF):
        (WebCore::WebKitCSSMatrix::transform):
        * css/WebKitCSSMatrix.idl: Added.

2009-01-14  Michael Moss  <mmoss@chromium.org>

        Reviewed by Eric Seidel.

        Workaround a skia limitation on repeated patterns, and remove extra
        transformations applied to pattern.
        https://bugs.webkit.org/show_bug.cgi?id=23332

        Fixes:
        LayoutTests/fast/canvas/patternfill-repeat.html
        LayoutTests/svg/W3C-SVG-1.1/pservers-grad-06-b.svg

        * platform/graphics/skia/PatternSkia.cpp:
        (WebCore::Pattern::createPlatformPattern):

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

        Fix https://bugs.webkit.org/show_bug.cgi?id=23334
        Bug 23334: Compile failure in XMLTokenizerLibxml2.cpp

        Include wtf/UnusedParam.h to get UNUSED_PARAM.

        * dom/XMLTokenizerLibxml2.cpp:
        (WebCore::hackAroundLibXMLEntityBug):

2009-01-14  David Levin  <levin@chromium.org>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=23333
        Platform code fixes. These compensate for changes in platform
        callbacks from WebKit and minor API tweaks.

        I enumerated a few below.

        * platform/graphics/chromium/FontCacheChromiumWin.cpp:
        fontExists has been gone since r34794.

        * platform/graphics/skia/ImageSkia.cpp:
        (WebCore::paintSkBitmap):

        (WebCore::FrameData::clear):
        r39751 changes this api to take and return a bool.

        (WebCore::Image::drawPattern):
        * platform/graphics/skia/PathSkia.cpp:
        (WebCore::Path::apply):
        (WebCore::boundingBoxForCurrentStroke):
        (WebCore::Path::strokeContains):
        * svg/graphics/skia/RenderPathSkia.cpp: Removed due to r39805.

2009-01-14  Jeremy Moskovich  <jeremy@chromium.org>

        Reviewed by Eric Seidel.

        <https://bugs.webkit.org/show_bug.cgi?id=16829>
        Implement NPN_SetException()

        This mirrors the implementation in the obj-c bindings.

        Test: plugins/netscape-throw-exception.html

        * bridge/NP_jsobject.cpp:
        (_NPN_SetException):
        * bridge/c/c_instance.cpp:
        (JSC::Bindings::getExceptionString):
        (JSC::Bindings::CInstance::setGlobalException):
        (JSC::Bindings::CInstance::moveGlobalExceptionToExecState):
        (JSC::Bindings::CInstance::invokeMethod):
        (JSC::Bindings::CInstance::invokeDefaultMethod):
        (JSC::Bindings::CInstance::invokeConstruct):
        (JSC::Bindings::CInstance::getPropertyNames):
        * bridge/c/c_instance.h:

2009-01-14  Pierre-Olivier Latour  <pol@apple.com>

        Fixed build warning when LIBXML_VERSION >= 20627.

        * dom/XMLTokenizerLibxml2.cpp:
        (WebCore::hackAroundLibXMLEntityBug):

2009-01-14  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Anders Carlsson.

        https://bugs.webkit.org/show_bug.cgi?id=23326
        Resources are never deleted from application cache disk database

        * loader/appcache/ApplicationCacheStorage.cpp:
        (WebCore::ApplicationCacheStorage::openDatabase): Create a trigger that deletes resources when
        a cache is deleted. Note that this change doesn't require bumping schema version. We should
        consider switching to foreign keys and cascade delete instead of triggers in the future.
        (WebCore::ApplicationCacheStorage::remove): Added a comment explaining why it's sufficient
        to only remove the cache itself.
        (WebCore::ApplicationCacheStorage::empty): Don't delete from CacheResources, now that this
        is done automatically when a cache is deleted.

2009-01-14  David Kilzer  <ddkilzer@apple.com>

        Bug 22795: favicons should be saved to webarchives

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

        Reviewed by Darin Adler.

        Test: webarchive/test-link-rel-icon.html

        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::addSubresourceAttributeURLs): Do not add
        favicon URLs to the list since no ArchiveResource or CachedResource
        is ever created for them.
        * loader/archive/cf/LegacyWebArchive.cpp:
        (WebCore::LegacyWebArchive::create): Handle favicons as a special
        case for all main resources.
        * loader/icon/IconDatabase.cpp:
        (WebCore::IconDatabase::close): Actually close the SQLite database
        so that isOpen() returns false when called.  Added an ASSERT() for
        good measure.

2009-01-14  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=23321
        Upstream more bits of graphics/chromium.

        * platform/graphics/chromium/FontPlatformDataChromiumWin.cpp: Added.
        (WebCore::FontPlatformData::FontPlatformData):
        (WebCore::FontPlatformData::operator=):
        (WebCore::FontPlatformData::~FontPlatformData):
        (WebCore::FontPlatformData::RefCountedHFONT::~RefCountedHFONT):
        (WebCore::FontPlatformData::hashTableDeletedFontValue):
        (WebCore::FontPlatformData::scriptFontProperties):
        * platform/graphics/chromium/FontPlatformDataChromiumWin.h: Added.
        (WebCore::FontPlatformData::isHashTableDeletedValue):
        (WebCore::FontPlatformData::hfont):
        (WebCore::FontPlatformData::size):
        (WebCore::FontPlatformData::hash):
        (WebCore::FontPlatformData::operator==):
        (WebCore::FontPlatformData::scriptCache):
        (WebCore::FontPlatformData::RefCountedHFONT::create):
        (WebCore::FontPlatformData::RefCountedHFONT::hfont):
        (WebCore::FontPlatformData::RefCountedHFONT::hash):
        (WebCore::FontPlatformData::RefCountedHFONT::operator==):
        (WebCore::FontPlatformData::RefCountedHFONT::RefCountedHFONT):
        * platform/graphics/chromium/FontPlatformDataLinux.cpp: Added.
        (WebCore::FontPlatformData::FontPlatformData):
        (WebCore::FontPlatformData::~FontPlatformData):
        (WebCore::FontPlatformData::operator=):
        (WebCore::FontPlatformData::setupPaint):
        (WebCore::FontPlatformData::operator==):
        (WebCore::FontPlatformData::hash):
        (WebCore::FontPlatformData::isFixedPitch):
        * platform/graphics/chromium/FontPlatformDataLinux.h: Added.
        (WebCore::FontPlatformData::FontPlatformData):
        (WebCore::FontPlatformData::size):
        (WebCore::FontPlatformData::isHashTableDeletedValue):
        (WebCore::FontPlatformData::hashTableDeletedFontValue):
        * platform/graphics/chromium/FontUtilsChromiumWin.cpp: Added.
        (WebCore::):
        (WebCore::FontMap::getAscent):
        (WebCore::FontMap::FontData::FontData):
        (WebCore::getFontFamilyForScript):
        (WebCore::getFallbackFamily):
        (WebCore::getDerivedFontData):
        (WebCore::getStyleFromLogfont):
        * platform/graphics/chromium/FontUtilsChromiumWin.h: Added.
        (WebCore::):

2009-01-14  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=23325
        Upstream even more graphics/chromium bits.

        * platform/graphics/chromium/GlyphPageTreeNodeChromiumWin.cpp: Added.
        (WebCore::fillEmptyGlyphs):
        (WebCore::initSpaceGlyph):
        (WebCore::fillBMPGlyphs):
        (WebCore::fillNonBMPGlyphs):
        (WebCore::GlyphPage::fill):
        * platform/graphics/chromium/GlyphPageTreeNodeLinux.cpp: Added.
        (WebCore::GlyphPage::fill):
        * platform/graphics/chromium/IconChromiumLinux.cpp: Added.
        (WebCore::Icon::Icon):
        (WebCore::Icon::~Icon):
        (WebCore::Icon::createIconForFile):
        (WebCore::Icon::createIconForFiles):
        (WebCore::Icon::paint):
        * platform/graphics/chromium/IconChromiumMac.cpp: Added.
        (WebCore::Icon::createIconForFile):
        (WebCore::Icon::createIconForFiles):
        (WebCore::Icon::~Icon):
        (WebCore::Icon::paint):
        * platform/graphics/chromium/IconChromiumWin.cpp: Added.
        (WebCore::Icon::Icon):
        (WebCore::Icon::~Icon):
        (WebCore::Icon::createIconForFile):
        (WebCore::Icon::createIconForFiles):
        (WebCore::Icon::paint):
        * platform/graphics/chromium/ImageBufferData.h: Added.
        * platform/graphics/chromium/ImageChromiumMac.mm: Added.
        (WebCore::Image::loadPlatformResource):
        (WebCore::BitmapImage::initPlatformData):
        (WebCore::BitmapImage::invalidatePlatformData):
        * platform/graphics/chromium/MediaPlayerPrivateChromium.h: Added.
        * platform/graphics/chromium/PlatformIcon.h: Added.

2009-01-14  Darin Fisher  <darin@chromium.org>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=23328
        Upstream remaining files from platform/chromium/

        * platform/chromium/CursorChromium.cpp:
        (WebCore::pointerCursor):
        (WebCore::crossCursor):
        (WebCore::handCursor):
        (WebCore::iBeamCursor):
        (WebCore::waitCursor):
        (WebCore::helpCursor):
        (WebCore::eastResizeCursor):
        (WebCore::northResizeCursor):
        (WebCore::northEastResizeCursor):
        (WebCore::northWestResizeCursor):
        (WebCore::southResizeCursor):
        (WebCore::southEastResizeCursor):
        (WebCore::southWestResizeCursor):
        (WebCore::westResizeCursor):
        (WebCore::northSouthResizeCursor):
        (WebCore::eastWestResizeCursor):
        (WebCore::northEastSouthWestResizeCursor):
        (WebCore::northWestSouthEastResizeCursor):
        (WebCore::columnResizeCursor):
        (WebCore::rowResizeCursor):
        (WebCore::middlePanningCursor):
        (WebCore::eastPanningCursor):
        (WebCore::northPanningCursor):
        (WebCore::northEastPanningCursor):
        (WebCore::northWestPanningCursor):
        (WebCore::southPanningCursor):
        (WebCore::southEastPanningCursor):
        (WebCore::southWestPanningCursor):
        (WebCore::westPanningCursor):
        (WebCore::moveCursor):
        (WebCore::verticalTextCursor):
        (WebCore::cellCursor):
        (WebCore::contextMenuCursor):
        (WebCore::aliasCursor):
        (WebCore::progressCursor):
        (WebCore::noDropCursor):
        (WebCore::copyCursor):
        (WebCore::noneCursor):
        (WebCore::notAllowedCursor):
        (WebCore::zoomInCursor):
        (WebCore::zoomOutCursor):
        * platform/chromium/DragDataRef.h: Added.
        * platform/chromium/DragImageChromium.cpp: Added.
        (WebCore::dragImageSize):
        (WebCore::deleteDragImage):
        (WebCore::scaleDragImage):
        (WebCore::dissolveDragImageToFraction):
        (WebCore::createDragImageFromImage):
        (WebCore::createDragImageIconForCachedImage):
        * platform/chromium/DragImageRef.h:
        * platform/chromium/KeyCodeConversion.h: Added.
        * platform/chromium/KeyCodeConversionGtk.cpp: Added.
        (WebCore::windowsKeyCodeForKeyEvent):
        * platform/chromium/KeyboardCodes.h: Added.
        * platform/chromium/KeyboardCodesPosix.h: Added.
        (WebCore::):
        * platform/chromium/KeyboardCodesWin.h: Added.
        (WebCore::):
        * platform/chromium/Language.cpp: Added.
        (WebCore::defaultLanguage):
        * platform/chromium/LinkHashChromium.cpp: Added.
        (WebCore::visitedLinkHash):
        * platform/chromium/MimeTypeRegistryChromium.cpp: Added.
        (WebCore::MIMETypeRegistry::getMIMETypeForExtension):
        (WebCore::MIMETypeRegistry::getPreferredExtensionForMIMEType):
        (WebCore::MIMETypeRegistry::getMIMETypeForPath):
        (WebCore::MIMETypeRegistry::isSupportedImageMIMEType):
        (WebCore::MIMETypeRegistry::isSupportedImageResourceMIMEType):
        (WebCore::MIMETypeRegistry::isSupportedImageMIMETypeForEncoding):
        (WebCore::MIMETypeRegistry::isSupportedJavaScriptMIMEType):
        (WebCore::MIMETypeRegistry::isSupportedNonImageMIMEType):
        (WebCore::MIMETypeRegistry::isSupportedMediaMIMEType):
        (WebCore::MIMETypeRegistry::isJavaAppletMIMEType):
        (WebCore::dummyHashSet):
        (WebCore::MIMETypeRegistry::getSupportedImageMIMETypes):
        (WebCore::MIMETypeRegistry::getSupportedImageResourceMIMETypes):
        (WebCore::MIMETypeRegistry::getSupportedImageMIMETypesForEncoding):
        (WebCore::MIMETypeRegistry::getSupportedNonImageMIMETypes):
        (WebCore::MIMETypeRegistry::getSupportedMediaMIMETypes):
        * platform/chromium/PasteboardChromium.cpp: Added.
        (WebCore::Pasteboard::generalPasteboard):
        (WebCore::Pasteboard::Pasteboard):
        (WebCore::Pasteboard::clear):
        (WebCore::Pasteboard::writeSelection):
        (WebCore::Pasteboard::writeURL):
        (WebCore::Pasteboard::writeImage):
        (WebCore::Pasteboard::canSmartReplace):
        (WebCore::Pasteboard::plainText):
        (WebCore::Pasteboard::documentFragment):
        * platform/chromium/PasteboardPrivate.h:
        * platform/chromium/PlatformCursor.h: Added.
        (WebCore::PlatformCursor::):
        (WebCore::PlatformCursor::PlatformCursor):
        (WebCore::PlatformCursor::customImage):
        (WebCore::PlatformCursor::hotSpot):
        (WebCore::PlatformCursor::type):
        * platform/chromium/PlatformKeyboardEventChromium.cpp: Added.
        (WebCore::PlatformKeyboardEvent::disambiguateKeyDownEvent):
        (WebCore::PlatformKeyboardEvent::currentCapsLockState):
        * platform/chromium/PlatformScreenChromium.cpp: Added.
        (WebCore::screenDepth):
        (WebCore::screenDepthPerComponent):
        (WebCore::screenIsMonochrome):
        (WebCore::screenRect):
        (WebCore::screenAvailableRect):
        * platform/chromium/PlatformWidget.h:
        * platform/chromium/PopupMenuChromium.cpp: Added.
        (WebCore::PopupListBox::selectedIndex):
        (WebCore::PopupListBox::numItems):
        (WebCore::PopupListBox::setBaseWidth):
        (WebCore::PopupListBox::setTextOnIndexChange):
        (WebCore::PopupListBox::setAcceptOnAbandon):
        (WebCore::PopupListBox::):
        (WebCore::PopupListBox::ListItem::ListItem):
        (WebCore::PopupListBox::PopupListBox):
        (WebCore::PopupListBox::~PopupListBox):
        (WebCore::PopupListBox::disconnectClient):
        (WebCore::PopupListBox::scrollToRevealSelection):
        (WebCore::constructRelativeMouseEvent):
        (WebCore::constructRelativeWheelEvent):
        (WebCore::PopupContainer::create):
        (WebCore::PopupContainer::PopupContainer):
        (WebCore::PopupContainer::~PopupContainer):
        (WebCore::PopupContainer::showPopup):
        (WebCore::PopupContainer::hidePopup):
        (WebCore::PopupContainer::layout):
        (WebCore::PopupContainer::handleMouseDownEvent):
        (WebCore::PopupContainer::handleMouseMoveEvent):
        (WebCore::PopupContainer::handleMouseReleaseEvent):
        (WebCore::PopupContainer::handleWheelEvent):
        (WebCore::PopupContainer::handleKeyEvent):
        (WebCore::PopupContainer::hide):
        (WebCore::PopupContainer::paint):
        (WebCore::PopupContainer::paintBorder):
        (WebCore::PopupContainer::isInterestedInEventForKey):
        (WebCore::PopupContainer::show):
        (WebCore::PopupContainer::setTextOnIndexChange):
        (WebCore::PopupContainer::setAcceptOnAbandon):
        (WebCore::PopupContainer::refresh):
        (WebCore::PopupListBox::handleMouseDownEvent):
        (WebCore::PopupListBox::handleMouseMoveEvent):
        (WebCore::PopupListBox::handleMouseReleaseEvent):
        (WebCore::PopupListBox::handleWheelEvent):
        (WebCore::PopupListBox::isInterestedInEventForKey):
        (WebCore::PopupListBox::handleKeyEvent):
        (WebCore::PopupListBox::hostWindow):
        (WebCore::PopupListBox::invalidateRect):
        (WebCore::stripLeadingWhiteSpace):
        (WebCore::PopupListBox::typeAheadFind):
        (WebCore::PopupListBox::paint):
        (WebCore::PopupListBox::paintRow):
        (WebCore::PopupListBox::getRowFont):
        (WebCore::PopupListBox::abandon):
        (WebCore::PopupListBox::pointToRowIndex):
        (WebCore::PopupListBox::acceptIndex):
        (WebCore::PopupListBox::selectIndex):
        (WebCore::PopupListBox::setOriginalIndex):
        (WebCore::PopupListBox::getRowHeight):
        (WebCore::PopupListBox::getRowBounds):
        (WebCore::PopupListBox::invalidateRow):
        (WebCore::PopupListBox::scrollToRevealRow):
        (WebCore::PopupListBox::isSelectableItem):
        (WebCore::PopupListBox::adjustSelectedIndex):
        (WebCore::PopupListBox::updateFromElement):
        (WebCore::PopupListBox::layout):
        (WebCore::PopupListBox::clear):
        (WebCore::PopupListBox::isPointInBounds):
        (WebCore::PopupMenu::PopupMenu):
        (WebCore::PopupMenu::~PopupMenu):
        (WebCore::PopupMenu::show):
        (WebCore::PopupMenu::hide):
        (WebCore::PopupMenu::updateFromElement):
        (WebCore::PopupMenu::itemWritingDirectionIsNatural):
        * platform/chromium/PopupMenuChromium.h: Added.
        (WebCore::PopupContainer::listBox):
        * platform/chromium/PopupMenuPrivate.h: Added.
        * platform/chromium/SSLKeyGeneratorChromium.cpp: Added.
        (WebCore::supportedKeySizes):
        * platform/chromium/ScrollbarThemeChromium.cpp: Added.
        (WebCore::ScrollbarTheme::nativeTheme):
        (WebCore::ScrollbarThemeChromium::ScrollbarThemeChromium):
        (WebCore::ScrollbarThemeChromium::~ScrollbarThemeChromium):
        (WebCore::ScrollbarThemeChromium::themeChanged):
        (WebCore::ScrollbarThemeChromium::hasThumb):
        (WebCore::ScrollbarThemeChromium::backButtonRect):
        (WebCore::ScrollbarThemeChromium::forwardButtonRect):
        (WebCore::ScrollbarThemeChromium::trackRect):
        (WebCore::ScrollbarThemeChromium::paintTrackBackground):
        (WebCore::ScrollbarThemeChromium::paintTickmarks):
        (WebCore::ScrollbarThemeChromium::paintScrollCorner):
        (WebCore::ScrollbarThemeChromium::shouldCenterOnThumb):
        (WebCore::ScrollbarThemeChromium::buttonSize):
        * platform/chromium/ScrollbarThemeChromium.h: Added.
        (WebCore::ScrollbarThemeChromium::hasButtons):
        * platform/chromium/ScrollbarThemeChromiumLinux.cpp: Added.
        (WebCore::ScrollbarThemeChromium::scrollbarThickness):
        (WebCore::ScrollbarThemeChromium::invalidateOnMouseEnterExit):
        (WebCore::initMozState):
        (WebCore::paintScrollbarWidget):
        (WebCore::ScrollbarThemeChromium::paintTrackPiece):
        (WebCore::ScrollbarThemeChromium::paintButton):
        (WebCore::ScrollbarThemeChromium::paintThumb):
        * platform/chromium/ScrollbarThemeChromiumWin.cpp:
        * platform/chromium/SearchPopupMenuChromium.cpp: Added.
        (WebCore::SearchPopupMenu::SearchPopupMenu):
        (WebCore::SearchPopupMenu::enabled):
        (WebCore::SearchPopupMenu::saveRecentSearches):
        (WebCore::SearchPopupMenu::loadRecentSearches):
        * platform/chromium/SharedTimerChromium.cpp: Added.
        (WebCore::setSharedTimerFiredFunction):
        (WebCore::setSharedTimerFireTime):
        (WebCore::stopSharedTimer):
        * platform/chromium/TemporaryLinkStubs.cpp: Added.
        (WebCore::signedPublicKeyAndChallengeString):
        (WebCore::getSupportedKeySizes):
        (WebCore::KURL::fileSystemPath):
        (WebCore::SharedBuffer::createWithContentsOfFile):
        (WTF::scheduleDispatchFunctionsOnMainThread):

2009-01-14  Darin Fisher  <darin@chromium.org>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=23323
        Upstream platform/text/chromium/

        * platform/text/chromium: Added.
        * platform/text/chromium/TextBreakIteratorInternalICUChromium.cpp: Added.
        (WebCore::currentTextBreakLocaleID):

2009-01-14  Steve Falkenburg  <sfalken@apple.com>

        Update copyright year in version resources.

        Reviewed by Adam Roben.

        * WebCore.vcproj/QTMovieWin.rc:

2009-01-14  Darin Fisher  <darin@chromium.org>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=23324
        Move platform/chromium/EditorChromium.cpp into editing/chromium/

        * editing/chromium: Added.
        * editing/chromium/EditorChromium.cpp: Copied from platform/chromium/EditorChromium.cpp.
        * platform/chromium/EditorChromium.cpp: Removed.

2009-01-14  Darin Fisher  <darin@chromium.org>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=23320
        Make it possible to use notImplemented outside of the WebCore namespace

        * platform/NotImplemented.h:

2009-01-14  Nigel Tao  <nigel.tao.gnome@gmail.com>

        Reviewed by Darin Adler.

        - fix https://bugs.webkit.org/show_bug.cgi?id=22476
        Check that the document's SecurityOrigin canLoadLocalResources,
        when pages try to put NSFilenamesPboardtype data on the clipboard,
        by calling event.dataTransfer.setData('URL', 'file:///foo/bar');

        Tests: http/tests/security/dataTransfer-set-data-file-url.html
               platform/mac/editing/pasteboard/dataTransfer-set-data-file-url.html

        * platform/mac/ClipboardMac.mm:
        (WebCore::ClipboardMac::setData):

2009-01-14  Dan Bernstein  <mitz@apple.com>

        Reviewed by John Sullivan.

        - update copyright

        * Info.plist:

2009-01-14  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=23316
        Application cache updating always fails with an assertion

        Test: http/tests/appcache/update-cache.html

        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::ApplicationCacheGroup::documentLoaderDestroyed): Correctly handle the case where
        multiple caches survive the last DocumentLoader destruction, preventing a crash in release
        builds.
        (WebCore::ApplicationCacheGroup::setNewestCache): Removed a bogus assertion.

2009-01-14  Alexey Proskuryakov  <ap@webkit.org>

        Release build fix.

        * loader/appcache/ApplicationCacheStorage.cpp:
        (WebCore::ApplicationCacheStorage::storeUpdatedType): Use ASSERT_UNUSED.

2009-01-13  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Anders Carlsson.

        Test: http/tests/appcache/xhr-foreign-resource.html

        https://bugs.webkit.org/show_bug.cgi?id=23256
        Implement application cache foreign entries

        * loader/DocumentLoader.cpp: (WebCore::DocumentLoader::shouldLoadResourceFromApplicationCache):
        Removed a misplaced check for foreign resources that prevented them from being loaded altogether.

        * loader/appcache/ApplicationCacheGroup.cpp: (WebCore::ApplicationCacheGroup::selectCache):
        If a document that was loaded from appcache should be associated with a different cache,
        mark the resource as foreign in the original cache and start over.

        * loader/appcache/ApplicationCacheResource.cpp: (WebCore::ApplicationCacheResource::addType):
        This function can now be called after a cache is stored, so it no longer asserts the opposite.

        * loader/appcache/ApplicationCacheStorage.cpp:
        (WebCore::ApplicationCacheStorage::cacheGroupForURL): Fix database pass to correctly ignore
        in-memory caches that were already rejected.
        (WebCore::ApplicationCacheStorage::fallbackCacheGroupForURL): Ditto.
        (WebCore::ApplicationCacheStorage::storeUpdatedType): Added a function that updates type of
        an already stored cached resource.

        * loader/appcache/ApplicationCacheStorage.h: Added storeUpdatedType().

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

        Fix the Tiger WebCore build after r39880.

        * editing/Editor.cpp:
        (WebCore::Editor::markBadGrammar):
        * loader/mac/DocumentLoaderMac.cpp:
        (WebCore::DocumentLoader::schedule):
        (WebCore::DocumentLoader::unschedule):
        * platform/mac/PasteboardMac.mm:
        (WebCore::Pasteboard::writeSelection):
        * platform/mac/WebCoreObjCExtras.mm:
        (WebCoreObjCFinalizeOnMainThread):
        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::schedule):
        (WebCore::ResourceHandle::unschedule):

2009-01-13  Darin Adler  <darin@apple.com>

        Reviewed by Sam Weinig.

        Bug 23102: turn on unused parameter warnings in WebCore
        https://bugs.webkit.org/show_bug.cgi?id=23102

        Last step: Turn on the warning and fix the last few instances.

        * Configurations/Base.xcconfig: Removed -Wno-unused-parameter from
        WARNING_CFLAGS_BASE, so the unused parameter warning will fire.

        * bindings/js/JSDOMWindowBase.cpp:
        (jsDOMWindowBaseMessageChannel): Separate the version for use when
        CHANNEL_MESSAGING is turned off, so we can omit the argument names.
        It would be better to not even have this property in that case,
        rather than having the function return undefined, but I don't know
        how to do that with the bindings script.

        * bindings/scripts/CodeGeneratorJS.pm: Leave out argument names in
        functions where they're not used (the SVG context, and the property
        name in the index getter). Use UNUSED_PARAM where arguments are
        sometimes not used.

        * bridge/runtime_object.cpp:
        (JSC::RuntimeObjectImp::put): Use UNUSED_PARAM for non-QT.

        * css/MediaQueryEvaluator.cpp:
        (WebCore::animationMediaFeatureEval): Omit argument names for style and frame.
        (WebCore::transitionMediaFeatureEval): Ditto.
        (WebCore::transform_2dMediaFeatureEval): Ditto.
        (WebCore::transform_3dMediaFeatureEval): Ditto.

        * dom/make_names.pl: Leave out the createdByParser property name in
        cases where it's not used.

        * inspector/JavaScriptDebugServer.cpp:
        (WebCore::JavaScriptDebugServer::setJavaScriptPaused): Separate the
        version for the Mac platform so we can omit the argument names.

        * loader/EmptyClients.h:
        (WebCore::EmptyChromeClient::contentsSizeChanged): Removed argument name.

        * loader/FrameLoaderClient.h:
        (WebCore::FrameLoaderClient::shouldUsePluginDocument): Commented out
        argument name.

        * loader/icon/IconFetcher.cpp:
        (WebCore::IconFetcher::didReceiveResponse): Use ASSERT_UNUSED.
        (WebCore::IconFetcher::didReceiveData): Ditto.
        (WebCore::IconFetcher::didFinishLoading): Ditto.
        (WebCore::IconFetcher::didFail): Ditto.

        * platform/KURL.cpp:
        (WebCore::assertProtocolIsGood): Separate out the NDEBUG version so
        we can omit the argument names.

        * platform/Timer.cpp:
        (WebCore::TimerHeapIterator::checkConsistency): Use ASSERT_UNUSED.

        * platform/graphics/GlyphBuffer.h:
        (WebCore::GlyphBuffer::offsetAt): Use UNUSED_PARAM in the non-WIN case.
        (WebCore::GlyphBuffer::add): Use UNUSED_PARAM in the non-CAIRO case.

        * platform/graphics/cg/ImageSourceCG.cpp:
        (WebCore::ImageSource::clear): Removed argument name.

        * rendering/SVGRenderSupport.cpp:
        (WebCore::prepareToRenderSVGContent): Use UNUSED_PARAM when SVG_FILTERS
        is not enabled.
        (WebCore::finishRenderSVGContent): Ditto.

2009-01-13  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Darin Adler.

        Implemented https://bugs.webkit.org/show_bug.cgi?id=23298
        Simple fix to convertToLength to catch style==null cases

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

2009-01-13  Eric Seidel  <eric@webkit.org>

        Reviewed by Mark Rowe.

        Speculative fix for an Uninitialized Memory Read (UMR)
        seen by purify in chormium's equivalent V8 file.

        * bindings/js/JSSVGPODTypeWrapper.h:
        (WebCore::PODTypeWrapperCacheInfo::PODTypeWrapperCacheInfo):

2009-01-13  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Eric Seidel.

        Land portions of platform/graphics/chromium.
        https://bugs.webkit.org/show_bug.cgi?id=23297

        * platform/graphics/chromium/FontCustomPlatformData.cpp: Added.
        (WebCore::FontCustomPlatformData::~FontCustomPlatformData):
        (WebCore::FontCustomPlatformData::fontPlatformData):
        (WebCore::EOTStream::EOTStream):
        (WebCore::EOTStream::read):
        (WebCore::readEmbedProc):
        (WebCore::createUniqueFontName):
        (WebCore::createFontCustomPlatformData):
        * platform/graphics/chromium/FontCustomPlatformData.h: Added.
        (WebCore::FontCustomPlatformData::FontCustomPlatformData):
        * platform/graphics/chromium/FontLinux.cpp: Added.
        (WebCore::Font::drawGlyphs):
        (WebCore::Font::drawComplexText):
        (WebCore::Font::floatWidthForComplexText):
        (WebCore::Font::offsetForPositionForComplexText):
        (WebCore::Font::selectionRectForComplexText):
        * platform/graphics/chromium/FontPlatformData.h: Added.

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

        Rubber-stamped by Oliver Hunt.

        Don't copy DOMStringList.idl into the framework bundle.

        * WebCore.xcodeproj/project.pbxproj:

2009-01-13  Christian Dywan  <christian@twotoasts.de>

        Build fix, StorageEvent is only defined if we have DOM_STORAGE

        * dom/Document.cpp:
        (WebCore::Document::createEvent): Conditionalize StorageEvent

2009-01-13  Darin Adler  <darin@apple.com>

        Reviewed by Adele Peterson.

        Bug 23277: space bar scrolls the page when typed in any text field
        https://bugs.webkit.org/show_bug.cgi?id=23277
        rdar://problem/6490249

        There's already a regression test for this, since bug 16421 was the same problem, but on
        Mac. The regression test is fast/events/space-scroll-event.html, so I won't write a new one.

        This bug doesn't affect Mac because the canEdit check in -[WebHTMLView insertText:] prevents
        a text input event from being generated at all. That difference may in itself be a bug, but
        the only symptom is that you get text input events in more cases on platforms other than Mac.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleTextInputEvent): Return whether the event's default was
        handled, not the result of the dispatchEvent function, which indicates only whether the
        default behavior was prevented, not if the default behavior did some insertion. This fix
        makes it so the keyboard event handler can detect that no space was inserted and know that
        the space bar keypress event can be treated as a scrolling command.
        (WebCore::EventHandler::defaultKeyboardEventHandler): Handle the keypress event, not the
        keydown event. Without the change above, making this change would have restored the old
        behavior, reintroducing bug 22913 where the space bar doesn't scroll at all on Windows.

2009-01-13  Darin Fisher  <darin@chromium.org>

        Reviewed by Eric Seidel.

        Landing portions of platform/chromium/, taken from here:
        http://src.chromium.org/viewvc/chrome/trunk/deps/third_party/WebKit/WebCore/platform/chromium/

        * platform/chromium/ChromiumBridge.h: Added.
        * platform/chromium/ChromiumDataObject.cpp: Added.
        (WebCore::ChromiumDataObject::clear):
        (WebCore::ChromiumDataObject::hasData):
        * platform/chromium/ChromiumDataObject.h: Added.
        (WebCore::ChromiumDataObject::create):
        (WebCore::ChromiumDataObject::ChromiumDataObject):
        * platform/chromium/ClipboardChromium.cpp: Added.
        (WebCore::):
        (WebCore::clipboardTypeFromMIMEType):
        (WebCore::ClipboardChromium::ClipboardChromium):
        (WebCore::ClipboardChromium::create):
        (WebCore::ClipboardChromium::clearData):
        (WebCore::ClipboardChromium::clearAllData):
        (WebCore::ClipboardChromium::getData):
        (WebCore::ClipboardChromium::setData):
        (WebCore::ClipboardChromium::types):
        (WebCore::ClipboardChromium::setDragImage):
        (WebCore::ClipboardChromium::setDragImageElement):
        (WebCore::ClipboardChromium::createDragImage):
        (WebCore::imageToMarkup):
        (WebCore::getCachedImage):
        (WebCore::writeImageToDataObject):
        (WebCore::ClipboardChromium::declareAndWriteDragImage):
        (WebCore::ClipboardChromium::writeURL):
        (WebCore::ClipboardChromium::writeRange):
        (WebCore::ClipboardChromium::hasData):
        * platform/chromium/ClipboardChromium.h: Added.
        (WebCore::ClipboardChromium::~ClipboardChromium):
        (WebCore::ClipboardChromium::dataObject):
        * platform/chromium/ClipboardUtilitiesChromium.cpp: Added.
        (WebCore::replaceNewlinesWithWindowsStyleNewlines):
        (WebCore::replaceNBSPWithSpace):
        (WebCore::urlToMarkup):
        * platform/chromium/ClipboardUtilitiesChromium.h: Added.
        * platform/chromium/ContextMenuChromium.cpp: Added.
        (WebCore::ContextMenu::ContextMenu):
        (WebCore::ContextMenu::~ContextMenu):
        (WebCore::ContextMenu::itemCount):
        (WebCore::ContextMenu::insertItem):
        (WebCore::ContextMenu::appendItem):
        (WebCore::ContextMenu::itemWithAction):
        (WebCore::ContextMenu::itemAtIndex):
        (WebCore::ContextMenu::setPlatformDescription):
        (WebCore::ContextMenu::platformDescription):
        (WebCore::ContextMenu::releasePlatformDescription):
        * platform/chromium/ContextMenuItemChromium.cpp: Added.
        (WebCore::ContextMenuItem::ContextMenuItem):
        (WebCore::ContextMenuItem::~ContextMenuItem):
        (WebCore::ContextMenuItem::releasePlatformDescription):
        (WebCore::ContextMenuItem::type):
        (WebCore::ContextMenuItem::action):
        (WebCore::ContextMenuItem::title):
        (WebCore::ContextMenuItem::platformSubMenu):
        (WebCore::ContextMenuItem::setType):
        (WebCore::ContextMenuItem::setAction):
        (WebCore::ContextMenuItem::setTitle):
        (WebCore::ContextMenuItem::setSubMenu):
        (WebCore::ContextMenuItem::setChecked):
        (WebCore::ContextMenuItem::setEnabled):
        (WebCore::ContextMenuItem::enabled):
        * platform/chromium/CursorChromium.cpp: Added.
        (WebCore::Cursor::Cursor):
        (WebCore::Cursor::~Cursor):
        (WebCore::Cursor::operator=):
        (WebCore::pointerCursor):
        (WebCore::crossCursor):
        (WebCore::handCursor):
        (WebCore::iBeamCursor):
        (WebCore::waitCursor):
        (WebCore::helpCursor):
        (WebCore::eastResizeCursor):
        (WebCore::northResizeCursor):
        (WebCore::northEastResizeCursor):
        (WebCore::northWestResizeCursor):
        (WebCore::southResizeCursor):
        (WebCore::southEastResizeCursor):
        (WebCore::southWestResizeCursor):
        (WebCore::westResizeCursor):
        (WebCore::northSouthResizeCursor):
        (WebCore::eastWestResizeCursor):
        (WebCore::northEastSouthWestResizeCursor):
        (WebCore::northWestSouthEastResizeCursor):
        (WebCore::columnResizeCursor):
        (WebCore::rowResizeCursor):
        (WebCore::middlePanningCursor):
        (WebCore::eastPanningCursor):
        (WebCore::northPanningCursor):
        (WebCore::northEastPanningCursor):
        (WebCore::northWestPanningCursor):
        (WebCore::southPanningCursor):
        (WebCore::southEastPanningCursor):
        (WebCore::southWestPanningCursor):
        (WebCore::westPanningCursor):
        (WebCore::moveCursor):
        (WebCore::verticalTextCursor):
        (WebCore::cellCursor):
        (WebCore::contextMenuCursor):
        (WebCore::aliasCursor):
        (WebCore::progressCursor):
        (WebCore::noDropCursor):
        (WebCore::copyCursor):
        (WebCore::noneCursor):
        (WebCore::notAllowedCursor):
        (WebCore::zoomInCursor):
        (WebCore::zoomOutCursor):
        (WebCore::grabCursor):
        (WebCore::grabbingCursor):
        * platform/chromium/DragDataChromium.cpp: Added.
        (WebCore::containsHTML):
        (WebCore::DragData::createClipboard):
        (WebCore::DragData::containsURL):
        (WebCore::DragData::asURL):
        (WebCore::DragData::containsFiles):
        (WebCore::DragData::asFilenames):
        (WebCore::DragData::containsPlainText):
        (WebCore::DragData::asPlainText):
        (WebCore::DragData::containsColor):
        (WebCore::DragData::canSmartReplace):
        (WebCore::DragData::containsCompatibleContent):
        (WebCore::DragData::asFragment):
        (WebCore::DragData::asColor):
        * platform/chromium/EditorChromium.cpp: Added.
        (WebCore::Editor::newGeneralClipboard):
        * platform/chromium/FileChooserChromium.cpp: Added.
        (WebCore::FileChooser::basenameForWidth):
        * platform/chromium/FileSystemChromium.cpp: Added.
        (WebCore::deleteFile):
        (WebCore::deleteEmptyDirectory):
        (WebCore::getFileSize):
        (WebCore::getFileModificationTime):
        (WebCore::directoryName):
        (WebCore::pathByAppendingComponent):
        (WebCore::makeAllDirectories):
        (WebCore::fileExists):
        * platform/chromium/FileSystemChromiumLinux.cpp: Added.
        (WebCore::pathGetFileName):
        * platform/chromium/FileSystemChromiumMac.mm: Added.
        (WebCore::pathGetFileName):
        * platform/chromium/FileSystemChromiumWin.cpp: Added.
        (WebCore::pathGetFileName):
        * platform/chromium/FramelessScrollView.cpp: Added.
        (WebCore::FramelessScrollView::~FramelessScrollView):
        (WebCore::FramelessScrollView::invalidateScrollbarRect):
        (WebCore::FramelessScrollView::isActive):
        (WebCore::FramelessScrollView::invalidateRect):
        (WebCore::FramelessScrollView::hostWindow):
        (WebCore::FramelessScrollView::windowClipRect):
        (WebCore::FramelessScrollView::paintContents):
        (WebCore::FramelessScrollView::contentsResized):
        (WebCore::FramelessScrollView::visibleContentsResized):
        * platform/chromium/FramelessScrollView.h: Added.
        (WebCore::FramelessScrollView::FramelessScrollView):
        (WebCore::FramelessScrollView::client):
        (WebCore::FramelessScrollView::setClient):
        * platform/chromium/FramelessScrollViewClient.h: Added.
        * platform/chromium/ScrollbarThemeChromiumWin.cpp: Added.
        (WebCore::):
        (WebCore::ScrollbarThemeChromium::scrollbarThickness):
        (WebCore::ScrollbarThemeChromium::invalidateOnMouseEnterExit):
        (WebCore::ScrollbarThemeChromium::paintTrackPiece):
        (WebCore::ScrollbarThemeChromium::paintButton):
        (WebCore::ScrollbarThemeChromium::paintThumb):
        (WebCore::ScrollbarThemeChromium::getThemeState):
        (WebCore::ScrollbarThemeChromium::getThemeArrowState):
        (WebCore::ScrollbarThemeChromium::getClassicThemeState):
        * platform/chromium/SoundChromiumPosix.cpp: Added.
        (WebCore::systemBeep):
        * platform/chromium/SoundChromiumWin.cpp: Added.
        (WebCore::systemBeep):
        * platform/chromium/SystemTimeChromium.cpp: Added.
        (WebCore::currentTime):
        (WebCore::userIdleTime):
        * platform/chromium/WidgetChromium.cpp: Added.
        (WebCore::Widget::Widget):
        (WebCore::Widget::~Widget):
        (WebCore::Widget::show):
        (WebCore::Widget::hide):
        (WebCore::Widget::setCursor):
        (WebCore::Widget::paint):
        (WebCore::Widget::setFocus):
        (WebCore::Widget::setIsSelected):
        (WebCore::Widget::frameRect):
        (WebCore::Widget::setFrameRect):
        * platform/chromium/WindowsVersion.cpp: Added.
        (WebCore::isVistaOrNewer):
        * platform/chromium/WindowsVersion.h: Added.

2009-01-13  Tor Arne Vestbø  <tavestbo@trolltech.com>

        Reviewed by Simon Hausmann.

        [Qt] Make sure media elements dispatch the 'loaded' event

        We assume that when Phonon goes into paused state that we have the
        complete media file. Once we do media loading ourselves we can
        distinguish between loading the first frame and the complete media.

        * platform/graphics/qt/MediaPlayerPrivatePhonon.cpp:
        (WebCore::MediaPlayerPrivate::updateStates):

2009-01-13  Tor Arne Vestbø  <tavestbo@trolltech.com>

        Reviewed by Simon Hausmann.

        [Qt] Add more verbose error output when loading NPAPI plugins

        * plugins/qt/PluginPackageQt.cpp:
        (WebCore::PluginPackage::load):

2009-01-13  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Tor Arne Vestbø.

        Fix crash in the Qt port when deleting a popup from within a
        JavaScript onchange handler.

        * platform/qt/QWebPopup.cpp:
        (WebCore::QWebPopup::QWebPopup): Perform the activation of the
        combobox item (i.e. the call to the JS handler) from a different
        call stack by using a queued connection.

2009-01-12  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Tor Arne Vestbø.

        [GIO] Make sure to untef the GFile and the GInputStream on destruction

        Make sure to call cleanupGioOperation from the ResourceHandleInternal
        d'tor. Change the signature of cleanupGioOperation so we can do the
        cleanup of GIO next to the cleanup of SOUP.

        This is happening with many tests from dom/html/level2/html e.g.
        LayoutTests/dom/html/level2/html/HTMLBodyElement07.html.

        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::ResourceHandleInternal::~ResourceHandleInternal):
        (WebCore::cleanupGioOperation):
        (WebCore::closeCallback):
        (WebCore::readCallback):
        (WebCore::openCallback):
        (WebCore::queryInfoCallback):

2009-01-12  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Tor Arne Vestbø.

        [GIO] Attach the ResourceHandle to the GObject and get it from the GObject

        https://bugs.webkit.org/show_bug.cgi?id=23116 discussed with Benjamin Otte

        Sometimes it is not possible to cancel a pending GIO operation and the
        callback might be invoked with a pointer to an already destructed
        ResourceHandle. To avoid this issue we will attach the ResourceHandle
        to the GObject* and in the callback attempt to get the ResourceHandle
        from the GObject*. If no ResourceHandle is attached we silently fail
        as the cleanup has been already done.

        This is happening with many tests from dom/html/level2/html e.g.
        LayoutTests/dom/html/level2/html/HTMLBodyElement07.html.

        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::cleanupGioOperation):
        (WebCore::closeCallback):
        (WebCore::readCallback):
        (WebCore::openCallback):
        (WebCore::queryInfoCallback):
        (WebCore::ResourceHandle::startGio):

2009-01-12  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Tor Arne Vestbø.

        [GIO] Invoke cleanupGioOperation before calling didFail to avoid crashes

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

        The ResourceHandle becomes invalid (e.g. got destructed) from within
        the invocation of didFail. Avoid this by cleaning up everything before
        calling didFail and simply return afterwards.

        This is happening with many tests from dom/html/level2/html e.g.
        LayoutTests/dom/html/level2/html/HTMLBodyElement07.html.

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

2009-01-13  Tor Arne Vestbø  <tavestbo@trolltech.com>

        Reviewed by Simon Hausmann.

        Change how themes adjust mediaControls.css to match html4/quicks.css

        Instead of providing the full style sheet, the themes provide extra
        overrides to the default style defined in UserAgentStyleSheetsData.

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

        Also, merge WebKitResources.qrc and WebCoreResources.qrc to speed up
        build time for the Qt port.

        * Resources/WebKitResources.qrc: Removed. Merged into WebCore.qrc
        * WebCore.pro:
        * WebCore.qrc: Added.
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::styleForElement):
        * css/qt/mediaControls-extras.css: Rename from html4-adjustments-qt.css
        * platform/qt/RenderThemeQt.cpp:
        (WebCore::RenderThemeQt::extraMediaControlsStyleSheet):
        * platform/qt/RenderThemeQt.h:
        * platform/qt/WebCoreResources.qrc: Removed.
        * platform/qt/html4-adjustments-qt.css: Rename to mediaControls-extras.css
        * rendering/RenderTheme.cpp:
        * rendering/RenderTheme.h:
        (WebCore::RenderTheme::extraMediaControlsStyleSheet):

2009-01-12  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Oliver Hunt.

        Deprecate JSValuePtr::getNumber() - two ways to get a number should  be enough.

        * bindings/js/JSSQLTransactionCustom.cpp:
        (WebCore::JSSQLTransaction::executeSql):
        * bindings/objc/WebScriptObject.mm:
        (+[WebScriptObject _convertValueToObjcValue:originRootObject:rootObject:]):

2009-01-12  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Dan Bernstein.

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

        I added a common getElapsedTime() function to AnimationBase which uses a combination of
        the techniques from KeyframeAnimation and AnimationBase to compute elapsedTime in all
        states.

        * page/animation/AnimationBase.cpp:
        (WebCore::AnimationBase::progress):
        (WebCore::AnimationBase::getElapsedTime):
        * page/animation/AnimationBase.h:
        * page/animation/KeyframeAnimation.cpp:
        (WebCore::KeyframeAnimation::animate):

2009-01-12  Robert Blaut  <webkit@blaut.biz>

        Reviewed by Darin Adler

        Fix for <https://bugs.webkit.org/show_bug.cgi?id=22096>
        Bug 22096: REGRESSION (r35879) scrolldelay is counted in seconds
        instead of miliseconds

        Test: fast/css/webkit-marquee-speed-unit-in-quirksmode.html

        * css/CSSParser.cpp:
        (WebCore::CSSParser::validUnit): treat unitless values in quirks mode
        as miliseconds instead of seconds.

2009-01-12  David Hyatt  <hyatt@apple.com>

        Apply the same idea as the previous fix but for matched declarations.

        Reviewed by Dan Bernstein

        * css/CSSStyleSelector.h:

2009-01-12  Brady Eidson  <beidson@apple.com>

        Reviewed by Darin Adler

        <rdar://problem/6468274> - Track Non-get requests in global history

        * WebCore.base.exp:

        * history/HistoryItem.cpp:
        (WebCore::HistoryItem::HistoryItem):
        * history/HistoryItem.h:
        (WebCore::HistoryItem::lastVisitWasHTTPNonGet):
        (WebCore::HistoryItem::setLastVisitWasHTTPNonGet):

2009-01-12  Kevin Ollivier  <kevino@theolliviers.com>

        !ENABLE(SVG_FONTS) build fix. Move defaultUnitsPerEm into a non-SVG header
        so it can be used by all builds.

        * platform/graphics/Font.h:
        * platform/graphics/SimpleFontData.cpp:
        * svg/SVGFontFaceElement.cpp:
        * svg/SVGFontFaceElement.h:

2009-01-12  Kevin Ollivier  <kevino@theolliviers.com>

        wx build typo fix.

        * platform/graphics/wx/TransformationMatrixWx.cpp:
        (WebCore::TransformationMatrix::TransformationMatrix):

2009-01-12  David Hyatt  <hyatt@apple.com>

        Make sure the set of matched rules has a reserved capacity of 32.  This prevents remalloc thrash as
        elements are matched, since the Vector is shrinking and growing over and over.  1% PLT speedup.

        Reviewed by Oliver Hunt

        * css/CSSStyleSelector.h:

2009-01-12  David Hyatt  <hyatt@apple.com>

        Optimize Element::attributeChanged to just check if accessibility is enabled up front before looking at the
        two accessibility-related attributes.  This avoids the rest of the code for all attributes on the PLT.
        Tiny speedup.

        Reviewed by Oliver Hunt

        * dom/Element.cpp:
        (WebCore::Element::attributeChanged):

2009-01-12  David Hyatt  <hyatt@apple.com>

        Optimize the retrieval of line height.  If the document is not using any first-line rules, just immediately
        default to the normal case.  Tiny speedup on PLT.

        Reviewed by Oliver Hunt

        * rendering/RenderFlow.cpp:
        (WebCore::RenderFlow::lineHeight):

2009-01-12  David Hyatt  <hyatt@apple.com>

        Fix 0.6% regression in PLT.  Make sure not to waste time updating NSScrollView's can blit on scroll state
        in the ScrollView constructor, since this is always going to be properly updated by FrameView anyway.

        Reviewed by Oliver Hunt

        * platform/ScrollView.cpp:
        (WebCore::ScrollView::ScrollView):

2009-01-12  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein

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

        In RenderBox::repaintLayerRectsForImage(), the repaint rect does not have
        to be computed in absolute coordintes. Instead, we compute a repaintRect
        relative to the RenderObject, which can repaint itself.

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::repaintLayerRectsForImage):

2009-01-12  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein

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

        Merge layoutDelta into LayoutState. This requires that we
        push even when layoutState is disabled, so that layoutDelta
        can still be stored.

        * rendering/LayoutState.cpp:
        (WebCore::LayoutState::LayoutState):
        * rendering/LayoutState.h:
        (WebCore::LayoutState::LayoutState):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::layoutBlock):
        (WebCore::RenderBlock::layoutBlockChildren):
        (WebCore::RenderBlock::layoutOnlyPositionedObjects):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::localToAbsolute):
        (WebCore::RenderBox::absoluteToLocal):
        (WebCore::RenderBox::computeAbsoluteRepaintRect):
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::layoutBlock):
        * rendering/RenderFlow.cpp:
        (WebCore::RenderFlow::absoluteClippedOverflowRect):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateLayerPositions):
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::computeAbsoluteRepaintRect):
        (WebCore::RenderTableCell::localToAbsolute):
        * rendering/RenderView.cpp:
        (WebCore::RenderView::pushLayoutState):
        * rendering/RenderView.h:
        (WebCore::RenderView::layoutDelta):
        (WebCore::RenderView::addLayoutDelta):
        (WebCore::RenderView::doingFullRepaint):
        (WebCore::RenderView::pushLayoutState):
        (WebCore::RenderView::popLayoutState):
        (WebCore::RenderView::layoutStateEnabled):
        (WebCore::RenderView::layoutState):
        (WebCore::LayoutStateMaintainer::LayoutStateMaintainer):
        (WebCore::LayoutStateMaintainer::push):
        (WebCore::LayoutStateMaintainer::pop):
        * rendering/bidi.cpp:
        (WebCore::RenderBlock::layoutInlineChildren):

2009-01-12  Julien Chaffraix  <jchaffraix@pleyo.com>

        Reviewed by Holger Freyther.

        [Qt] Build fix after turning the fontCache to a singleton
        https://bugs.webkit.org/show_bug.cgi?id=23253

        Add a stub implementation for WebCore::fontCache() and FontCache::FontCache().

        * platform/graphics/qt/FontCacheQt.cpp:
        (WebCore::fontCache):
        (WebCore::FontCache::FontCache):

2009-01-12  Eric Roman  <eroman@chromium.org>

        Reviewed by Darin Adler.

        Fix some bugs with Selection::appendTrailingWhitespace().
        https://bugs.webkit.org/show_bug.cgi?id=23232

        Test: editing/selection/doubleclick-whitespace-crash.html

        * editing/Selection.cpp:
        (WebCore::makeSearchRange):
        (WebCore::Selection::appendTrailingWhitespace):

2009-01-12  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Eric Seidel.

        Add the first pieces of platform/graphics/chromium
        https://bugs.webkit.org/show_bug.cgi?id=23257

        * platform/graphics/chromium/ColorChromium.cpp: Added.
        (WebCore::focusRingColor):
        * platform/graphics/chromium/FontCacheChromiumWin.cpp: Added.
        (WebCore::FontCache::platformInit):
        (WebCore::isStringASCII):
        (WebCore::LookupAltName):
        (WebCore::FontCodepage::):
        (WebCore::FontCodepage::if):
        (WebCore::createFontIndirectAndGetWinName):
        (WebCore::fontContainsCharacter):
        (WebCore::FontCache::getFontDataForCharacters):
        (WebCore::FontCache::alternateFamilyName):
        (WebCore::FontCache::getSimilarFontPlatformData):
        (WebCore::FontCache::getLastResortFallbackFont):
        (WebCore::toGDIFontWeight):
        (WebCore::FontCache::getGenericFontForScript):
        (WebCore::FillLogFont):
        (WebCore::FontCache::fontExists):
        (WebCore::TraitsInFamilyProcData::TraitsInFamilyProcData):
        (WebCore::traitsInFamilyEnumProc):
        (WebCore::FontCache::getTraitsInFamily):
        (WebCore::FontCache::createFontPlatformData):
        * platform/graphics/chromium/FontCacheLinux.cpp: Added.
        (WebCore::FontCache::platformInit):
        (WebCore::FontCache::getFontDataForCharacters):
        (WebCore::FontCache::alternateFamilyName):
        (WebCore::FontCache::getSimilarFontPlatformData):
        (WebCore::FontCache::getLastResortFallbackFont):
        (WebCore::FontCache::getTraitsInFamily):
        (WebCore::FontCache::createFontPlatformData):
        (WebCore::FontCache::getGenericFontForScript):
        * platform/graphics/chromium/FontChromiumWin.cpp: Added.
        (WebCore::windowsCanHandleTextDrawing):
        (WebCore::skiaDrawText):
        (WebCore::PaintSkiaText):
        (WebCore::Font::drawGlyphs):
        (WebCore::Font::selectionRectForComplexText):
        (WebCore::Font::drawComplexText):
        (WebCore::Font::floatWidthForComplexText):
        (WebCore::Font::offsetForPositionForComplexText):

2009-01-12  Darin Fisher  <darin@chromium.org>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=23254
        Upstream page/chromium/

        * page/chromium/AXObjectCacheChromium.cpp: Added.
        (WebCore::AXObjectCache::detachWrapper):
        (WebCore::AXObjectCache::attachWrapper):
        (WebCore::AXObjectCache::postNotification):
        (WebCore::AXObjectCache::postNotificationToElement):
        (WebCore::AXObjectCache::handleFocusedUIElementChanged):
        * page/chromium/AccessibilityObjectChromium.cpp:
        * page/chromium/AccessibilityObjectWrapper.h:
        * page/chromium/ChromeClientChromium.h: Added.
        * page/chromium/DragControllerChromium.cpp: Added.
        (WebCore::DragController::dragOperation):
        (WebCore::DragController::isCopyKeyDown):
        (WebCore::DragController::maxDragImageSize):
        (WebCore::DragController::cleanupAfterSystemDrag):
        * page/chromium/EventHandlerChromium.cpp: Added.
        (WebCore::EventHandler::passMousePressEventToSubframe):
        (WebCore::EventHandler::passMouseMoveEventToSubframe):
        (WebCore::EventHandler::passMouseReleaseEventToSubframe):
        (WebCore::EventHandler::passWheelEventToWidget):
        (WebCore::EventHandler::passWidgetMouseDownEventToWidget):
        (WebCore::EventHandler::passMouseDownEventToWidget):
        (WebCore::EventHandler::tabsToAllControls):
        (WebCore::EventHandler::eventActivatedView):
        (WebCore::EventHandler::createDraggingClipboard):
        (WebCore::EventHandler::focusDocumentView):
        (WebCore::EventHandler::accessKeyModifiers):
        * page/chromium/FrameChromium.cpp: Added.
        (WebCore::computePageRectsForFrame):
        (WebCore::Frame::dragImageForSelection):
        * page/chromium/FrameChromium.h: Added.

2009-01-12  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=22936
        Fix uninitialized memory read error, reported by Purify.

        * platform/graphics/SimpleFontData.cpp:
        (WebCore::SimpleFontData::SimpleFontData): Added initializer for
            m_unitsPerEm using cDefaultUnitsPerEm constant.
        * svg/SVGFontFaceElement.cpp:
        (WebCore::SVGFontFaceElement::unitsPerEm): Replaced literal value with
            the constant.
        * svg/SVGFontFaceElement.h: Added cDefaultUnitsPerEm constant.

2009-01-12  Adam Treat  <adam.treat@torchmobile.com>

        Reviewed by George Staikos.

        Do not set fixedLayoutSize for anything other than the mainframe during
        the transition as this is a page level state like the viewportSize.

        * loader/FrameLoaderClient.cpp:
        (WebCore::FrameLoaderClient::transitionToCommittedForNewPage):

2009-01-12  Julien Chaffraix  <jchaffraix@pleyo.com>

        Reviewed by Darin Adler.

        Bug 22861: Turn the FontCache into a singleton
        https://bugs.webkit.org/show_bug.cgi?id=22861

        - Added fontCache() to get the global FontCache.

        - Made all the methods in FontCache instance method.

        - Changed FontCache:: to fontCache()-> in WebCore.

        * WebCore.base.exp: Now export fontCache().
        * css/CSSFontFaceSource.cpp:
        (WebCore::CSSFontFaceSource::getFontData):
        * css/CSSFontSelector.cpp:
        (WebCore::CSSFontSelector::CSSFontSelector):
        (WebCore::CSSFontSelector::~CSSFontSelector):
        (WebCore::CSSFontSelector::addFontFaceRule):
        (WebCore::fontDataForGenericFamily):
        * platform/graphics/Font.cpp:
        (WebCore::Font::glyphDataForCharacter):
        * platform/graphics/FontCache.cpp:
        (WebCore::fontCache):
        (WebCore::FontCache::FontCache):
        * platform/graphics/FontCache.h:
        * platform/graphics/FontFallbackList.cpp:
        (WebCore::FontFallbackList::FontFallbackList):
        (WebCore::FontFallbackList::invalidate):
        (WebCore::FontFallbackList::releaseFontData):
        (WebCore::FontFallbackList::fontDataAt):
        (WebCore::FontFallbackList::fontDataForCharacters):
        (WebCore::FontFallbackList::setPlatformFont):
        * platform/graphics/SimpleFontData.cpp:
        (WebCore::SimpleFontData::~SimpleFontData):
        * platform/graphics/mac/FontCacheMac.mm:
        (WebCore::fontCacheATSNotificationCallback):
        * platform/graphics/mac/SimpleFontDataMac.mm:
        (WebCore::SimpleFontData::smallCapsFontData):
        * platform/graphics/win/FontCacheWin.cpp:
        (WebCore::getCJKCodePageMasks):
        * platform/graphics/win/SimpleFontDataWin.cpp:
        (WebCore::SimpleFontData::containsCharacters):

2009-01-11  Darin Adler  <darin@apple.com>

        Reviewed by Dan Bernstein.

        Bug 23247: createSVGPathSegCurvetoCubicSmoothAbs doesn't set y2 correctly
        https://bugs.webkit.org/show_bug.cgi?id=23247

        Also fix problems where partially parsed paths will still have an effect
        rather than failing parsing and being ignored.

        Test: dom/path-segments.html

        * platform/graphics/Path.h:
        (WebCore::Path::swap): Added.

        * svg/SVGParserUtilities.cpp:
        (WebCore::SVGPathParser::parseSVG): Removed unneeded special case for empty string.
        (WebCore::PathBuilder::build): Changed to not modify the path if parsing fails.
        (WebCore::SVGPathSegListBuilder::build): Changed to not modify the segment list if
        parsing fails.
        (WebCore::SVGPathSegListBuilder::svgMoveTo): Put the path element into the vector,
        not directly into the segment list.
        (WebCore::SVGPathSegListBuilder::svgLineTo): Ditto.
        (WebCore::SVGPathSegListBuilder::svgLineToHorizontal): Ditto.
        (WebCore::SVGPathSegListBuilder::svgLineToVertical): Ditto.
        (WebCore::SVGPathSegListBuilder::svgCurveToCubic): Ditto.
        (WebCore::SVGPathSegListBuilder::svgCurveToCubicSmooth): Ditto.
        (WebCore::SVGPathSegListBuilder::svgCurveToQuadratic): Ditto.
        (WebCore::SVGPathSegListBuilder::svgCurveToQuadraticSmooth): Ditto.
        (WebCore::SVGPathSegListBuilder::svgArcTo): Ditto.
        (WebCore::SVGPathSegListBuilder::svgClosePath): Ditto.

        * svg/SVGPathSegCurvetoCubicSmooth.h:
        (WebCore::SVGPathSegCurvetoCubicSmooth::SVGPathSegCurvetoCubicSmooth):
        Set y2 to y2, not to y.

2009-01-11  Darin Adler  <darin@apple.com>

        Reviewed by Oliver Hunt.

        Bug 23102: turn on unused parameter warnings in WebCore
        https://bugs.webkit.org/show_bug.cgi?id=23102

        Fourth step: Remove arguments entirely in the many cases where they are not
        needed at all. This step is a little less mechanical than the earlier ones.

        * dom/DOMImplementation.cpp:
        (WebCore::DOMImplementation::isXMLMIMEType): Pass TextCaseSensitive when creating
        the regular expression, since we already specify a-zA-Z in our expression.

        * dom/Document.cpp:
        (WebCore::Document::databaseThread): Don't pass in the document when creating
        a DatabaseThread.

        * dom/Element.cpp:
        (WebCore::Element::createRareData): Don't pass the element when creating an
        ElementRareData.
        (WebCore::Element::detach): Don't pass the element when calling resetComputedStyle.
        (WebCore::Element::recalcStyle): Ditto.

        * dom/ElementRareData.h: Remove the unused Element* from the constructor and
        the resetComputedStyle function.

        * dom/EventTargetNode.cpp:
        (WebCore::EventTargetNode::dispatchEvent): Don't pass ec to dispatchGenericEvent.
        (WebCore::EventTargetNode::dispatchGenericEvent): Remove the unused ec argument.
        (WebCore::EventTargetNode::dispatchWindowEvent): Don't pass ec to dispatchGenericEvent.
        * dom/EventTargetNode.h: Remove the ExceptionCode& argument form disaptchGenericEvent.

        * editing/ApplyStyleCommand.cpp: Remove the empty removeBlockStyle function.
        (WebCore::ApplyStyleCommand::pushDownTextDecorationStyleAroundNode): Remove the unused
        start and end arguments.
        (WebCore::ApplyStyleCommand::pushDownTextDecorationStyleAtBoundaries): Don't pass start
        and end to pushDownTextDecorationStyleAroundNode.

        * editing/ApplyStyleCommand.h: Remove the empty removeBlockStyle function. Removed the
        unused start and end arguments from pushDownTextDecorationStyleAroundNode.

        * editing/htmlediting.cpp: Removed include of unused RegularExpression.h header.

        * html/HTMLTokenizer.cpp:
        (WebCore::Token::addAttribute): Removed unused Document* argument.
        (WebCore::HTMLTokenizer::parseTag): Don't pass document to addAttribute.

        * html/HTMLTokenizer.h: Removed unused Document* argument to to addAttribute.

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::localStorage): Don't pass the frame to storageArea.

        * page/DragController.cpp:
        (WebCore::DragController::dragIsMove): Removed unused DragData argument.
        (WebCore::DragController::performDrag): Call concludeEditDrag rather than
        concludeDrag.
        (WebCore::DragController::tryDocumentDrag): Don't pass dragData to dragIsMove.
        (WebCore::DragController::concludeEditDrag): Renamed to make it clear this
        should only be called for edit drags. Removed the action mask argument. Also
        changed dragIsMove call sites to not pass dragData.

        * page/DragController.h: Updated for above changes and tweaked comment format.

        * page/Frame.cpp:
        (WebCore::createRegExpForLabels): Pass TextCaseSensitive and TextCaseInsensitive
        when creating regular expressions for clarity. Call match instead of search,
        since both do the same thing except for with negative start offsets, and none
        used here are negative.
        (WebCore::Frame::matchLabelsAgainstElement): Ditto.

        * page/Page.h: Moved TextCaseSensitivity from here to StringImpl.h in platform.

        * page/mac/AccessibilityObjectWrapper.mm:
        (AXAttributeStringSetHeadingLevel): Removed unused object argument.
        (AXAttributedStringAppendText): Ditto.
        (-[AccessibilityObjectWrapper doAXAttributedStringForTextMarkerRange:]): Ditto.

        * page/mac/FrameMac.mm:
        (WebCore::regExpForLabels): Pass TextCaseSensitive and TextCaseInsensitive
        when creating regular expressions for clarity. Call match instead of search,
        since both do the same thing except for with negative start offsets, and none
        used here are negative.
        (WebCore::Frame::matchLabelsAgainstElement): Ditto.

        * platform/graphics/SegmentedFontData.cpp:
        (WebCore::SegmentedFontData::containsCharacter): Added.
        (WebCore::SegmentedFontData::containsCharacters): Updated to check all characters
        instead of just the first one, using containsCharacter.

        * platform/graphics/SegmentedFontData.h: Made more members private.
        Added containsCharacter function member.

        * platform/mac/DragImageMac.mm:
        (WebCore::dragImageSize): Changed to use RetainPtr<NSImage> directly instead of
        DragImageRef for clarity, since this is platform-specific code.
        (WebCore::deleteDragImage): Ditto. Also remove argument name to get rid of unused
        variable warning.
        (WebCore::scaleDragImage): Ditto.
        (WebCore::dissolveDragImageToFraction): Ditto.
        (WebCore::createDragImageFromImage): Ditto.
        (WebCore::createDragImageIconForCachedImage): Ditto.

        * platform/mac/WebFontCache.mm:
        (acceptableChoice): Removed the unused weight-related arguments.
        (betterChoice): Ditto.
        (+[WebFontCache internalFontWithFamily:traits:weight:size:]): Ditto.

        * platform/posix/FileSystemPOSIX.cpp: Removed the implementation of listDirectory
        because we'd rather get a link error rather than a runtime error if we use it
        for anything, and right now it's not used.

        * platform/text/RegularExpression.cpp: Removed unused private data,
        including pattern, lastMatchString, lastMatchOffsets, lastMatchCount,
        and lastMatchPos. Made the RegularExpression::Private::regex be private
        and use an accessor function to get at it.
        (WebCore::RegularExpression::RegularExpression): Removed the const char* version
        of the constructor because it's not any more efficient. Changed the boolean
        constructor argument to use TextCaseSensitivity instead to make it less likely
        we'll use it wrong.
        (WebCore::RegularExpression::operator=): Since the only member is a single RefPtr,
        just use plain old assignment on it. The only reason we do this instead of using
        the compiler generated assignment operator is that we want the Private structure
        to be internal to the .cpp file.
        (WebCore::RegularExpression::match): Added a null check so we won't crash if
        we fail to compile the regular expression. Removed the code to handle multiple
        match strings, since that was unused.

        * platform/text/RegularExpression.h: Changed the case sensitivity argument to use
        TextCaseSensitivity and not have a default value. Removed the default constructor,
        and the pattern, match, and pos functions.

        * platform/text/StringImpl.h: Moved the TextCaseSensitivity enum here from
        Page.h, because we should eventually use it in all the places where we have
        an argument to control case sensitivity, starting with the functions in this
        class.

        * platform/text/mac/ShapeArabic.c:
        (shapeUnicode): Removed the unused options and pErrorCode arguments. Even though
        this is code borrowed from ICU, this seems like a simple safe change to make.
        (shapeArabic): Don't pass options or pErrorCode in to shapeUnicode.

        * rendering/RenderPath.cpp:
        (WebCore::RenderPath::RenderPath): Removed the unused style argument.
        Also removed the type check. The argument already has the correct type,
        so it's not helpful to upcast it and then check its type again, unless
        we have some reason to believe the type is not reliable. And we don't.

        * rendering/RenderPath.h: Removed the RenderStyle* argument to the
        constructor. Also removed the explicit declaration of the destructor.
        It's not helpful or needed.

        * rendering/RenderSVGInlineText.cpp:
        (WebCore::RenderSVGInlineText::localCaretRect): Updated the comment here to
        make it clear that just returning an empty rect is not a good implementation.
        Removed the argument names to get rid of the warning.

        * rendering/RenderTreeAsText.cpp:
        (WebCore::printBorderStyle): Removed the unused RenderObject argument.
        (WebCore::operator<<): Updated for the change to printBorderStyle function.

        * storage/DatabaseThread.cpp:
        (WebCore::DatabaseThread::DatabaseThread): Removed the unused document argument.
        * storage/DatabaseThread.h: Ditto.

        * storage/LocalStorage.cpp:
        (WebCore::LocalStorage::storageArea): Removed the unused Frame* argument.
        * storage/LocalStorage.h: Ditto.

        * svg/SVGElement.cpp:
        (WebCore::SVGElement::sendSVGLoadEventIfPossible): Don't pass an exception
        code location to dispatchGenericEvent.
        * svg/SVGElementInstance.cpp:
        (WebCore::SVGElementInstance::dispatchEvent): Ditto.

        * svg/SVGStyledTransformableElement.cpp: Removed include of unused RegularExpression.h.
        (WebCore::SVGStyledTransformableElement::createRenderer): Don't pass style in to
        the RenderPath constructor.

        * svg/SVGTransformable.cpp: Removed include of unused RegularExpression.h.

        * xml/XSLTProcessor.cpp:
        (WebCore::createFragmentFromSource): Removed unused sourceNode argument.
        (WebCore::XSLTProcessor::transformToFragment): Don't pass sourceNode to createFragmentFromSource.

2009-01-11  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=23165
        Disable application cache dynamic entries support.

        * bindings/js/JSDOMApplicationCacheCustom.cpp:
        * loader/appcache/DOMApplicationCache.idl:

2009-01-11  Adam Treat  <adam.treat@torchmobile.com>

        Reviewed by Darin Adler.

        Correct coordinate transformation for deeply nested frames on resizing.  This
        fixes https://bugs.webkit.org/show_bug.cgi?id=20766.

        Test: fast/frames/frame-deep-nested-resize.html

        * rendering/RenderFrameSet.cpp:
        (WebCore::RenderFrameSet::userResize):

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

        Tiger build fix.  The connection parameter is still used on Tiger in this method.

        * platform/network/mac/ResourceHandleMac.mm:
        (-[WebCoreResourceHandleAsDelegate connection:willCacheResponse:]):

2009-01-11  Darin Adler  <darin@apple.com>

        Reviewed by Dan Bernstein.

        Bug 23102: turn on unused parameter warnings in WebCore
        https://bugs.webkit.org/show_bug.cgi?id=23102

        Third step: Deal with cases of arguments used only in assertions.

        * dom/MessagePort.cpp:
        (WebCore::MessagePortCloseEventTask::performTask): Use ASSERT_UNUSED.
        * dom/Worker.cpp:
        (WebCore::Worker::notifyFinished): Ditto.
        * dom/XMLTokenizer.cpp:
        (WebCore::XMLTokenizer::notifyFinished): Ditto.
        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::ApplicationCacheGroup::failedLoadingMainResource): Ditto.
        * loader/appcache/ApplicationCacheStorage.cpp:
        (WebCore::ApplicationCacheStorage::verifySchemaVersion): Ditto.
        * loader/icon/IconLoader.cpp:
        (WebCore::IconLoader::didReceiveData): Since loader and size are only
        used when logging, use UNUSED_PARAM when logging is disabled.
        * platform/mac/WidgetMac.mm:
        (WebCore::Widget::beforeMouseDown): Use ASSERT_UNUSED.
        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::didCancelAuthenticationChallenge): Use the
        argument since it's probably a tiny bit more efficient and gets rid
        of the unused argument warning.
        * rendering/RenderListMarker.cpp:
        (WebCore::RenderListMarker::createInlineBox): Use ASSERT_UNUSED.
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::createInlineBox): Ditto.
        * rendering/RenderSVGInline.cpp:
        (WebCore::RenderSVGInline::createInlineBox): Use UNUSED_PARAM.
        I couldn't use ASSERT_UNUSED because it's a single assertion, but it's
        the only use for two different arguments.
        * rendering/RenderText.cpp:
        (WebCore::RenderText::createInlineBox): Use ASSERT_UNUSED.
        * rendering/RenderThemeMac.mm:
        (-[WebCoreRenderThemeNotificationObserver systemColorsDidChange:]): Ditto.

2009-01-11  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Oliver Hunt

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

        Fix CanvasRenderingContext2D::transform to do a pre-multiply,
        rather than a post-multiply into m_transform. This bug did not affect
        drawing, but did cause m_transform to be incorrect, which impacted
        willDraw(), and isPointInPath.

        Test: fast/canvas/canvas-incremental-repaint-2.html

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

2009-01-11  Darin Adler  <darin@apple.com>

        Reviewed by Dan Bernstein.

        Bug 23102: turn on unused parameter warnings in WebCore
        https://bugs.webkit.org/show_bug.cgi?id=23102

        Second step: Fix simple Objective-C cases where we need to use UNUSED_PARAM.
        That's because you can't omit an argument name in Objective-C methods.

        * bindings/objc/DOMObject.mm:
        (-[DOMObject copyWithZone:]): Use UNUSED_PARAM. Also rename argument to include
        the word "unused" so we don't just start using it without removing the macro.
        * bindings/objc/WebScriptObject.mm:
        (+[WebUndefined allocWithZone:]): Ditto.
        (-[WebUndefined initWithCoder:]): Ditto.
        (-[WebUndefined encodeWithCoder:]): Ditto.
        (-[WebUndefined copyWithZone:]): Ditto.
        * page/mac/WebDashboardRegion.m:
        (-[WebDashboardRegion copyWithZone:]): Ditto.
        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::mainThreadSetNeedsDisplay): Omit argument name.
        (-[WebCoreMovieObserver loadStateChanged:]): Use UNUSED_PARAM as above.
        (-[WebCoreMovieObserver rateChanged:]): Ditto.
        (-[WebCoreMovieObserver sizeChanged:]): Ditto.
        (-[WebCoreMovieObserver timeChanged:]): Ditto.
        (-[WebCoreMovieObserver didEnd:]): Ditto.
        (-[WebCoreMovieObserver newImageAvailable:]): Ditto.
        * platform/mac/ScrollbarThemeMac.mm:
        (+[ScrollbarPrefsObserver appearancePrefsChanged:]): Ditto.
        (+[ScrollbarPrefsObserver behaviorPrefsChanged:]): Ditto.
        * platform/mac/SharedTimerMac.mm:
        (-[WebCorePowerNotifier didWake:]): Ditto.
        * platform/mac/WebCoreKeyGenerator.m:
        (-[WebCoreKeyGenerator signedPublicKeyAndChallengeStringWithStrengthIndex:challenge:pageURL:]): Ditto.
        * platform/network/mac/ResourceHandleMac.mm:
        (-[WebCoreResourceHandleAsDelegate connection:willSendRequest:redirectResponse:]): Ditto.
        (-[WebCoreResourceHandleAsDelegate connectionShouldUseCredentialStorage:]): Ditto.
        (-[WebCoreResourceHandleAsDelegate connection:didReceiveAuthenticationChallenge:]): Ditto.
        (-[WebCoreResourceHandleAsDelegate connection:didCancelAuthenticationChallenge:]): Ditto.
        (-[WebCoreResourceHandleAsDelegate connection:didReceiveResponse:]): Ditto.
        (-[WebCoreResourceHandleAsDelegate connection:didReceiveData:lengthReceived:]): Ditto.
        (-[WebCoreResourceHandleAsDelegate connection:willStopBufferingData:]): Ditto.
        (-[WebCoreResourceHandleAsDelegate connection:didSendBodyData:totalBytesWritten:totalBytesExpectedToWrite:]): Ditto.
        (-[WebCoreResourceHandleAsDelegate connectionDidFinishLoading:]): Ditto.
        (-[WebCoreResourceHandleAsDelegate connection:didFailWithError:]): Ditto.
        (-[WebCoreResourceHandleAsDelegate connection:willCacheResponse:]): Ditto.
        (-[WebCoreSynchronousLoader connection:willSendRequest:redirectResponse:]): Ditto.
        (-[WebCoreSynchronousLoader connection:didReceiveAuthenticationChallenge:]): Ditto.
        (-[WebCoreSynchronousLoader connection:didReceiveResponse:]): Ditto.
        (-[WebCoreSynchronousLoader connection:didReceiveData:]): Ditto.
        (-[WebCoreSynchronousLoader connectionDidFinishLoading:]): Ditto.
        (-[WebCoreSynchronousLoader connection:didFailWithError:]): Ditto.

2009-01-11  Dirk Schulze  <krit@webkit.org>

        Reviewed by Darin Adler.

        Move platform dependent strokeContains back to RenderPath, Path and delete
        unneeded Code in svg.

        RenderPath clean-up for strokeContains
        [https://bugs.webkit.org/show_bug.cgi?id=22957]

        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/Path.h:
        * platform/graphics/cairo/PathCairo.cpp:
        (WebCore::Path::strokeContains):
        * platform/graphics/cg/PathCG.cpp:
        (WebCore::Path::strokeContains):
        * platform/graphics/qt/PathQt.cpp:
        (WebCore::Path::strokeContains):
        * rendering/RenderPath.cpp:
        (WebCore::RenderPath::strokeContains):
        * svg/graphics/cairo/RenderPathCairo.cpp: Removed.
        * svg/graphics/cg/CgSupport.cpp: Removed.
        * svg/graphics/cg/CgSupport.h: Removed.
        * svg/graphics/cg/RenderPathCg.cpp: Removed.
        * svg/graphics/cg/SVGPaintServerPatternCg.cpp:
        * svg/graphics/cg/SVGResourceMaskerCg.mm:
        * svg/graphics/qt/RenderPathQt.cpp: Removed.

2009-01-11  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Anders Carlsson.

        [GTK] make distcheck complains that distclean is not deleting JSWorkerContextBase.lut.h

        make distcheck pass by adding JSWorkerContextBase.lut.h to the
        CLEANFILES that will be cleaned on a make distclean.

        * GNUmakefile.am:

2009-01-11  Zalan Bujtas  <zbujtas@gmail.com>

        Reviewed by Alexey Proskuryakov.

        https://bugs.webkit.org/show_bug.cgi?id=23235
        Build fix for non-VIDEO builds.

        * rendering/RenderTheme.cpp:
        * rendering/RenderTheme.h:

2009-01-11  Gabriella Toth  <gtoth@inf.u-szeged.hu>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=19287
        return value of malloc() is not checked in npruntime.cpp

        Checking whether malloc can allocate memory or not. If it can't, CRASH macro is invoked
        (like in fastMalloc).

        * bridge/npruntime.cpp:
        (_NPN_GetStringIdentifier):
        (_NPN_GetIntIdentifier):
        (NPN_InitializeVariantWithStringCopy):
        (_NPN_CreateObject):

2009-01-11  Glenn Wilson  <gwilson@google.com>

        Reviewed by Darin Adler.

        Changes radio buttons so they can be 'checked' even if they
        don't have the name attribute set.

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

        Test: fast/html/select-unnamed-radio.html

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

2009-01-11  Bernhard Rosenkraenzer <bero@arklinux.ch>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=22205
        Fix compatibility with bison 2.4, partially based on older patch by
        Priit Laes <amd@store20.com>

        * WebCore/css/CSSGrammar.y: Made compatible with bison 2.4

2009-01-11  Jeremy Moskovich  <jeremy@chromium.org>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=16001
        Incorrect assumption that selection is always contiguous LTR.

        Test: editing/selection/extend-selection-bidi.html

        * rendering/RootInlineBox.cpp: (WebCore::RootInlineBox::fillLineSelectionGap):
        Make this function  not assume a contiguous visual LTR selection range.

2009-01-11  Dmitry Titov  <dimich@chromium.org>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=23207
        Moved currentTime() to from WebCore to WTF.

        Most of these files only have a different header file included.
        Various build files reflect removal of SystemTimeGtk, Wx, Qt and Linux
        which were removed since they only implemented currentTime().

        * ForwardingHeaders/wtf/CurrentTime.h: Added.
        * GNUmakefile.am:
        * WebCore.base.exp:
        * WebCore.pro:
        * dom/ContainerNode.cpp:
        * dom/Document.cpp:
        * dom/Event.cpp:
        * history/CachedPage.cpp:
        * history/PageCache.cpp:
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::load):
        (WebCore::HTMLMediaElement::progressEventTimerFired):
        * html/HTMLTokenizer.cpp:
        * html/PreloadScanner.cpp:
        * inspector/InspectorController.cpp:
        * loader/Cache.cpp:
        (WebCore::Cache::pruneLiveResources):
        * loader/CachedImage.cpp:
        * loader/CachedResource.cpp:
        * loader/FrameLoader.cpp:
        * loader/ProgressTracker.cpp:
        * loader/icon/IconDatabase.cpp:
        * loader/icon/IconRecord.cpp:
        * page/DragController.cpp:
        * page/Frame.cpp:
        * page/FrameView.cpp:
        * page/animation/AnimationBase.cpp:
        * page/animation/AnimationController.cpp:
        * page/animation/KeyframeAnimation.cpp:
        * platform/SystemTime.h:
        * platform/Timer.cpp:
        * platform/graphics/BitmapImage.cpp:
        * platform/gtk/MouseEventGtk.cpp:
        * platform/gtk/SharedTimerGtk.cpp:
        * platform/gtk/SystemTimeGtk.cpp: Removed.
        * platform/gtk/SystemTimeLinux.cpp: Removed.
        * platform/mac/SystemTimeMac.cpp:
        * platform/qt/PlatformMouseEventQt.cpp:
        (WebCore::PlatformMouseEvent::PlatformMouseEvent):
        * platform/qt/SharedTimerQt.cpp:
        * platform/qt/SharedTimerQt.h:
        * platform/qt/SystemTimeQt.cpp: Removed.
        * platform/win/SharedTimerWin.cpp:
        * platform/win/SystemTimeWin.cpp:
        * platform/wx/MouseEventWx.cpp:
        (WebCore::PlatformMouseEvent::PlatformMouseEvent):
        * platform/wx/SharedTimerWx.cpp:
        * platform/wx/SystemTimeWx.cpp: Removed.
        * rendering/RenderImage.cpp:
        * rendering/RenderMedia.cpp:
        * svg/animation/SMILTimeContainer.cpp:
        * webcore-wx.bkl:
        * xml/XMLHttpRequest.cpp:

2009-01-11  Dmitry Titov  <dimich@chromium.org>

        Reviewed by Darin Adler.

        Make ScheduledAction (Timeout callback) able to execute the callback under WorkerContext.
        Part of 'Timers in Workers' work.
        https://bugs.webkit.org/show_bug.cgi?id=23223

        * bindings/js/ScheduledAction.cpp:
        (WebCore::ScheduledAction::execute): new method that takes WorkerContext.
        (WebCore::ScheduledAction::executeFunctionInContext): Executes a JSFunction in proper context with 'this' object.
        * bindings/js/ScheduledAction.h:

2009-01-10  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=23210
        Make it easier for ports to define custom UI for media controls

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::styleForElement): call theme()->styleSheetForMediaControls to
        get the media controller style sheet

        * rendering/MediaControlElements.cpp:
        (WebCore::MediaControlInputElement::hitTest): Added
        * rendering/MediaControlElements.h: Updated

        * rendering/RenderMedia.cpp:
        (WebCore::RenderMedia::forwardEvent): Call element hitTest() method instead of local function
        so control elements don't necessarily have to be rectangular

        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::styleSheetForMediaControls):  Added
        (WebCore::RenderTheme::hitTestMediaControlPart):  Added
        * rendering/RenderTheme.h: Updated

2009-01-10  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein

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

        We need to disable LayoutState when an object has transforms,
        because LayoutState is not transform-aware and therefore
        repaint rects can be computed incorrectly.

        Test: fast/repaint/transform-disable-layoutstate.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::layoutBlock):
        (WebCore::RenderBlock::layoutOnlyPositionedObjects):
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::layoutBlock):

2009-01-09  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Simon Hausmann.

        [QT] Make SharedTimer use QBasicTimer

        Kill the SharedTimerQt.h and the usage of signal and slots
        by using QBasicTimer.

        * WebCore.pro:
        * platform/qt/SharedTimerQt.cpp:
        (WebCore::SharedTimerQt::SharedTimerQt):
        (WebCore::SharedTimerQt::inst):
        (WebCore::SharedTimerQt::start):
        (WebCore::SharedTimerQt::stop):
        (WebCore::SharedTimerQt::timerEvent):
        (WebCore::setSharedTimerFiredFunction):
        (WebCore::setSharedTimerFireTime):
        (WebCore::stopSharedTimer):
        * platform/qt/SharedTimerQt.h: Removed.

2009-01-09  Adam Bergkvist <adam.bergkvist@ericsson.com>

        Reviewed by Holger Freyther.

        [CURL] POST without body becomes GET
        https://bugs.webkit.org/show_bug.cgi?id=23182

        Make sure that method is always set to POST even when the body is
        empty. Cleaned up httpBody null check.

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

2009-01-09  Adam Treat  <adam.treat@torchmobile.com>

        Build fix.

        * plugins/PluginView.cpp:

2009-01-09  Adele Peterson  <adele@apple.com>

        Reviewed by Darin Adler.

        Fix infinite recursion in clientPaddingLeft and clientPaddingRight.  This changes the code back to
        how it was before RenderTextControlSingleLine was split out from RenderTextControl.

        No test added since this code is only exercised when trying to place a search field's recent searches popup menu.

        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::clientPaddingLeft):
        (WebCore::RenderTextControlSingleLine::clientPaddingRight):

2009-01-09  Darin Adler  <darin@apple.com>

        Reviewed by Jon Honeycutt.

        Bug 22913: REGRESSION: Space bar doesn't scroll on windows
        https://bugs.webkit.org/show_bug.cgi?id=22913
        rdar://problem/6479834

        * page/EventHandler.cpp:
        (WebCore::EventHandler::defaultKeyboardEventHandler): Added code to call
        defaultSpaceEventHandler.
        (WebCore::EventHandler::defaultSpaceEventHandler): Added. Scrolls down or up based
        on the shift key.
        * page/EventHandler.h: Added defaultSpaceEventHandler.

        * platform/mac/ScrollViewMac.mm:
        (WebCore::ScrollView::platformScroll): Return false, because this function does
        not scroll. In an earlier version of this patch, I used this to prevent the
        patch from affecting the Mac, but I decided to use #if instead.

2009-01-09  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Oliver Hunt.

        Delete references to JSValue, removing this class.

        * bindings/js/JSWorkerContextCustom.cpp:
        (WebCore::JSWorkerContext::self):
        * bindings/js/ScriptCallStack.h:

2009-01-09  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Eric Seidel.

        Add svg/graphics/skia files.
        https://bugs.webkit.org/show_bug.cgi?id=23147

        * svg/graphics/skia/RenderPathSkia.cpp: Added.
        (WebCore::RenderPath::strokeContains):
        * svg/graphics/skia/SVGPaintServerPatternSkia.cpp: Added.
        (WebCore::SVGPaintServerPattern::setup):
        * svg/graphics/skia/SVGPaintServerSkia.cpp: Added.
        (WebCore::SVGPaintServer::draw):
        (WebCore::SVGPaintServer::teardown):
        (WebCore::SVGPaintServer::renderPath):
        * svg/graphics/skia/SVGResourceFilterSkia.cpp: Added.
        (WebCore::SVGResourceFilter::createPlatformData):
        (WebCore::SVGResourceFilter::prepareFilter):
        (WebCore::SVGResourceFilter::applyFilter):
        * svg/graphics/skia/SVGResourceMaskerSkia.cpp: Added.
        (WebCore::SVGResourceMasker::applyMask):

2009-01-09  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Eric Seidel.

        Add SkiaFontWin to platform/graphics/chromium
        https://bugs.webkit.org/show_bug.cgi?id=23215

        * platform/graphics/skia/SkiaFontWin.cpp: Added.
        (WebCore::CachedOutlineKey::CachedOutlineKey):
        (WebCore::operator==):
        (WebCore::CachedOutlineKeyHash::hash):
        (WebCore::CachedOutlineKeyHash::equal):
        (WebCore::FIXEDToSkScalar):
        (WebCore::deleteOutline):
        (WebCore::addPolyCurveToPath):
        (WebCore::getPathForGlyph):
        (WebCore::SkiaWinOutlineCache::lookupOrCreatePathForGlyph):
        (WebCore::SkiaWinOutlineCache::removePathsForFont):
        * platform/graphics/skia/SkiaFontWin.h: Added.

2009-01-09  Anders Carlsson  <andersca@apple.com>

        Fix build.

        * WebCore.LP64.exp:

2009-01-09  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Eric Seidel.

        Add PlatformContextSkia and PlatformGraphics.h to platform/graphics/skia
        https://bugs.webkit.org/show_bug.cgi?id=23215

        * platform/graphics/skia/PlatformContextSkia.cpp: Added.
        (PlatformContextSkia::State::State):
        (PlatformContextSkia::State::~State):
        (PlatformContextSkia::State::applyAlpha):
        (PlatformContextSkia::PlatformContextSkia):
        (PlatformContextSkia::~PlatformContextSkia):
        (PlatformContextSkia::setCanvas):
        (PlatformContextSkia::save):
        (PlatformContextSkia::restore):
        (PlatformContextSkia::drawRect):
        (PlatformContextSkia::setupPaintCommon):
        (PlatformContextSkia::setupPaintForFilling):
        (PlatformContextSkia::setupPaintForStroking):
        (PlatformContextSkia::setDrawLooper):
        (PlatformContextSkia::setMiterLimit):
        (PlatformContextSkia::setAlpha):
        (PlatformContextSkia::setLineCap):
        (PlatformContextSkia::setLineJoin):
        (PlatformContextSkia::setPorterDuffMode):
        (PlatformContextSkia::setFillColor):
        (PlatformContextSkia::getDrawLooper):
        (PlatformContextSkia::getStrokeStyle):
        (PlatformContextSkia::setStrokeStyle):
        (PlatformContextSkia::setStrokeColor):
        (PlatformContextSkia::getStrokeThickness):
        (PlatformContextSkia::setStrokeThickness):
        (PlatformContextSkia::getTextDrawingMode):
        (PlatformContextSkia::setTextDrawingMode):
        (PlatformContextSkia::setUseAntialiasing):
        (PlatformContextSkia::fillColor):
        (PlatformContextSkia::beginPath):
        (PlatformContextSkia::addPath):
        (PlatformContextSkia::setFillRule):
        (PlatformContextSkia::setGradient):
        (PlatformContextSkia::setPattern):
        (PlatformContextSkia::setDashPathEffect):
        (PlatformContextSkia::paintSkPaint):
        (PlatformContextSkia::bitmap):
        (PlatformContextSkia::isPrinting):
        * platform/graphics/skia/PlatformContextSkia.h: Added.
        (PlatformContextSkia::currentPath):
        (PlatformContextSkia::canvas):
        (PlatformContextSkia::gdk_skia):
        * platform/graphics/skia/PlatformGraphics.h: Added.

2009-01-09  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Eric Seidel.

        Add TransformationMatrixSkia to platform/graphics/skia
        https://bugs.webkit.org/show_bug.cgi?id=23215

        * platform/graphics/skia/TransformationMatrixSkia.cpp: Added.
        (WebCore::TransformationMatrix::TransformationMatrix):
        (WebCore::TransformationMatrix::setMatrix):
        (WebCore::TransformationMatrix::map):
        (WebCore::TransformationMatrix::mapRect):
        (WebCore::TransformationMatrix::isIdentity):
        (WebCore::TransformationMatrix::reset):
        (WebCore::TransformationMatrix::scale):
        (WebCore::TransformationMatrix::rotate):
        (WebCore::TransformationMatrix::translate):
        (WebCore::TransformationMatrix::shear):
        (WebCore::TransformationMatrix::det):
        (WebCore::TransformationMatrix::inverse):
        (WebCore::TransformationMatrix::operator SkMatrix):
        (WebCore::TransformationMatrix::operator==):
        (WebCore::TransformationMatrix::operator*=):
        (WebCore::TransformationMatrix::operator*):
        (WebCore::TransformationMatrix::a):
        (WebCore::TransformationMatrix::setA):
        (WebCore::TransformationMatrix::b):
        (WebCore::TransformationMatrix::setB):
        (WebCore::TransformationMatrix::c):
        (WebCore::TransformationMatrix::setC):
        (WebCore::TransformationMatrix::d):
        (WebCore::TransformationMatrix::setD):
        (WebCore::TransformationMatrix::e):
        (WebCore::TransformationMatrix::setE):
        (WebCore::TransformationMatrix::f):
        (WebCore::TransformationMatrix::setF):

2009-01-09  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin Adler.

        <rdar://problem/6477502> Repro crash reloading page using HTML5 AppCache on Windows

        Test: http/tests/appcache/reload.html

        On Windows, reloading resulted in the following sequence of events:
        1) A new main resource loader was created and associated with the cache. Its document loader
        was not associated with the cache yet.
        2) The old document loader was destroyed, and since it was the last one, ApplicationCacheGroup
        teardown started, with newestCache being zeroed out.
        3) The new document loader was associated with the cache group, and cache update started.
        4) Since newestCache was null, this caused many problems.

        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::ApplicationCacheGroup::documentLoaderDestroyed): Improve comments and assertions,
        no functional changes.
        (WebCore::ApplicationCacheGroup::associateDocumentLoaderWithCache): Revive the cache group
        if its newest cache pointer is already saved for teardown. Note that the cache pointer
        validity is ensured by MainResourceLoader that holds a reference to it.

2009-01-09  Darin Fisher  <darin@chromium.org>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=23214
        Upstream platform/network/chromium/

        * platform/network/chromium/AuthenticationChallenge.h: Added.
        (WebCore::AuthenticationChallenge::AuthenticationChallenge):
        (WebCore::AuthenticationChallenge::sourceHandle):
        * platform/network/chromium/AuthenticationChallengeChromium.cpp: Added.
        (WebCore::AuthenticationChallenge::platformCompare):
        * platform/network/chromium/CookieJarChromium.cpp: Added.
        (WebCore::setCookies):
        (WebCore::cookies):
        (WebCore::cookiesEnabled):
        * platform/network/chromium/DNSChromium.cpp: Added.
        (WebCore::prefetchDNS):
        * platform/network/chromium/NetworkStateNotifierChromium.cpp: Added.
        (WebCore::NetworkStateNotifier::updateState):
        (WebCore::NetworkStateNotifier::NetworkStateNotifier):
        * platform/network/chromium/NetworkStateNotifierPrivate.h: Added.
        * platform/network/chromium/ResourceError.h: Added.
        (WebCore::ResourceError::ResourceError):
        * platform/network/chromium/ResourceRequest.h: Added.
        (WebCore::ResourceRequest::):
        (WebCore::ResourceRequest::ResourceRequest):
        (WebCore::ResourceRequest::frame):
        (WebCore::ResourceRequest::setFrame):
        (WebCore::ResourceRequest::setTargetType):
        (WebCore::ResourceRequest::targetType):
        (WebCore::ResourceRequest::originPid):
        (WebCore::ResourceRequest::setOriginPid):
        (WebCore::ResourceRequest::securityInfo):
        (WebCore::ResourceRequest::setSecurityInfo):
        (WebCore::ResourceRequest::doUpdatePlatformRequest):
        (WebCore::ResourceRequest::doUpdateResourceRequest):
        * platform/network/chromium/ResourceResponse.h:
        (WebCore::ResourceResponse::ResourceResponse):
        (WebCore::ResourceResponse::getSecurityInfo):
        (WebCore::ResourceResponse::setSecurityInfo):
        (WebCore::ResourceResponse::isContentFiltered):
        (WebCore::ResourceResponse::setIsContentFiltered):
        (WebCore::ResourceResponse::doUpdateResourceResponse):

2009-01-09  Peter Kasting  <pkasting@google.com>

        Reviewed by David Hyatt.

        https://bugs.webkit.org/show_bug.cgi?id=22995
        Fix flaky image animation by resetting the metadata for a frame when
        we get new data for that frame.  This fixes animations that halted
        when the next frame of the animation wasn't complete by the time the
        current frame's duration expired.

        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::destroyDecodedData):
        (WebCore::BitmapImage::dataChanged):
        * platform/graphics/BitmapImage.h:
        (WebCore::FrameData::~FrameData):
        * platform/graphics/cairo/ImageCairo.cpp:
        (WebCore::FrameData::clear):
        * platform/graphics/cg/ImageCG.cpp:
        (WebCore::FrameData::clear):
        * platform/graphics/qt/ImageQt.cpp:
        (WebCore::FrameData::clear):
        * platform/graphics/wx/ImageWx.cpp:
        (WebCore::FrameData::clear):

2009-01-09  Simon Hausmann  <simon.hausmann@nokia.com>

        Rubber-stamped by Tor Arne Vestbø.

        Swap the .h and the .cpp output in the Qt build for the
        UserAgentStyleSheetData files, to put the definition in the .cpp file
        and the declaration in the header file.

        * WebCore.pro:

2009-01-09  David Levin  <levin@chromium.org>

        Reviewed by Oliver Hunt.

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

        Added forwarding header.

        * ForwardingHeaders/wtf/PtrAndFlags.h: Added.

2009-01-09  Tor Arne Vestbø  <tavestbo@trolltech.com>

        Reviewed by Simon Hausmann.

        Prevent qmake from generating duplicate rules for embedded stylesheets

        The STYLESHEETS_EMBED variable used to contain only one file name, but
        now that it is a list of files we need to change it to be a dependency
        for the stylesheet generator instead of the input.

        * WebCore.pro:

2009-01-09  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Tor Arne Vestbø.

        Fix qmake warning about missing test function, a contains() call was
        missing.

        * WebCore.pro:

2009-01-09  Simon Hausmann  <simon.hausmann@nokia.com>

        Rubber-stamped by Tor Arne Vestbø.

        Add the Qt API headers to HEADERS, too, for improved completion in IDEs.

        * WebCore.pro:

2009-01-09  David Levin  <levin@chromium.org>

        Reviewed by Alexey Proskuryakov.

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

        Fix deref's of string happening on two different threads.

        No observable change in behavior, so no test.  However, there are asserts
        being added for https://bugs.webkit.org/show_bug.cgi?id=23175 which
        will detect this issue while running the normal worker tests.

        * dom/WorkerThread.cpp:
        (WebCore::WorkerThreadStartupData::create):
        (WebCore::WorkerThreadStartupData::WorkerThreadStartupData):
        (WebCore::WorkerThread::WorkerThread):
        (WebCore::WorkerThread::workerThread):
        * dom/WorkerThread.h:

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

        Reviewed by Adam Roben.

        - use native glyph support in Core Graphics when available

        * platform/graphics/win/FontCGWin.cpp:
        (WebCore::Font::drawGlyphs): Changed to use drawGDIGlyphs() only if
        native glyph support is not available or stroking is required. Changed
        to pass the font's useGDI() flag to wkSetCGContextFontRenderingStyle to
        request the use of native glyphs.
        * platform/graphics/win/FontCustomPlatformData.cpp:
        (WebCore::FontCustomPlatformData::fontPlatformData): Added a call to
        wkSetFontPlatformInfo to attach the LOGFONT to the CGFont.
        * platform/graphics/win/FontPlatformDataCGWin.cpp:
        (WebCore::FontPlatformData::platformDataInit): Ditto.

2009-01-08  Peter Kasting  <pkasting@google.com>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=22929
        Fix memory regression when decoding large animated GIFs.

        * platform/graphics/cg/ImageSourceCG.cpp:
        (WebCore::ImageSource::clear):

2009-01-08  Scott Violet  <sky@chromium.org>

        Reviewed by Eric Seidel (and Adam Barth).

        Fix Images to return their file extension
        http://code.google.com/p/chromium/issues/detail?id=5827

        * platform/graphics/skia/ImageSourceSkia.cpp:
        (WebCore::ImageSource::filenameExtension):

2009-01-08  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Eric Seidel.

        Add PathSkia and PatternSkia implementations to WebCore
        https://bugs.webkit.org/show_bug.cgi?id=23200

        * platform/graphics/skia/PathSkia.cpp: Added.
        (WebCore::Path::Path):
        (WebCore::Path::~Path):
        (WebCore::Path::operator=):
        (WebCore::Path::isEmpty):
        (WebCore::Path::contains):
        (WebCore::Path::translate):
        (WebCore::Path::boundingRect):
        (WebCore::Path::moveTo):
        (WebCore::Path::addLineTo):
        (WebCore::Path::addQuadCurveTo):
        (WebCore::Path::addBezierCurveTo):
        (WebCore::Path::addArcTo):
        (WebCore::Path::closeSubpath):
        (WebCore::Path::addArc):
        (WebCore::Path::addRect):
        (WebCore::Path::addEllipse):
        (WebCore::Path::clear):
        (WebCore::convertPathPoints):
        (WebCore::Path::apply):
        (WebCore::Path::transform):
        (WebCore::Path::debugString):
        (WebCore::boundingBoxForCurrentStroke):
        (WebCore::Path::strokeBoundingRect):
        * platform/graphics/skia/PatternSkia.cpp: Added.
        (WebCore::shaderRule):
        (WebCore::Pattern::createPlatformPattern):

2009-01-08  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Eric Seidel.

        Add ImageSourceSkia to platform/graphics/skia
        https://bugs.webkit.org/show_bug.cgi?id=23200

        ImageSourceSkia is mostly a hack to support our
        ICO decoder model.  See ImageSourceSkia.h for more
        explanation.  Eventually we'd like to make our ICO
        decoder lazy.

        * platform/graphics/ImageSource.h: mark m_decoder as protected
        * platform/graphics/skia/ImageSourceSkia.cpp: Added.
        (WebCore::createDecoder):
        (WebCore::ImageSource::ImageSource):
        (WebCore::ImageSource::~ImageSource):
        (WebCore::ImageSource::clear):
        (WebCore::ImageSource::initialized):
        (WebCore::ImageSource::setData):
        (WebCore::ImageSource::isSizeAvailable):
        (WebCore::ImageSource::size):
        (WebCore::ImageSource::frameSizeAtIndex):
        (WebCore::ImageSource::repetitionCount):
        (WebCore::ImageSource::frameCount):
        (WebCore::ImageSource::createFrameAtIndex):
        (WebCore::ImageSource::frameIsCompleteAtIndex):
        (WebCore::ImageSource::frameDurationAtIndex):
        (WebCore::ImageSource::frameHasAlphaAtIndex):
        (WebCore::ImageSourceSkia::setData):
        (WebCore::ImageSource::filenameExtension):
        * platform/graphics/skia/ImageSourceSkia.h: Added.

2009-01-08  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Eric Seidel.

        Add NativeImageSkia (PlatformImagePtr) to platform/graphics/skia
        https://bugs.webkit.org/show_bug.cgi?id=23200

        * platform/graphics/skia/NativeImageSkia.cpp: Added.
        (NativeImageSkia::NativeImageSkia):
        (NativeImageSkia::decodedSize):
        (NativeImageSkia::hasResizedBitmap):
        (NativeImageSkia::resizedBitmap):
        (NativeImageSkia::shouldCacheResampling):
        * platform/graphics/skia/NativeImageSkia.h: Added.
        (NativeImageSkia::setDataComplete):
        (NativeImageSkia::isDataComplete):

2009-01-08  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Eric Seidel.

        Add ImageBufferSkia and ImageSkia files.
        https://bugs.webkit.org/show_bug.cgi?id=23200
        For now we've left BitmapImage and BitmapImageSingleFrameSkia
        implementations in the ImageSkia file (like ImageCG has), but
        we intend to break them out into their own files.

        * platform/graphics/skia/ImageBufferSkia.cpp: Added.
        (WebCore::ImageBufferData::ImageBufferData):
        (WebCore::ImageBuffer::ImageBuffer):
        (WebCore::ImageBuffer::~ImageBuffer):
        (WebCore::ImageBuffer::context):
        (WebCore::ImageBuffer::image):
        (WebCore::ImageBuffer::getImageData):
        (WebCore::ImageBuffer::putImageData):
        (WebCore::ImageBuffer::toDataURL):
        * platform/graphics/skia/ImageSkia.cpp: Added.
        (WebCore::):
        (WebCore::FrameData::clear):
        (WebCore::Image::loadPlatformResource):
        (WebCore::Image::drawPattern):
        (WebCore::BitmapImage::initPlatformData):
        (WebCore::BitmapImage::invalidatePlatformData):
        (WebCore::BitmapImage::checkForSolidColor):
        (WebCore::BitmapImage::draw):
        (WebCore::BitmapImageSingleFrameSkia::draw):
        (WebCore::BitmapImageSingleFrameSkia::create):

2009-01-08  James Robinson  <jamesr@google.com>

        Reviewed by Mark Rowe.
        Landed by Pamela Greene.

        WebCore::Event::timeStamp() is a simple accessor and should be const

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

        * dom/Event.h:
        (WebCore::Event::timeStamp):

2009-01-08  Antti Koivisto  <antti@apple.com>

        Reviewed by Oliver Hunt.

        Fix <rdar://problem/6467206>
        Resources loaded from the memory cache do not get correctly inserted into the DocLoader resource map (22994)

        Use CachedResourceHandle in document resource map so resources get updated correctly when using
        using cache validation conditionals.

        * loader/Cache.cpp:
        (WebCore::Cache::evict):
        * loader/DocLoader.cpp:
        (WebCore::DocLoader::~DocLoader):
        (WebCore::DocLoader::requestResource):
        (WebCore::DocLoader::setAutoLoadImages):
        (WebCore::DocLoader::removeCachedResource):
        * loader/DocLoader.h:
        (WebCore::DocLoader::cachedResource):
        (WebCore::DocLoader::allCachedResources):
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::getSubresources):
        * loader/ImageLoader.cpp:
        (WebCore::ImageLoader::updateFromElement):

2009-01-08  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Eric Seidel.

        Add a cleaned-up GraphicsContextSkia implementation to WebKit.
        https://bugs.webkit.org/show_bug.cgi?id=23191

        * platform/graphics/skia/GraphicsContextSkia.cpp: Added.
        (WebCore::):
        (WebCore::GraphicsContext::GraphicsContext):
        (WebCore::GraphicsContext::~GraphicsContext):
        (WebCore::GraphicsContext::platformContext):
        (WebCore::GraphicsContext::savePlatformState):
        (WebCore::GraphicsContext::restorePlatformState):
        (WebCore::GraphicsContext::beginTransparencyLayer):
        (WebCore::GraphicsContext::endTransparencyLayer):
        (WebCore::GraphicsContext::addInnerRoundedRectClip):
        (WebCore::GraphicsContext::addPath):
        (WebCore::GraphicsContext::beginPath):
        (WebCore::GraphicsContext::clearPlatformShadow):
        (WebCore::GraphicsContext::clearRect):
        (WebCore::GraphicsContext::clip):
        (WebCore::GraphicsContext::clipOut):
        (WebCore::GraphicsContext::clipOutEllipseInRect):
        (WebCore::GraphicsContext::clipPath):
        (WebCore::GraphicsContext::clipToImageBuffer):
        (WebCore::GraphicsContext::concatCTM):
        (WebCore::GraphicsContext::drawConvexPolygon):
        (WebCore::GraphicsContext::drawEllipse):
        (WebCore::GraphicsContext::drawFocusRing):
        (WebCore::GraphicsContext::drawLine):
        (WebCore::GraphicsContext::drawLineForMisspellingOrBadGrammar):
        (WebCore::GraphicsContext::drawLineForText):
        (WebCore::GraphicsContext::drawRect):
        (WebCore::GraphicsContext::fillPath):
        (WebCore::GraphicsContext::fillRect):
        (WebCore::GraphicsContext::fillRoundedRect):
        (WebCore::GraphicsContext::getCTM):
        (WebCore::GraphicsContext::roundToDevicePixels):
        (WebCore::GraphicsContext::scale):
        (WebCore::GraphicsContext::setAlpha):
        (WebCore::GraphicsContext::setCompositeOperation):
        (WebCore::GraphicsContext::setImageInterpolationQuality):
        (WebCore::GraphicsContext::setLineCap):
        (WebCore::GraphicsContext::setLineDash):
        (WebCore::GraphicsContext::setLineJoin):
        (WebCore::GraphicsContext::setMiterLimit):
        (WebCore::GraphicsContext::setPlatformFillColor):
        (WebCore::GraphicsContext::setPlatformShadow):
        (WebCore::GraphicsContext::setPlatformStrokeColor):
        (WebCore::GraphicsContext::setPlatformStrokeStyle):
        (WebCore::GraphicsContext::setPlatformStrokeThickness):
        (WebCore::GraphicsContext::setPlatformTextDrawingMode):
        (WebCore::GraphicsContext::setURLForRect):
        (WebCore::GraphicsContext::setUseAntialiasing):
        (WebCore::GraphicsContext::strokeArc):
        (WebCore::GraphicsContext::strokePath):
        (WebCore::GraphicsContext::strokeRect):
        (WebCore::GraphicsContext::rotate):
        (WebCore::GraphicsContext::translate):

2009-01-08  David Hyatt  <hyatt@apple.com>

        Fix for <rdar://problem/6465682> REGRESSION: In Mail, can't force a message to auto scroll.

        Make scrollRectIntoViewRecursively call out to the HostWindow to continue the recursive scroll for
        any scrollable views that may contain a WebView.  Does nothing on platforms other than the Mac, but
        might eventually be of interest to other platforms.

        Reviewed by Oliver Hunt

        * WebCore.base.exp:
        * page/Chrome.cpp:
        (WebCore::Chrome::scrollRectIntoView):
        * page/Chrome.h:
        * page/ChromeClient.h:
        (WebCore::ChromeClient::scrollRectIntoView):
        * platform/HostWindow.h:
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::scrollRectIntoViewRecursively):

2009-01-08  Adam Treat  <adam.treat@torchmobile.com>

        Reviewed by David Hyatt.

        No need to make this part of HostWindow and moreover HostWindow should
        not have any reference to non-platform parts of WebCore.

        * page/Chrome.h:
        * page/FrameView.cpp:
        (WebCore::FrameView::setContentsSize):
        * platform/HostWindow.h:

2009-01-08  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Adele Peterson.

        Simplify Mac interfaces for drawing media controller elements

        <rdar://problem/6293969>

        * WebCore.base.exp: update for changed WebKitSystemInterface media controller functions

        * platform/mac/WebCoreSystemInterface.h: Ditto
        * platform/mac/WebCoreSystemInterface.mm: Ditto

        * rendering/MediaControlElements.h:
        (WebCore::): Add MediaControlElements enum

        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::paintMediaFullscreenButton):  update for changed WebKitSystemInterface
        media controller functions
        (WebCore::RenderThemeMac::paintMediaMuteButton): Ditto
        (WebCore::RenderThemeMac::paintMediaPlayButton): Ditto
        (WebCore::RenderThemeMac::paintMediaSeekBackButton): Ditto
        (WebCore::RenderThemeMac::paintMediaSeekForwardButton): Ditto
        (WebCore::RenderThemeMac::paintMediaSliderTrack): Ditto
        (WebCore::RenderThemeMac::paintMediaSliderThumb): Ditto

2009-01-08  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Eric Seidel.

        Add two more files for platform/graphics/skia.
        https://bugs.webkit.org/show_bug.cgi?id=23191

        * platform/graphics/skia/GradientSkia.cpp: Added.
        (WebCore::Gradient::platformDestroy):
        (WebCore::F2B):
        (WebCore::makeSkColor):
        (WebCore::totalStopsNeeded):
        (WebCore::fillStops):
        (WebCore::compareStops):
        (WebCore::Gradient::platformGradient):
        (WebCore::Gradient::fill):
        * platform/graphics/skia/GraphicsContextPlatformPrivate.h: Copied from WebCore/bindings/js/ScriptValue.h.
        (WebCore::GraphicsContextPlatformPrivate::GraphicsContextPlatformPrivate):
        (WebCore::GraphicsContextPlatformPrivate::context):

2009-01-08  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Eric Seidel.

        Commit the right files this time!  (Instead of the ugly unfixed ones.)
        https://bugs.webkit.org/show_bug.cgi?id=23191

        * platform/graphics/skia/BitmapImageSingleFrameSkia.h:
        * platform/graphics/skia/FloatPointSkia.cpp:
        * platform/graphics/skia/FloatRectSkia.cpp:
        * platform/graphics/skia/IntPointSkia.cpp:
        * platform/graphics/skia/IntRectSkia.cpp:
        (WebCore::IntRect::operator SkRect):
        * platform/graphics/skia/SkiaUtils.cpp:
        (WebCore::):
        (WebCore::WebCoreCompositeToSkiaComposite):
        (WebCore::SkPMColorToWebCoreColor):
        (WebCore::IntersectRectAndRegion):
        (WebCore::ClipRectToCanvas):
        (WebCore::SkPathContainsPoint):
        (WebCore::scratchContext):
        * platform/graphics/skia/SkiaUtils.h:
        (WebCore::WebCoreFloatToSkScalar):
        (WebCore::WebCoreDoubleToSkScalar):

2009-01-08  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Eric Seidel.

        Add the first few files from platform/graphics/skia
        https://bugs.webkit.org/show_bug.cgi?id=23191

        These are all pretty simple.
        Eventually BitmapImageSingleFrameSkia might grow a .cpp file, for now it's just a header.
        SkiaUtils needs to die, but that can come later, no need to block up-streaming now.

        * platform/graphics/skia/BitmapImageSingleFrameSkia.h: Added.
        (WebCore::BitmapImageSingleFrameSkia::isBitmapImage):
        (WebCore::BitmapImageSingleFrameSkia::size):
        (WebCore::BitmapImageSingleFrameSkia::destroyDecodedData):
        (WebCore::BitmapImageSingleFrameSkia::decodedSize):
        (WebCore::BitmapImageSingleFrameSkia::nativeImageForCurrentFrame):
        (WebCore::BitmapImageSingleFrameSkia::BitmapImageSingleFrameSkia):
        * platform/graphics/skia/FloatPointSkia.cpp: Copied from WebCore/platform/graphics/mac/FloatPointMac.mm.
        (WebCore::FloatPoint::FloatPoint):
        (WebCore::FloatPoint::operator SkPoint):
        * platform/graphics/skia/FloatRectSkia.cpp: Copied from WebCore/platform/graphics/qt/IntRectQt.cpp.
        (WebCore::FloatRect::FloatRect):
        (WebCore::FloatRect::operator SkRect):
        * platform/graphics/skia/IntPointSkia.cpp: Copied from WebCore/platform/graphics/win/IntPointWin.cpp.
        (WebCore::IntPoint::IntPoint):
        (WebCore::IntPoint::operator SkIPoint):
        (WebCore::IntPoint::operator SkPoint):
        * platform/graphics/skia/IntRectSkia.cpp: Copied from WebCore/platform/graphics/qt/IntRectQt.cpp.
        (WebCore::IntRect::operator SkIRect):
        (WebCore::IntRect::operator SkRect):
        (WebCore::IntRect::IntRect):
        * platform/graphics/skia/SkiaUtils.cpp: Added.
        (WebCore::WebCorePointToSkiaPoint):
        (WebCore::WebCoreRectToSkiaRect):
        (WebCore::):
        (WebCore::WebCoreCompositeToSkiaComposite):
        (WebCore::InvScaleByte):
        (WebCore::SkPMColorToColor):
        (WebCore::SkPMColorToWebCoreColor):
        (WebCore::IntersectRectAndRegion):
        (WebCore::ClipRectToCanvas):
        (WebCore::SkPathContainsPoint):
        (WebCore::scratchContext):
        * platform/graphics/skia/SkiaUtils.h: Added.
        (WebCore::WebCoreFloatToSkScalar):
        (WebCore::WebCoreDoubleToSkScalar):

2009-01-08  Pierre-Olivier Latour  <pol@apple.com>

        Reviewed by Dan Bernstein.

        Fixed CSS Transitions with zero-duration but non-zero-delay not starting or ending properly.

        Also updated AnimationController::numberOfActiveAnimations() which now returns the number of "active" animations,
        instead of simply the "running" ones.

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

        Tests: transitions/zero-duration-with-non-zero-delay-end.html
               transitions/zero-duration-with-non-zero-delay-start.html

        * page/animation/AnimationBase.cpp:
        (WebCore::AnimationBase::fireAnimationEventsIfNeeded):
        * page/animation/AnimationController.cpp:
        (WebCore::AnimationControllerPrivate::animationTimerFired):
        * page/animation/CompositeAnimation.cpp:
        (WebCore::CompositeAnimationPrivate::numberOfActiveAnimations):

2009-01-08  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Oliver Hunt.

        <rdar://problem/6477501> Repro crash loading HTML5 AppCache manifest directly

        The crash happened whenever a cached resource was downloaded, as opposed to used directly.

        No test, as downloading cannot be tested automatically.

        * loader/MainResourceLoader.cpp: (WebCore::MainResourceLoader::continueAfterContentPolicy):
        Cancel downloads that do not have an associated ResourceHandle, such as downloads from the
        application cache. Activity window shows "The URL can't be shown", and the frame remains empty.

2009-01-08  Justin McPherson <justin.mcpherson@nokia.com>

        Reviewed by Simon Hausmann.

        Fix the Qt build on older X11 systems with special X paths.

        * WebCore.pro: Use the x11 qmake config to pull in extra paths
        needed for NPAPI.

2009-01-08  Adam Roben  <aroben@apple.com>

        Windows build fix after r39699

        * DerivedSources.cpp: Added JSDOMStringList.cpp.

2009-01-08  Kent Hansen  <khansen@trolltech.com>

        Reviewed by Simon Hausmann.

        Fix copy & paste of images in the Qt port.

        Store the QPixmap itself in the mimedata, not a QPixmap* converted to bool.

        * platform/qt/ClipboardQt.cpp:
        (WebCore::ClipboardQt::declareAndWriteDragImage):

2009-01-08  Hiroyuki Ikezoe  <poincare@ikezoe.net>

        Reviewed by Holger Freyther.

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

        Invoke pango_coverage_get with each Unicode character.

        * platform/graphics/gtk/SimpleFontDataPango.cpp:
        (WebCore::SimpleFontData::containsCharacters):

2009-01-07  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin Adler.

        Part one of
        https://bugs.webkit.org/show_bug.cgi?id=23165
        Add support for application cache dynamic entries

        Test: http/tests/appcache/dynamic-entries-no-cache.html

        * DerivedSources.make:
        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.scons:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        Added new files.

        * bindings/js/JSDOMApplicationCacheCustom.cpp: (WebCore::JSDOMApplicationCache::hasItem):
        Added binding for hasItem(). Like other DOMApplicationCache methods, it needs to be custom
        to resolve relative URLs correctly.

        * bindings/js/JSDOMStringListCustom.cpp: Added.
        * dom/DOMStringList.cpp: Added.
        * dom/DOMStringList.h: Added.
        * dom/DOMStringList.idl: Added.
        Added an implementation of DOM 3 Core DOMStringList interface, which is returned by
        DOMApplicationCache items attribute.

        * dom/StaticStringList.cpp: Added.
        * dom/StaticStringList.h: Added.
        An implementation of DOMStringList that makes a snapshot (for DOMApplicationCache, this
        matches Firefox, as the spec doesn't say whether the returned list should be live or not).

        * loader/appcache/ApplicationCache.h: Added a list of pending dynamic entry actions, to be
        used in the near future.

        * loader/appcache/DOMApplicationCache.idl: Updated for spec changes. Instead of length
        attribute and item(), we now have an items attribute that returns a DOMStringList, and a
        hasItem convenience method.

        * loader/appcache/DOMApplicationCache.cpp:
        (WebCore::DOMApplicationCache::items):
        (WebCore::DOMApplicationCache::hasItem):
        * loader/appcache/DOMApplicationCache.h:
        Added implementations of items attribute and hasItem() (note that underlying ApplicationCache
        methods are still unimplemented though).

        * page/DOMWindow.idl: Expose a DOMStringList global constructor.

2009-01-07  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Eric Seidel.

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

        This completes the removal of dependencies on WebKit from the platform code

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::getDelayValue):
        (WebCore::getDurationValue):
        (WebCore::getTimingFunctionValue):
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * css/CSSHelper.h:
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::mapAnimationDelay):
        (WebCore::CSSStyleSelector::mapAnimationDirection):
        (WebCore::CSSStyleSelector::mapAnimationDuration):
        (WebCore::CSSStyleSelector::mapAnimationIterationCount):
        (WebCore::CSSStyleSelector::mapAnimationName):
        (WebCore::CSSStyleSelector::mapAnimationPlayState):
        (WebCore::CSSStyleSelector::mapAnimationProperty):
        (WebCore::CSSStyleSelector::mapAnimationTimingFunction):
        * platform/animation/Animation.cpp:
        (WebCore::Animation::Animation):
        * platform/animation/Animation.h:
        (WebCore::Animation::initialAnimationDelay):
        (WebCore::Animation::initialAnimationDirection):
        (WebCore::Animation::initialAnimationDuration):
        (WebCore::Animation::initialAnimationIterationCount):
        (WebCore::Animation::initialAnimationName):
        (WebCore::Animation::initialAnimationPlayState):
        (WebCore::Animation::initialAnimationProperty):
        (WebCore::Animation::initialAnimationTimingFunction):
        * rendering/style/RenderStyle.h:

2008-01-07  Peter Kasting  <pkasting@google.com>

        Reviewed by Sam Weinig.

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

        Fix errors while decoding GIFs by not calling setData() repeatedly
        when it's not necessary.  Pushes the responsibility for calling
        setData() after clear() into the ImageSource which presumably knows
        better than BitmapImage what needs to be done.

        NOTE: The above bug is mainly about a memory regression, which this
        patch does not fix.

        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::destroyDecodedData):
        * platform/graphics/ImageSource.h:
        * platform/graphics/cairo/ImageSourceCairo.cpp:
        (WebCore::ImageSource::clear):
        * platform/graphics/cg/ImageSourceCG.cpp:
        (WebCore::ImageSource::clear):
        * platform/graphics/qt/ImageSourceQt.cpp:
        (WebCore::ImageSource::~ImageSource):
        (WebCore::ImageSource::clear):
        * platform/graphics/wx/ImageSourceWx.cpp:
        (WebCore::ImageSource::~ImageSource):
        (WebCore::ImageSource::clear):

2009-01-07  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/6355786> Find fails for queries that contain a line break

        * editing/TextIterator.cpp:
        (WebCore::findPlainText): Allow find with queries that contain newlines.

2009-01-07  Dean Jackson  <dino@apple.com>

        Reviewed by Dan Bernstein.

        Allow removal of inline shorthand properties for
        animation, transition and transform origin. Also
        add getter for shorthand animation property.

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

        Test: fast/css/transform-inline-style-remove.html

        * css/CSSMutableStyleDeclaration.cpp:
        (WebCore::CSSMutableStyleDeclaration::getPropertyValue):
            Getter for animation property shorthand
        (WebCore::initShorthandMap):
            Adds initialisation for transform-origin, animation and transition

2009-01-07  Benjamin Otte  <otte@gnome.org>

        Reviewed by Holger Freyther.

        * platform/network/ResourceHandleInternal.h:
        (WebCore::ResourceHandleInternal::ResourceHandleInternal):
        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::ResourceHandleInternal::~ResourceHandleInternal):
        (WebCore::parseDataUrl):
        (WebCore::ResourceHandle::startData): keep track of the idle handler
        we add and remove it in the destructor

2009-01-07  Dean Jackson  <dino@apple.com>

        Reviewed by Darin Adler.

        Finish renaming of AffineTransform to TransformationMatrix, this
        time ensuring that the platform implementations get the correct
        name. Also, clean up some whitespace cruft in old content.

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

        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.scons:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/cairo/AffineTransformCairo.cpp: Removed.
        * platform/graphics/cairo/TransformationMatrixCairo.cpp: Copied from WebCore/platform/graphics/cairo/AffineTransformCairo.cpp.
        * platform/graphics/cg/AffineTransformCG.cpp: Removed.
        * platform/graphics/cg/TransformationMatrixCG.cpp: Copied from WebCore/platform/graphics/cg/AffineTransformCG.cpp.
        * platform/graphics/qt/AffineTransformQt.cpp: Removed.
        * platform/graphics/qt/TransformationMatrixQt.cpp: Copied from WebCore/platform/graphics/qt/AffineTransformQt.cpp.
        * platform/graphics/transforms/TransformationMatrix.cpp:
        * platform/graphics/transforms/TransformationMatrix.h:
        * platform/graphics/wx/AffineTransformWx.cpp: Removed.
        * platform/graphics/wx/TransformationMatrixWx.cpp: Copied from WebCore/platform/graphics/wx/AffineTransformWx.cpp.
        * webcore-wx.bkl:

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

        Another build fix.

        * WebCore.LP64.exp:

2008-12-16  David Hyatt  <hyatt@apple.com>

        Make Safari RSS behave nicely with full page zoom.  Need to add a new value to enable resetting of zoom
        back to the document-level default.

        Reviewed by Darin Adler

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        * css/CSSValueKeywords.in:

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

        Reviewed by Oliver Hunt.

        Bug 23160: add setMemoryCacheClientCallsEnabled SPI so Safari can be faster with activity window closed
        https://bugs.webkit.org/show_bug.cgi?id=23160

        * WebCore.base.exp: Added Page::setMemoryCacheClientCallsEnabled.

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::didLoadResourceFromMemoryCache): Updated to take a CachedResource
        so that there's no extra work the caller has to do when the inspector is disabled.
        * inspector/InspectorController.h: Ditto.

        * loader/DocumentLoader.h: Added recordMemoryCacheLoadForFutureClientNotification,
        takeMemoryCacheLoadsForClientNotification, and m_resourcesLoadedFromMemoryCacheForClientNotification.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadedResourceFromMemoryCache): Streamlined code so less work is done when
        there's no inspector or client call needed. Added code to check areMemoryCacheClientCallsEnabled
        and if it's false, use recordMemoryCacheLoadForFutureClientNotification.
        (WebCore::FrameLoader::tellClientAboutPastMemoryCacheLoads): Added.
        * loader/FrameLoader.h: Ditto.

        * page/Page.cpp:
        (WebCore::Page::Page): Initialize m_areMemoryCacheClientCallsEnabled to be compatible with old behavior.
        (WebCore::Page::setMemoryCacheClientCallsEnabled): Added.
        * page/Page.h: Added setMemoryCacheClientCallsEnabled, areMemoryCacheClientCallsEnabled,
        and m_areMemoryCacheClientCallsEnabled.

2009-01-07  Ariya Hidayat  <ariya.hidayat@trolltech.com>

        Rubber-stamped by Simon Hausmann.

        Qt build fix after r39670.

        * bridge/qt/qt_class.cpp:
        (JSC::Bindings::QtClass::fallbackObject):
        * bridge/qt/qt_class.h:
        * bridge/qt/qt_instance.cpp:
        (JSC::Bindings::QtInstance::mark):
        (JSC::Bindings::QtInstance::invokeMethod):
        (JSC::Bindings::QtInstance::defaultValue):
        (JSC::Bindings::QtInstance::stringValue):
        (JSC::Bindings::QtInstance::numberValue):
        (JSC::Bindings::QtInstance::booleanValue):
        (JSC::Bindings::QtInstance::valueOf):
        (JSC::Bindings::QtField::valueFromInstance):
        (JSC::Bindings::QtField::setValueToInstance):
        * bridge/qt/qt_instance.h:
        * bridge/qt/qt_runtime.cpp:
        (JSC::Bindings::valueRealType):
        (JSC::Bindings::convertValueToQVariant):
        (JSC::Bindings::convertQVariantToValue):
        (JSC::Bindings::findMethodIndex):
        (JSC::Bindings::QtRuntimeMetaMethod::call):
        (JSC::Bindings::QtRuntimeMetaMethod::lengthGetter):
        (JSC::Bindings::QtRuntimeMetaMethod::connectGetter):
        (JSC::Bindings::QtRuntimeMetaMethod::disconnectGetter):
        (JSC::Bindings::QtRuntimeConnectionMethod::call):
        (JSC::Bindings::QtRuntimeConnectionMethod::lengthGetter):
        (JSC::Bindings::::setValueAt):
        (JSC::Bindings::::valueAt):
        * bridge/qt/qt_runtime.h:
        (JSC::Bindings::QtRuntimeMethod::createStructure):

2009-01-06  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by Oliver Hunt.

        <rdar://problem/6391734> SnowLeopard: Crash doing Copy Image from context menu

        Can't create an automated test case for specific contextual menu items yet and
        a normal Copy doesn't cause a crash.

        * platform/mac/PasteboardMac.mm:
        (WebCore::fileWrapperForImage): The SharedBuffer may not have platform data.  It may,
        for example, have a purgeable or regular buffer.

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

        Reviewed by Geoff Garen.

        Fix <https://bugs.webkit.org/show_bug.cgi?id=23157>.
        Bug 23157: Crashes on Acid 3

        * dom/Document.cpp:
        (WebCore::Document::recalcStyle): Null-check the frame.

2009-01-05  Gavin Barraclough  <baraclough@apple.com>

        Rubber Stamped by Oliver Hunt.

        Replace all uses of JSValue* with new wrapper class, JSValuePtr.
        See JavaScriptCore/ChangeLog for more detailed description.

        * bindings/js/JSAttrCustom.cpp:
        (WebCore::JSAttr::setValue):
        * bindings/js/JSCSSRuleCustom.cpp:
        (WebCore::toJS):
        * bindings/js/JSCSSStyleDeclarationCustom.cpp:
        (WebCore::JSCSSStyleDeclaration::nameGetter):
        (WebCore::JSCSSStyleDeclaration::customPut):
        * bindings/js/JSCSSValueCustom.cpp:
        (WebCore::toJS):
        * bindings/js/JSCanvasPixelArrayCustom.h:
        (WebCore::JSCanvasPixelArray::getByIndex):
        (WebCore::JSCanvasPixelArray::indexSetter):
        * bindings/js/JSCanvasRenderingContext2DCustom.cpp:
        (WebCore::toJS):
        (WebCore::toHTMLCanvasStyle):
        (WebCore::JSCanvasRenderingContext2D::strokeStyle):
        (WebCore::JSCanvasRenderingContext2D::setStrokeStyle):
        (WebCore::JSCanvasRenderingContext2D::fillStyle):
        (WebCore::JSCanvasRenderingContext2D::setFillStyle):
        (WebCore::JSCanvasRenderingContext2D::setFillColor):
        (WebCore::JSCanvasRenderingContext2D::setStrokeColor):
        (WebCore::JSCanvasRenderingContext2D::strokeRect):
        (WebCore::JSCanvasRenderingContext2D::drawImage):
        (WebCore::JSCanvasRenderingContext2D::drawImageFromRect):
        (WebCore::JSCanvasRenderingContext2D::setShadow):
        (WebCore::JSCanvasRenderingContext2D::createPattern):
        (WebCore::JSCanvasRenderingContext2D::putImageData):
        (WebCore::JSCanvasRenderingContext2D::fillText):
        (WebCore::JSCanvasRenderingContext2D::strokeText):
        * bindings/js/JSClipboardCustom.cpp:
        (WebCore::JSClipboard::types):
        (WebCore::JSClipboard::clearData):
        (WebCore::JSClipboard::getData):
        (WebCore::JSClipboard::setData):
        (WebCore::JSClipboard::setDragImage):
        * bindings/js/JSConsoleCustom.cpp:
        (WebCore::JSConsole::profiles):
        * bindings/js/JSCustomPositionCallback.cpp:
        (WebCore::JSCustomPositionCallback::handleEvent):
        * bindings/js/JSCustomPositionErrorCallback.cpp:
        (WebCore::JSCustomPositionErrorCallback::handleEvent):
        * bindings/js/JSCustomSQLStatementCallback.cpp:
        (WebCore::JSCustomSQLStatementCallback::handleEvent):
        * bindings/js/JSCustomSQLStatementErrorCallback.cpp:
        (WebCore::JSCustomSQLStatementErrorCallback::handleEvent):
        * bindings/js/JSCustomSQLTransactionCallback.cpp:
        (WebCore::JSCustomSQLTransactionCallback::handleEvent):
        * bindings/js/JSCustomSQLTransactionErrorCallback.cpp:
        (WebCore::JSCustomSQLTransactionErrorCallback::handleEvent):
        * bindings/js/JSCustomVoidCallback.cpp:
        (WebCore::JSCustomVoidCallback::handleEvent):
        (WebCore::toVoidCallback):
        * bindings/js/JSCustomVoidCallback.h:
        * bindings/js/JSCustomXPathNSResolver.cpp:
        (WebCore::JSCustomXPathNSResolver::create):
        (WebCore::JSCustomXPathNSResolver::lookupNamespaceURI):
        * bindings/js/JSCustomXPathNSResolver.h:
        * bindings/js/JSDOMApplicationCacheCustom.cpp:
        (WebCore::JSDOMApplicationCache::add):
        (WebCore::JSDOMApplicationCache::remove):
        (WebCore::JSDOMApplicationCache::addEventListener):
        (WebCore::JSDOMApplicationCache::removeEventListener):
        * bindings/js/JSDOMBinding.cpp:
        (WebCore::jsStringOrNull):
        (WebCore::jsOwnedStringOrNull):
        (WebCore::jsStringOrUndefined):
        (WebCore::jsStringOrFalse):
        (WebCore::valueToStringWithNullCheck):
        (WebCore::valueToStringWithUndefinedOrNullCheck):
        (WebCore::reportException):
        (WebCore::reportCurrentException):
        (WebCore::setDOMException):
        (WebCore::objectToStringFunctionGetter):
        * bindings/js/JSDOMBinding.h:
        (WebCore::getDOMObjectWrapper):
        (WebCore::getDOMNodeWrapper):
        (WebCore::toJS):
        * bindings/js/JSDOMGlobalObject.cpp:
        (WebCore::JSDOMGlobalObject::findJSEventListener):
        (WebCore::JSDOMGlobalObject::findOrCreateJSEventListener):
        (WebCore::JSDOMGlobalObject::findJSUnprotectedEventListener):
        (WebCore::JSDOMGlobalObject::findOrCreateJSUnprotectedEventListener):
        * bindings/js/JSDOMGlobalObject.h:
        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::createWindow):
        (WebCore::showModalDialog):
        (jsDOMWindowBaseCrypto):
        (jsDOMWindowBaseEvent):
        (jsDOMWindowBaseImage):
        (jsDOMWindowBaseMessageChannel):
        (jsDOMWindowBaseOption):
        (jsDOMWindowBaseXMLHttpRequest):
        (jsDOMWindowBaseAudio):
        (jsDOMWindowBaseWorker):
        (jsDOMWindowBaseXSLTProcessor):
        (setJSDOMWindowBaseEvent):
        (setJSDOMWindowBaseAudio):
        (setJSDOMWindowBaseImage):
        (setJSDOMWindowBaseMessageChannel):
        (setJSDOMWindowBaseOption):
        (setJSDOMWindowBaseWorker):
        (setJSDOMWindowBaseXMLHttpRequest):
        (setJSDOMWindowBaseXSLTProcessor):
        (WebCore::JSDOMWindowBase::childFrameGetter):
        (WebCore::JSDOMWindowBase::indexGetter):
        (WebCore::JSDOMWindowBase::namedItemGetter):
        (WebCore::JSDOMWindowBase::getOwnPropertySlot):
        (WebCore::JSDOMWindowBase::put):
        (WebCore::JSDOMWindowBase::clear):
        (windowProtoFuncOpen):
        (windowProtoFuncShowModalDialog):
        (windowProtoFuncNotImplemented):
        (WebCore::JSDOMWindowBase::setReturnValueSlot):
        (WebCore::JSDOMWindowBase::installTimeout):
        (WebCore::toJS):
        (WebCore::toJSDOMWindow):
        * bindings/js/JSDOMWindowBase.h:
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::lookupGetter):
        (WebCore::JSDOMWindow::lookupSetter):
        (WebCore::JSDOMWindow::setLocation):
        (WebCore::JSDOMWindow::postMessage):
        (WebCore::setTimeoutOrInterval):
        (WebCore::JSDOMWindow::setTimeout):
        (WebCore::JSDOMWindow::clearTimeout):
        (WebCore::JSDOMWindow::setInterval):
        (WebCore::JSDOMWindow::clearInterval):
        (WebCore::JSDOMWindow::atob):
        (WebCore::JSDOMWindow::btoa):
        (WebCore::JSDOMWindow::addEventListener):
        (WebCore::JSDOMWindow::removeEventListener):
        (WebCore::toDOMWindow):
        (WebCore::nonCachingStaticCloseFunctionGetter):
        (WebCore::nonCachingStaticBlurFunctionGetter):
        (WebCore::nonCachingStaticFocusFunctionGetter):
        (WebCore::nonCachingStaticPostMessageFunctionGetter):
        * bindings/js/JSDOMWindowCustom.h:
        (WebCore::JSDOMWindow::customPut):
        * bindings/js/JSDOMWindowShell.cpp:
        (WebCore::JSDOMWindowShell::put):
        (WebCore::JSDOMWindowShell::putWithAttributes):
        (WebCore::JSDOMWindowShell::lookupGetter):
        (WebCore::JSDOMWindowShell::lookupSetter):
        (WebCore::toJS):
        * bindings/js/JSDOMWindowShell.h:
        (WebCore::JSDOMWindowShell::createStructure):
        * bindings/js/JSDatabaseCustom.cpp:
        (WebCore::JSDatabase::changeVersion):
        (WebCore::JSDatabase::transaction):
        * bindings/js/JSDocumentCustom.cpp:
        (WebCore::JSDocument::location):
        (WebCore::JSDocument::setLocation):
        (WebCore::toJS):
        * bindings/js/JSElementCustom.cpp:
        (WebCore::JSElement::setAttribute):
        (WebCore::JSElement::setAttributeNode):
        (WebCore::JSElement::setAttributeNS):
        (WebCore::JSElement::setAttributeNodeNS):
        (WebCore::toJSNewlyCreated):
        * bindings/js/JSEventCustom.cpp:
        (WebCore::JSEvent::clipboardData):
        (WebCore::toJS):
        * bindings/js/JSEventListener.cpp:
        (WebCore::JSAbstractEventListener::handleEvent):
        (WebCore::eventParameterName):
        (WebCore::JSLazyEventListener::parseCode):
        * bindings/js/JSEventTarget.cpp:
        (WebCore::toJS):
        * bindings/js/JSEventTarget.h:
        * bindings/js/JSEventTargetBase.h:
        * bindings/js/JSEventTargetNodeCustom.cpp:
        (WebCore::JSEventTargetNode::addEventListener):
        (WebCore::JSEventTargetNode::removeEventListener):
        * bindings/js/JSGeolocationCustom.cpp:
        (WebCore::createPositionOptions):
        (WebCore::JSGeolocation::getCurrentPosition):
        (WebCore::JSGeolocation::watchPosition):
        * bindings/js/JSHTMLAllCollection.h:
        (WebCore::JSHTMLAllCollection::createStructure):
        * bindings/js/JSHTMLAppletElementCustom.cpp:
        (WebCore::JSHTMLAppletElement::customPut):
        (WebCore::JSHTMLAppletElement::nameGetter):
        * bindings/js/JSHTMLCollectionCustom.cpp:
        (WebCore::getNamedItems):
        (WebCore::callHTMLCollection):
        (WebCore::JSHTMLCollection::nameGetter):
        (WebCore::JSHTMLCollection::item):
        (WebCore::JSHTMLCollection::namedItem):
        (WebCore::toJS):
        * bindings/js/JSHTMLDocumentCustom.cpp:
        (WebCore::JSHTMLDocument::nameGetter):
        (WebCore::JSHTMLDocument::all):
        (WebCore::JSHTMLDocument::setAll):
        (WebCore::JSHTMLDocument::open):
        (WebCore::JSHTMLDocument::write):
        (WebCore::JSHTMLDocument::writeln):
        * bindings/js/JSHTMLEmbedElementCustom.cpp:
        (WebCore::JSHTMLEmbedElement::customPut):
        (WebCore::JSHTMLEmbedElement::nameGetter):
        * bindings/js/JSHTMLFormElementCustom.cpp:
        (WebCore::JSHTMLFormElement::nameGetter):
        * bindings/js/JSHTMLFrameElementCustom.cpp:
        (WebCore::JSHTMLFrameElement::setSrc):
        (WebCore::JSHTMLFrameElement::setLocation):
        * bindings/js/JSHTMLFrameSetElementCustom.cpp:
        (WebCore::JSHTMLFrameSetElement::nameGetter):
        * bindings/js/JSHTMLIFrameElementCustom.cpp:
        (WebCore::JSHTMLIFrameElement::setSrc):
        * bindings/js/JSHTMLInputElementCustom.cpp:
        (WebCore::JSHTMLInputElement::selectionStart):
        (WebCore::JSHTMLInputElement::selectionEnd):
        * bindings/js/JSHTMLObjectElementCustom.cpp:
        (WebCore::JSHTMLObjectElement::customPut):
        (WebCore::JSHTMLObjectElement::nameGetter):
        * bindings/js/JSHTMLOptionsCollectionCustom.cpp:
        (WebCore::JSHTMLOptionsCollection::length):
        (WebCore::JSHTMLOptionsCollection::setLength):
        (WebCore::JSHTMLOptionsCollection::indexSetter):
        (WebCore::JSHTMLOptionsCollection::add):
        (WebCore::JSHTMLOptionsCollection::remove):
        * bindings/js/JSHTMLSelectElementCustom.cpp:
        (WebCore::JSHTMLSelectElement::remove):
        (WebCore::selectIndexSetter):
        (WebCore::JSHTMLSelectElement::indexSetter):
        * bindings/js/JSHTMLSelectElementCustom.h:
        * bindings/js/JSHistoryCustom.cpp:
        (WebCore::nonCachingStaticBackFunctionGetter):
        (WebCore::nonCachingStaticForwardFunctionGetter):
        (WebCore::nonCachingStaticGoFunctionGetter):
        (WebCore::JSHistory::customPut):
        * bindings/js/JSImageDataCustom.cpp:
        (WebCore::toJS):
        * bindings/js/JSInspectedObjectWrapper.cpp:
        (WebCore::JSInspectedObjectWrapper::wrap):
        (WebCore::JSInspectedObjectWrapper::prepareIncomingValue):
        * bindings/js/JSInspectedObjectWrapper.h:
        (WebCore::JSInspectedObjectWrapper::wrapOutgoingValue):
        * bindings/js/JSInspectorCallbackWrapper.cpp:
        (WebCore::JSInspectorCallbackWrapper::wrap):
        (WebCore::JSInspectorCallbackWrapper::prepareIncomingValue):
        * bindings/js/JSInspectorCallbackWrapper.h:
        (WebCore::JSInspectorCallbackWrapper::wrapOutgoingValue):
        * bindings/js/JSJavaScriptCallFrameCustom.cpp:
        (WebCore::JSJavaScriptCallFrame::evaluate):
        (WebCore::JSJavaScriptCallFrame::thisObject):
        (WebCore::JSJavaScriptCallFrame::type):
        (WebCore::JSJavaScriptCallFrame::scopeChain):
        * bindings/js/JSLocationCustom.cpp:
        (WebCore::nonCachingStaticReplaceFunctionGetter):
        (WebCore::nonCachingStaticReloadFunctionGetter):
        (WebCore::nonCachingStaticAssignFunctionGetter):
        (WebCore::JSLocation::customPut):
        (WebCore::JSLocation::setHref):
        (WebCore::JSLocation::setProtocol):
        (WebCore::JSLocation::setHost):
        (WebCore::JSLocation::setHostname):
        (WebCore::JSLocation::setPort):
        (WebCore::JSLocation::setPathname):
        (WebCore::JSLocation::setSearch):
        (WebCore::JSLocation::setHash):
        (WebCore::JSLocation::replace):
        (WebCore::JSLocation::reload):
        (WebCore::JSLocation::assign):
        (WebCore::JSLocation::toString):
        * bindings/js/JSMessageChannelConstructor.h:
        * bindings/js/JSMessagePortCustom.cpp:
        (WebCore::JSMessagePort::startConversation):
        (WebCore::JSMessagePort::addEventListener):
        (WebCore::JSMessagePort::removeEventListener):
        * bindings/js/JSMimeTypeArrayCustom.cpp:
        (WebCore::JSMimeTypeArray::nameGetter):
        * bindings/js/JSNamedNodeMapCustom.cpp:
        (WebCore::JSNamedNodeMap::nameGetter):
        * bindings/js/JSNamedNodesCollection.cpp:
        (WebCore::JSNamedNodesCollection::lengthGetter):
        (WebCore::JSNamedNodesCollection::indexGetter):
        * bindings/js/JSNamedNodesCollection.h:
        (WebCore::JSNamedNodesCollection::createStructure):
        * bindings/js/JSNavigatorCustom.cpp:
        (WebCore::needsYouTubeQuirk):
        (WebCore::JSNavigator::appVersion):
        * bindings/js/JSNodeCustom.cpp:
        (WebCore::JSNode::insertBefore):
        (WebCore::JSNode::replaceChild):
        (WebCore::JSNode::removeChild):
        (WebCore::JSNode::appendChild):
        (WebCore::createWrapper):
        (WebCore::toJSNewlyCreated):
        (WebCore::toJS):
        * bindings/js/JSNodeFilterCondition.cpp:
        (WebCore::JSNodeFilterCondition::JSNodeFilterCondition):
        (WebCore::JSNodeFilterCondition::acceptNode):
        * bindings/js/JSNodeFilterCondition.h:
        (WebCore::JSNodeFilterCondition::create):
        * bindings/js/JSNodeFilterCustom.cpp:
        (WebCore::JSNodeFilter::acceptNode):
        (WebCore::toNodeFilter):
        * bindings/js/JSNodeIteratorCustom.cpp:
        (WebCore::JSNodeIterator::nextNode):
        (WebCore::JSNodeIterator::previousNode):
        * bindings/js/JSNodeListCustom.cpp:
        (WebCore::callNodeList):
        (WebCore::JSNodeList::nameGetter):
        * bindings/js/JSPluginArrayCustom.cpp:
        (WebCore::JSPluginArray::nameGetter):
        * bindings/js/JSPluginCustom.cpp:
        (WebCore::JSPlugin::nameGetter):
        * bindings/js/JSPluginElementFunctions.cpp:
        (WebCore::runtimeObjectGetter):
        (WebCore::runtimeObjectPropertyGetter):
        (WebCore::runtimeObjectCustomPut):
        (WebCore::callPlugin):
        * bindings/js/JSPluginElementFunctions.h:
        * bindings/js/JSQuarantinedObjectWrapper.cpp:
        (WebCore::JSQuarantinedObjectWrapper::asWrapper):
        (WebCore::JSQuarantinedObjectWrapper::cachedValueGetter):
        (WebCore::JSQuarantinedObjectWrapper::getOwnPropertySlot):
        (WebCore::JSQuarantinedObjectWrapper::put):
        (WebCore::JSQuarantinedObjectWrapper::construct):
        (WebCore::JSQuarantinedObjectWrapper::hasInstance):
        (WebCore::JSQuarantinedObjectWrapper::call):
        * bindings/js/JSQuarantinedObjectWrapper.h:
        (WebCore::JSQuarantinedObjectWrapper::createStructure):
        * bindings/js/JSRGBColor.cpp:
        (WebCore::getJSRGBColor):
        (jsRGBColorRed):
        (jsRGBColorGreen):
        (jsRGBColorBlue):
        * bindings/js/JSRGBColor.h:
        (WebCore::JSRGBColor::createStructure):
        * bindings/js/JSSQLResultSetRowListCustom.cpp:
        (WebCore::JSSQLResultSetRowList::item):
        * bindings/js/JSSQLTransactionCustom.cpp:
        (WebCore::JSSQLTransaction::executeSql):
        * bindings/js/JSSVGElementInstanceCustom.cpp:
        (WebCore::JSSVGElementInstance::addEventListener):
        (WebCore::JSSVGElementInstance::removeEventListener):
        * bindings/js/JSSVGLengthCustom.cpp:
        (WebCore::JSSVGLength::value):
        (WebCore::JSSVGLength::convertToSpecifiedUnits):
        * bindings/js/JSSVGMatrixCustom.cpp:
        (WebCore::JSSVGMatrix::multiply):
        (WebCore::JSSVGMatrix::inverse):
        (WebCore::JSSVGMatrix::translate):
        (WebCore::JSSVGMatrix::scale):
        (WebCore::JSSVGMatrix::scaleNonUniform):
        (WebCore::JSSVGMatrix::rotate):
        (WebCore::JSSVGMatrix::rotateFromVector):
        (WebCore::JSSVGMatrix::flipX):
        (WebCore::JSSVGMatrix::flipY):
        (WebCore::JSSVGMatrix::skewX):
        (WebCore::JSSVGMatrix::skewY):
        * bindings/js/JSSVGPathSegCustom.cpp:
        (WebCore::toJS):
        * bindings/js/JSSVGPathSegListCustom.cpp:
        (WebCore::JSSVGPathSegList::clear):
        (WebCore::JSSVGPathSegList::initialize):
        (WebCore::JSSVGPathSegList::getItem):
        (WebCore::JSSVGPathSegList::insertItemBefore):
        (WebCore::JSSVGPathSegList::replaceItem):
        (WebCore::JSSVGPathSegList::removeItem):
        (WebCore::JSSVGPathSegList::appendItem):
        * bindings/js/JSSVGPointListCustom.cpp:
        (WebCore::finishGetter):
        (WebCore::finishSetter):
        (WebCore::finishSetterReadOnlyResult):
        (WebCore::JSSVGPointList::clear):
        (WebCore::JSSVGPointList::initialize):
        (WebCore::JSSVGPointList::getItem):
        (WebCore::JSSVGPointList::insertItemBefore):
        (WebCore::JSSVGPointList::replaceItem):
        (WebCore::JSSVGPointList::removeItem):
        (WebCore::JSSVGPointList::appendItem):
        * bindings/js/JSSVGTransformListCustom.cpp:
        (WebCore::finishGetter):
        (WebCore::finishSetter):
        (WebCore::finishSetterReadOnlyResult):
        (WebCore::JSSVGTransformList::clear):
        (WebCore::JSSVGTransformList::initialize):
        (WebCore::JSSVGTransformList::getItem):
        (WebCore::JSSVGTransformList::insertItemBefore):
        (WebCore::JSSVGTransformList::replaceItem):
        (WebCore::JSSVGTransformList::removeItem):
        (WebCore::JSSVGTransformList::appendItem):
        * bindings/js/JSStorageCustom.cpp:
        (WebCore::JSStorage::nameGetter):
        (WebCore::JSStorage::deleteProperty):
        (WebCore::JSStorage::customPut):
        * bindings/js/JSStyleSheetCustom.cpp:
        (WebCore::toJS):
        * bindings/js/JSStyleSheetListCustom.cpp:
        (WebCore::JSStyleSheetList::nameGetter):
        * bindings/js/JSTextCustom.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/js/JSTreeWalkerCustom.cpp:
        (WebCore::JSTreeWalker::parentNode):
        (WebCore::JSTreeWalker::firstChild):
        (WebCore::JSTreeWalker::lastChild):
        (WebCore::JSTreeWalker::nextSibling):
        (WebCore::JSTreeWalker::previousSibling):
        (WebCore::JSTreeWalker::previousNode):
        (WebCore::JSTreeWalker::nextNode):
        * bindings/js/JSWorkerContextBase.cpp:
        (WebCore::JSWorkerContextBase::put):
        * bindings/js/JSWorkerContextBase.h:
        * bindings/js/JSWorkerContextCustom.cpp:
        (WebCore::JSWorkerContext::self):
        (WebCore::JSWorkerContext::setSelf):
        (WebCore::JSWorkerContext::addEventListener):
        (WebCore::JSWorkerContext::removeEventListener):
        * bindings/js/JSWorkerCustom.cpp:
        (WebCore::JSWorker::addEventListener):
        (WebCore::JSWorker::removeEventListener):
        * bindings/js/JSXMLHttpRequestCustom.cpp:
        (WebCore::JSXMLHttpRequest::open):
        (WebCore::JSXMLHttpRequest::setRequestHeader):
        (WebCore::JSXMLHttpRequest::send):
        (WebCore::JSXMLHttpRequest::getResponseHeader):
        (WebCore::JSXMLHttpRequest::overrideMimeType):
        (WebCore::JSXMLHttpRequest::addEventListener):
        (WebCore::JSXMLHttpRequest::removeEventListener):
        (WebCore::JSXMLHttpRequest::responseText):
        * bindings/js/JSXMLHttpRequestUploadCustom.cpp:
        (WebCore::JSXMLHttpRequestUpload::addEventListener):
        (WebCore::JSXMLHttpRequestUpload::removeEventListener):
        * bindings/js/JSXSLTProcessorCustom.cpp:
        (WebCore::JSXSLTProcessor::importStylesheet):
        (WebCore::JSXSLTProcessor::transformToFragment):
        (WebCore::JSXSLTProcessor::transformToDocument):
        (WebCore::JSXSLTProcessor::setParameter):
        (WebCore::JSXSLTProcessor::getParameter):
        (WebCore::JSXSLTProcessor::removeParameter):
        * bindings/js/ScheduledAction.cpp:
        (WebCore::ScheduledAction::ScheduledAction):
        (WebCore::ScheduledAction::execute):
        * bindings/js/ScheduledAction.h:
        * bindings/js/ScriptCallStack.cpp:
        (WebCore::ScriptCallStack::ScriptCallStack):
        (WebCore::ScriptCallStack::initialize):
        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::createScriptObjectForPluginElement):
        * bindings/js/ScriptValue.cpp:
        (WebCore::ScriptValue::getString):
        (WebCore::ScriptValue::isNull):
        (WebCore::ScriptValue::isUndefined):
        * bindings/js/ScriptValue.h:
        (WebCore::ScriptValue::ScriptValue):
        (WebCore::ScriptValue::jsValue):
        * bindings/objc/WebScriptObject.mm:
        (-[WebScriptObject callWebScriptMethod:withArguments:]):
        (-[WebScriptObject evaluateWebScript:]):
        (-[WebScriptObject valueForKey:]):
        (-[WebScriptObject webScriptValueAtIndex:]):
        (+[WebScriptObject _convertValueToObjcValue:originRootObject:rootObject:]):
        * bindings/objc/WebScriptObjectPrivate.h:
        * bindings/scripts/CodeGeneratorJS.pm:
        * bridge/NP_jsobject.cpp:
        (_NPN_InvokeDefault):
        (_NPN_Invoke):
        (_NPN_Evaluate):
        (_NPN_GetProperty):
        (_NPN_HasMethod):
        (_NPN_Construct):
        * bridge/c/c_instance.cpp:
        (JSC::Bindings::CInstance::invokeMethod):
        (JSC::Bindings::CInstance::invokeDefaultMethod):
        (JSC::Bindings::CInstance::invokeConstruct):
        (JSC::Bindings::CInstance::defaultValue):
        (JSC::Bindings::CInstance::stringValue):
        (JSC::Bindings::CInstance::numberValue):
        (JSC::Bindings::CInstance::booleanValue):
        (JSC::Bindings::CInstance::valueOf):
        * bridge/c/c_instance.h:
        * bridge/c/c_runtime.cpp:
        (JSC::Bindings::CField::valueFromInstance):
        (JSC::Bindings::CField::setValueToInstance):
        * bridge/c/c_runtime.h:
        * bridge/c/c_utility.cpp:
        (JSC::Bindings::convertValueToNPVariant):
        (JSC::Bindings::convertNPVariantToValue):
        * bridge/c/c_utility.h:
        * bridge/jni/jni_instance.cpp:
        (JavaInstance::stringValue):
        (JavaInstance::numberValue):
        (JavaInstance::booleanValue):
        (JavaInstance::invokeMethod):
        (JavaInstance::defaultValue):
        (JavaInstance::valueOf):
        * bridge/jni/jni_instance.h:
        * bridge/jni/jni_jsobject.h:
        * bridge/jni/jni_jsobject.mm:
        (JavaJSObject::call):
        (JavaJSObject::eval):
        (JavaJSObject::getMember):
        (JavaJSObject::getSlot):
        (JavaJSObject::convertValueToJObject):
        (JavaJSObject::convertJObjectToValue):
        * bridge/jni/jni_objc.mm:
        (JSC::Bindings::dispatchJNICall):
        * bridge/jni/jni_runtime.cpp:
        (JavaArray::convertJObjectToArray):
        (JavaField::dispatchValueFromInstance):
        (JavaField::valueFromInstance):
        (JavaField::dispatchSetValueToInstance):
        (JavaField::setValueToInstance):
        (JavaArray::setValueAt):
        (JavaArray::valueAt):
        * bridge/jni/jni_runtime.h:
        * bridge/jni/jni_utility.cpp:
        (JSC::Bindings::convertArrayInstanceToJavaArray):
        (JSC::Bindings::convertValueToJValue):
        * bridge/jni/jni_utility.h:
        * bridge/objc/WebScriptObject.h:
        * bridge/objc/objc_class.h:
        * bridge/objc/objc_class.mm:
        (JSC::Bindings::ObjcClass::fallbackObject):
        * bridge/objc/objc_instance.h:
        * bridge/objc/objc_instance.mm:
        (ObjcInstance::invokeMethod):
        (ObjcInstance::invokeDefaultMethod):
        (ObjcInstance::setValueOfUndefinedField):
        (ObjcInstance::getValueOfUndefinedField):
        (ObjcInstance::defaultValue):
        (ObjcInstance::stringValue):
        (ObjcInstance::numberValue):
        (ObjcInstance::booleanValue):
        (ObjcInstance::valueOf):
        * bridge/objc/objc_runtime.h:
        (JSC::Bindings::ObjcFallbackObjectImp::createStructure):
        * bridge/objc/objc_runtime.mm:
        (JSC::Bindings::ObjcField::valueFromInstance):
        (JSC::Bindings::convertValueToObjcObject):
        (JSC::Bindings::ObjcField::setValueToInstance):
        (JSC::Bindings::ObjcArray::setValueAt):
        (JSC::Bindings::ObjcArray::valueAt):
        (JSC::Bindings::ObjcFallbackObjectImp::put):
        (JSC::Bindings::callObjCFallbackObject):
        (JSC::Bindings::ObjcFallbackObjectImp::defaultValue):
        * bridge/objc/objc_utility.h:
        * bridge/objc/objc_utility.mm:
        (JSC::Bindings::convertValueToObjcValue):
        (JSC::Bindings::convertNSStringToString):
        (JSC::Bindings::convertObjcValueToValue):
        * bridge/runtime.cpp:
        (JSC::Bindings::Instance::getValueOfField):
        (JSC::Bindings::Instance::setValueOfField):
        * bridge/runtime.h:
        (JSC::Bindings::Class::fallbackObject):
        (JSC::Bindings::Instance::getValueOfUndefinedField):
        (JSC::Bindings::Instance::setValueOfUndefinedField):
        (JSC::Bindings::Instance::invokeDefaultMethod):
        (JSC::Bindings::Instance::invokeConstruct):
        (JSC::Bindings::Instance::valueOf):
        * bridge/runtime_array.cpp:
        (JSC::RuntimeArray::lengthGetter):
        (JSC::RuntimeArray::indexGetter):
        (JSC::RuntimeArray::put):
        * bridge/runtime_array.h:
        (JSC::RuntimeArray::createStructure):
        * bridge/runtime_method.cpp:
        (JSC::RuntimeMethod::lengthGetter):
        (JSC::callRuntimeMethod):
        * bridge/runtime_method.h:
        (JSC::RuntimeMethod::createStructure):
        * bridge/runtime_object.cpp:
        (JSC::RuntimeObjectImp::fallbackObjectGetter):
        (JSC::RuntimeObjectImp::fieldGetter):
        (JSC::RuntimeObjectImp::methodGetter):
        (JSC::RuntimeObjectImp::put):
        (JSC::RuntimeObjectImp::defaultValue):
        (JSC::callRuntimeObject):
        (JSC::callRuntimeConstructor):
        * bridge/runtime_object.h:
        (JSC::RuntimeObjectImp::createStructure):
        * inspector/InspectorController.cpp:
        * inspector/JavaScriptCallFrame.cpp:
        (WebCore::JavaScriptCallFrame::evaluate):
        * inspector/JavaScriptCallFrame.h:
        * inspector/JavaScriptProfile.cpp:
        (WebCore::toJS):
        * inspector/JavaScriptProfile.h:
        * inspector/JavaScriptProfileNode.cpp:
        (WebCore::toJS):
        * inspector/JavaScriptProfileNode.h:
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::dropProtection):

2009-01-06  Pierre-Olivier Latour  <pol@apple.com>

        Reviewed by Darin Adler.

        Added new API on AnimationController::numberOfActiveAnimations() to be used by DRT.

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

        Test: animations/animation-controller-drt-api.html

        * WebCore.base.exp:
        * page/animation/AnimationController.cpp:
        (WebCore::AnimationControllerPrivate::numberOfActiveAnimations):
        (WebCore::AnimationController::numberOfActiveAnimations):
        * page/animation/AnimationController.h:
        * page/animation/CompositeAnimation.cpp:
        (WebCore::CompositeAnimationPrivate::numberOfActiveAnimations):
        (WebCore::CompositeAnimation::numberOfActiveAnimations):
        * page/animation/CompositeAnimation.h:

2009-01-06  Eric Seidel  <eric@webkit.org>

        Reviewed by Gavin Barraclough.

        Upstream 3 more files to get the WebCore-Chromium build a bit further.

        * WebCore.scons:
        * page/chromium/AccessibilityObjectChromium.cpp: Added.
        (WebCore::AccessibilityObject::accessibilityIgnoreAttachment):
        * page/chromium/AccessibilityObjectWrapper.h: Added.
        (WebCore::AccessibilityObjectWrapper::~AccessibilityObjectWrapper):
        (WebCore::AccessibilityObjectWrapper::attached):
        (WebCore::AccessibilityObjectWrapper::accessibilityObject):
        (WebCore::AccessibilityObjectWrapper::AccessibilityObjectWrapper):
        * platform/chromium/PasteboardPrivate.h: Added.
        (WebCore::PasteboardPrivate::):

2009-01-06  Chris Marrin  <cmarrin@apple.com>

        Reviewed by David Hyatt.

        Tests: animations/simultaneous-start-left.html
               animations/simultaneous-start-transform.html

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

        I added calls beginAnimationUpdate() and endAnimationUpdate() calls
        to AnimationController. These are called by Document at the start
        and end of the recalcStyle cycle. Right now, I'm just using the
        beginAnimationUpdate() method to reset an animation time value.
        The first time the animation time is accessed after this reset I set
        it to the currentTime. So all animations in that cycle get the same
        start time.

        The test cases checked in test this, but in the case of the 'left'
        test it actually doesn't make any difference in most cases. This is
        because values are clamped to whole pixels, so the start times would
        have to be pretty far off for the test to fail using the old
        currentTime() model. Still, under really heavy load, it's possible for
        the test to fail without these changes.

        The 'transform' test is another story. It animates to the full resolution
        of a floating point number, so the test fails miserably without this
        fix.

        * dom/Document.cpp:
        (WebCore::Document::recalcStyle):
        * page/animation/AnimationBase.cpp:
        (WebCore::AnimationBase::updateStateMachine):
        (WebCore::AnimationBase::fireAnimationEventsIfNeeded):
        (WebCore::AnimationBase::willNeedService):
        (WebCore::AnimationBase::progress):
        (WebCore::AnimationBase::goIntoEndingOrLoopingState):
        (WebCore::AnimationBase::beginAnimationUpdateTime):
        * page/animation/AnimationBase.h:
        * page/animation/AnimationController.cpp:
        (WebCore::AnimationControllerPrivate::beginAnimationUpdateTime):
        (WebCore::AnimationControllerPrivate::setBeginAnimationUpdateTime):
        (WebCore::AnimationControllerPrivate::AnimationControllerPrivate):
        (WebCore::AnimationController::updateAnimations):
        (WebCore::AnimationController::beginAnimationUpdateTime):
        (WebCore::AnimationController::beginAnimationUpdate):
        (WebCore::AnimationController::endAnimationUpdate):
        * page/animation/AnimationController.h:
        * page/animation/KeyframeAnimation.cpp:
        (WebCore::KeyframeAnimation::animate):

2009-01-06  Julien Chaffraix  <jchaffraix@webkit.org>

        Reviewed by Nikolas Zimmermann.

        Bug 22858: Simplify make_names.pl code for avoiding multiple definitions or inclusions
        https://bugs.webkit.org/show_bug.cgi?id=22858

        I had introduced an awkward situation using hasCustomJSWrapper and
        sometimes boolean parameter in order to ensure JS wrapper generated once
        or header included once.

        Simplified the code by using a %seenTag hash to detect multiple definitions
        or inclusions and skipping it.

        Also cleaned up a bit make_names.pl by using more explicit names and moving
        code to where it belongs.

        * dom/make_names.pl:
        * html/HTMLTagNames.in: Necessary changes that were not detected by
        the previous syntax but will be required for autogenerating HTMLElementFactory.

2009-01-06  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Add a way for frame loader clients to always create a PluginDocument, regardless of
        the real document MIME type.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::begin):
        (WebCore::FrameLoader::shouldUsePlugin):
        * loader/FrameLoaderClient.h:
        (WebCore::FrameLoaderClient::shouldUsePluginDocument):

2009-01-06  Dean Jackson  <dino@apple.com>

        Reviewed by Dave Hyatt.

        Extend Media Queries to cover transitions,
        animations, transform-2d and transform-3d
        http://webkit.org/specs/MediaQueriesExtensions.html
        Note that the implementation uses -webkit- prefixes
        even though the spec doesn't have them.
        https://bugs.webkit.org/show_bug.cgi?id=22494

        Tests: fast/media/mq-animation.html
               fast/media/mq-transform-01.html
               fast/media/mq-transform-02.html
               fast/media/mq-transform-03.html
               fast/media/mq-transform-04.html
               fast/media/mq-transition.html

        * css/MediaFeatureNames.h:
        * css/MediaQueryEvaluator.cpp:
        (WebCore::animationMediaFeatureEval):
        (WebCore::transitionMediaFeatureEval):
        (WebCore::transform_2dMediaFeatureEval):
        (WebCore::transform_3dMediaFeatureEval):

2009-01-06  Eric Seidel  <eric@webkit.org>

        Reviewed by Oliver Hunt.

        Bring the Chromium-WebCore build closer to building
        by upstreaming PlatformWidget.h add adding the JSC
        plugin bridge files to the build.

        * WebCore.scons:
        * platform/chromium/PlatformWidget.h: Added.

2009-01-06  Eric Seidel  <eric@webkit.org>

        Build fix only, no review.

        Bring the Chromium-WebCore build back closer to building
        by adding files from recent commits.

        * WebCore.scons:

2009-01-06  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin Adler.

        <rdar://problem/6474973> REGRESSION: PLT ~2% slower due to 39465 (consolidate thread data)

        I could not reproduce the slowdown on my PowerPC test machine, but the change should bring
        performance back.

        * platform/ThreadGlobalData.cpp: (WebCore::threadGlobalData): Don't use AtomicallyInitializedStatic.
        Prior to r39465, it was only used for cached converters, which was necessary because the
        first access to ICU or TEC one could happen on a secondary thread, but now they are all
        initialized from ThreadGlobalData constructor.

2009-01-06  David Smith  <catfish.man@gmail.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=23129
        Devirtualize Node::childNodes().

2009-01-06  Simon Hausmann  <simon.hausmann@nokia.com>

        Unreviewed build fix.

        Fix the Qt build with Qt 4.4.x, the HTTP-only cookie support was
        added in Qt 4.5.

        * platform/qt/CookieJarQt.cpp:
        (WebCore::setCookies):
        (WebCore::cookies):

2009-01-06  Zalan Bujtas  <zbujtas@gmail.com>

        Reviewed by David Kilzer.

        https://bugs.webkit.org/show_bug.cgi?id=23133
        Fix SVG disabled build. Move 'pointer-events' from SVGCSSPropertyNames.in to
        CSSPropertyNames.in and move PointerEvents functions out of #if ENABLE(SVG)

        NOTE: Property name fixes landed as part of r39648.

        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        (WebCore::CSSPrimitiveValue::operator EPointerEvents):
        * css/CSSPropertyNames.in:
        * css/SVGCSSPropertyNames.in:

2009-01-06  David Kilzer  <ddkilzer@apple.com>

        BUILD FIX (r39634): Fix build for non-SVG builds (Wx)

        * css/CSSPropertyNames.in: Added 'pointer-events'.
        * css/SVGCSSPropertyNames.in: Commented out pointer-events
        since it's now a plain CSS property.

2009-01-06  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Lars Knoll.

        Added support for HTTP-only cookies to the Qt build.

        * platform/qt/CookieJarQt.cpp:
        (WebCore::setCookies): Don't set HTTP-only cookies through the DOM.
        (WebCore::cookies): Don't return HTTP-only cookies to the DOM.

2009-01-05  David Smith  <catfish.man@gmail.com>

        Reviewed by Oliver Hunt.

        https://bugs.webkit.org/show_bug.cgi?id=23084
        Avoid redundant AtomicString conversions

        * dom/Node.cpp: Create an AtomicString early to avoid converting twice
        (WebCore::Node::getElementsByTagNameNS):
        * dom/QualifiedName.h: Use the appropriate AtomicString constructor instead of converting from a String

2009-01-05  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dave Hyatt

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

        Add an assertion that clip rects are being used when painting with the same
        rootLayer that they were computed with.

        Fix two issues detected by the assertion:

        RenderLayer::updateClipRects() should not unconditionally update the clip rects
        on its parent, but stop when reaching rootLayer (just like calculateClipRects()).

        We need to pass the temporaryClipRects flag down through reflection painting
        to handle the case of nested reflections.

        Also use temporary clip rects in RenderTreeAsText, since that code does not
        reset the painting root for transformed layers, so cached clip rects will not
        match those used for painting.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::RenderLayer):
        (WebCore::RenderLayer::paintLayer):
        (WebCore::RenderLayer::updateClipRects):
        (WebCore::RenderLayer::clearClipRects):
        * rendering/RenderLayer.h:
        * rendering/RenderTreeAsText.cpp:
        (WebCore::writeLayers):

2009-01-05  Adam Treat  <adam.treat@torchmobile.com>

        Fix the Qt build

        * platform/graphics/qt/AffineTransformQt.cpp:
        (WebCore::TransformationMatrix::TransformationMatrix):

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

        Fix the build some more.

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

2009-01-05  Oliver Hunt  <oliver@apple.com>

        Reviewed by NOBODY (Build fix).

        Fix Cairo/Gtk build

        * platform/graphics/cairo/ImageBufferCairo.cpp:
        (WebCore::ImageBuffer::putImageData):

2009-01-05  Dean Jackson  <dino@apple.com>

        Reviewed by Darin Adler.

        Rename AffineTransform to TransformationMatrix in
        preparation for future enhancements (non-affine matrices)

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

        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.scons:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * platform/graphics/transforms/AffineTransform.cpp: Removed.
        * platform/graphics/transforms/AffineTransform.h: Removed.
        * platform/graphics/transforms/TransformationMatrix.cpp: Copied from WebCore/platform/graphics/transforms/AffineTransform.cpp.
        * platform/graphics/transforms/TransformationMatrix.h: Copied from WebCore/platform/graphics/transforms/AffineTransform.h.
        * lots of other files with s/AffineTransform/TransformationMatrix/g

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

        Reviewed by David Hyatt.

        Implement 'pointer-events' for HTML content. This involved
        adding a new value 'auto' which behaves as 'visiblePainted'
        in SVG content.

        Moved the property out of the SVG CSS code and into
        the general CSS (both parsing and RenderStyle).

        Changes to the hit testing functionality of the Render tree,
        specifically the nodeAtPoint methods. Where they used to
        test for visibility, they now use a helper function defined
        on base classes (RenderObject and InlineBox) that checks both
        visibility and pointer-events.

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

        Tests: fast/events/pointer-events-2.html
               fast/events/pointer-events.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::):
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        (WebCore::CSSPrimitiveValue::operator EPointerEvents):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        * css/SVGCSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getSVGPropertyCSSValue):
        * css/SVGCSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applySVGProperty):
        * manual-tests/pointer-events.html: Added.
        * rendering/EllipsisBox.cpp:
        (WebCore::EllipsisBox::nodeAtPoint):
        * rendering/InlineBox.h:
        (WebCore::InlineBox::visibleToHitTesting):
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::nodeAtPoint):
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::nodeAtPoint):
        * rendering/PointerEventsHitRules.cpp:
        (WebCore::PointerEventsHitRules::PointerEventsHitRules):
        * rendering/PointerEventsHitRules.h:
        (WebCore::PointerEventsHitRules::):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::nodeAtPoint):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::nodeAtPoint):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::visibleToHitTesting):
        * rendering/RenderPath.cpp:
        (WebCore::RenderPath::nodeAtPoint):
        * rendering/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::nodeAtPoint):
        * rendering/RenderSVGText.cpp:
        (WebCore::RenderSVGText::nodeAtPoint):
        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::nodeAtPoint):
        * rendering/TextControlInnerElements.cpp:
        (WebCore::SearchFieldCancelButtonElement::defaultEventHandler):
        * rendering/style/RenderStyle.h:
        (WebCore::):
        (WebCore::InheritedFlags::setBitDefaults):
        (WebCore::InheritedFlags::pointerEvents):
        (WebCore::InheritedFlags::setPointerEvents):
        (WebCore::InheritedFlags::initialPointerEvents):
        * rendering/style/RenderStyleConstants.h:
        (WebCore::):
        * rendering/style/SVGRenderStyle.h:
        (WebCore::SVGRenderStyle::InheritedFlags::operator==):
        (WebCore::SVGRenderStyle::setBitDefaults):
        * rendering/style/SVGRenderStyleDefs.h:
        * css/CSSValueKeywords.in:
        * css/SVGCSSValueKeywords.in:

2009-01-05  Oliver Hunt  <oliver@apple.com>

        Reviewed by NOBODY (Build fix).

        Fix Cairo/Gtk build

        * platform/graphics/cairo/ImageBufferCairo.cpp:
        (WebCore::ImageBuffer::getImageData):

2009-01-05  Oliver Hunt  <oliver@apple.com>

        Reviewed by Gavin Barraclough.

        CanvasPixelArray performance is too slow
        <https://bugs.webkit.org/show_bug.cgi?id=23123>

        Remove the WebCore CanvasPixelArray implementation and replace
        CPA usage with JSC::ByteArray.  Replace the JSCanvasPixelArray
        wrapper with an explicitly instantiated JSByteArray put on the
        JSImageData object as an ordinary ReadOnly, DontDelete property.

        * DerivedSources.make:
        * ForwardingHeaders/runtime/ByteArray.h: Added.
        * ForwardingHeaders/runtime/JSByteArray.h: Added.
        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.scons:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSCanvasPixelArrayCustom.h: Removed.
        * bindings/js/JSImageDataCustom.cpp:
        (WebCore::toJS):
        * html/CanvasPixelArray.cpp: Removed.
        * html/CanvasPixelArray.h: Removed.
        * html/CanvasPixelArray.idl: Removed.
        * html/CanvasRenderingContext2D.cpp:
        (WebCore::createEmptyImageData):
        * html/ImageData.cpp:
        (WebCore::ImageData::ImageData):
        * html/ImageData.h:
        (WebCore::ImageData::data):
        * html/ImageData.idl:
        * platform/graphics/cg/ImageBufferCG.cpp:
        (WebCore::ImageBuffer::getImageData):
        (WebCore::ImageBuffer::putImageData):

2009-01-05  Adam Treat  <adam.treat@torchmobile.com>

        Reviewed by George Staikos.

        Add notification for contentsSizeChanged which the Qt API will
        introduce.

        * loader/EmptyClients.h:
        (WebCore::EmptyChromeClient::contentsSizeChanged):
        * page/Chrome.cpp:
        (WebCore::Chrome::contentsSizeChanged):
        * page/Chrome.h:
        * page/ChromeClient.h:
        * page/FrameView.cpp:
        (WebCore::FrameView::setContentsSize):
        * page/FrameView.h:
        * platform/HostWindow.h:
        * platform/ScrollView.h:

2009-01-05  Anders Carlsson  <andersca@apple.com>

        Build fix.

        * plugins/PluginView.h:
        (WebCore::PluginManualLoader::~PluginManualLoader):

2009-01-05  Anders Carlsson  <andersca@apple.com>

        Reviewed by Kevin Decker.

        Add an abstract PluginManualLoader class and make PluginView inherit from it.

        Add some error checking that currently exists in WebKit (but not for long!)

        * plugins/PluginView.cpp:
        (WebCore::PluginView::didReceiveResponse):
        (WebCore::PluginView::didReceiveData):
        (WebCore::PluginView::didFinishLoading):
        (WebCore::PluginView::didFail):
        * plugins/PluginView.h:

2009-01-05  Adam Treat  <adam.treat@torchmobile.com>

        Reviewed by George Staikos.

        Fixes FrameView to respect the state of scrollbarmode when it is explicitly
        set programatically via a webkit API.

        * loader/FrameLoaderClient.cpp:
        (WebCore::FrameLoaderClient::transitionToCommittedForNewPage):
        * loader/FrameLoaderClient.h:
        * page/FrameView.cpp:
        (WebCore::FrameView::initScrollbars):
        (WebCore::FrameView::updateDefaultScrollbarState):
        * page/FrameView.h:

2009-01-05  Darin Adler  <darin@apple.com>

        Reviewed by Dan Bernstein.

        Bug 23109: REGRESSION: Backwards search in a long document matches incorrectly
        https://bugs.webkit.org/show_bug.cgi?id=23109

        Test: fast/text/find-backwards.html

        * editing/TextIterator.cpp:
        (WebCore::SearchBuffer::append): Fix incorrect size passed to memcpy.
        (WebCore::SearchBuffer::search): Handle case where we have an empty buffer but
        we're at a break; must not try to search because ICU will give us an error.
        Fix incorrect size passed to memcpy and memmove.
        (WebCore::findPlainText): Fix case where we found a match and need to search
        again because we want to find the last match. We need to try again without
        adding any more text or handling the break before moving on.

2009-01-05  Adam Treat  <adam.treat@torchmobile.com>

        Fix the Qt build

        * bridge/runtime_object.cpp:
        (JSC::RuntimeObjectImp::put):

2009-01-05  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Sam Weinig.

        Fix platforms that don't have Workers enabled.

        * platform/ThreadGlobalData.cpp: (WebCore::threadGlobalData): Create ThreadGlobalData in
        two stages, so that EventNames constructor can access the just-created atomic string table.
        This matches what happens in ThreadSpecific case.

2009-01-05  Alexey Proskuryakov  <ap@webkit.org>

        Suggested by Dave Levin.

        Mac release build fix.

        * WebCore.base.exp: Remove ThreadGlobalData::eventNames(), which is now inline.

2009-01-05  Darin Adler  <darin@apple.com>

        * dom/Document.cpp: Fix build. Oops again.

2009-01-05  Darin Adler  <darin@apple.com>

        Reviewed by Anders Carlsson.

        Fix hang whenever following an anchor.

        * dom/Document.cpp:
        (WebCore::Document::findAnchor): Oops!

2009-01-05  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=23073
        <rdar://problem/6471129> Workers crash on Windows Release builds

        * platform/ThreadGlobalData.cpp: (WebCore::ThreadGlobalData::ThreadGlobalData):
        * platform/ThreadGlobalData.h: (WebCore::ThreadGlobalData::eventNames):
        Now that ThreadSpecific sets up the pointer before invoking data constructor, we can
        initialize EventNames right away.

2009-01-05  Darin Adler  <darin@apple.com>

        Reviewed by Anders Carlsson.

        Bug 23106: HTMLFormCollection::namedItem ignores caseSensitive argument
        https://bugs.webkit.org/show_bug.cgi?id=23106

        This led me to a bunch of dead code. It turns out that HTML collections
        were carrying the case-insensitive code just so they could be used to
        find anchors, something we can do more simply and efficiently without
        creating a DOM HTMLCollection object.

        No behavior change. Just adding a new function findAnchor function and
        removing some dead code.

        * dom/Document.cpp:
        (WebCore::Document::findAnchor): Added.
        * dom/Document.h: Ditto.

        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::accessKey): Take and return AtomicString
        references for better efficiency.
        (WebCore::HTMLAnchorElement::setAccessKey): Ditto.
        (WebCore::HTMLAnchorElement::charset): Ditto.
        (WebCore::HTMLAnchorElement::setCharset): Ditto.
        (WebCore::HTMLAnchorElement::coords): Ditto.
        (WebCore::HTMLAnchorElement::setCoords): Ditto.
        (WebCore::HTMLAnchorElement::setHref): Ditto.
        (WebCore::HTMLAnchorElement::hreflang): Ditto.
        (WebCore::HTMLAnchorElement::setHreflang): Ditto.
        (WebCore::HTMLAnchorElement::name): Ditto.
        (WebCore::HTMLAnchorElement::setName): Ditto.
        (WebCore::HTMLAnchorElement::rel): Ditto.
        (WebCore::HTMLAnchorElement::setRel): Ditto.
        (WebCore::HTMLAnchorElement::rev): Ditto.
        (WebCore::HTMLAnchorElement::setRev): Ditto.
        (WebCore::HTMLAnchorElement::shape): Ditto.
        (WebCore::HTMLAnchorElement::setShape): Ditto.
        (WebCore::HTMLAnchorElement::setTarget): Ditto.
        (WebCore::HTMLAnchorElement::type): Ditto.
        (WebCore::HTMLAnchorElement::setType): Ditto.
        * html/HTMLAnchorElement.h: Ditto.

        * html/HTMLCollection.cpp:
        (WebCore::HTMLCollection::checkForNameMatch): Changed argument to an
        AtomicString and removed the caseSensitive boolean, since we're now always
        case sensitive.
        (WebCore::HTMLCollection::namedItem): Ditto.
        (WebCore::HTMLCollection::nextNamedItem): Ditto.
        * html/HTMLCollection.h: Ditto.
        * html/HTMLFormCollection.cpp:
        (WebCore::HTMLFormCollection::getNamedItem): Ditto.
        (WebCore::HTMLFormCollection::getNamedFormItem): Ditto.
        (WebCore::HTMLFormCollection::nextNamedItemInternal): Ditto.
        (WebCore::HTMLFormCollection::namedItem): Ditto.
        (WebCore::HTMLFormCollection::nextNamedItem): Ditto.
        * html/HTMLFormCollection.h: Ditto.
        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::namedItem): Ditto.
        * html/HTMLSelectElement.h: Ditto.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::gotoAnchor): Use the new findAnchor function.
        * page/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::internalLinkElement): Ditto.

2009-01-05  Darin Adler  <darin@apple.com>

        Reviewed by Anders Carlsson.

        Bug 23104: minor mistakes in init functions for animation and transition events
        https://bugs.webkit.org/show_bug.cgi?id=23104

        Test: fast/events/init-events.html

        Also fixed two StorageEvent problems the test case uncovered:

            Made document.createEvent("StorageEvent") work.
            Allow null values for StorageEvent.oldValue and StorageEvent.newValue.

        * dom/Document.cpp:
        (WebCore::Document::createEvent): Sorted alphabetically by the name of the event
        class. Added StorageEvent.

        * dom/UIEvent.idl: Fixed typo in a comment.

        * dom/WebKitAnimationEvent.cpp:
        (WebCore::WebKitAnimationEvent::initWebKitAnimationEvent): Use all the arguments.
        * dom/WebKitTransitionEvent.cpp:
        (WebCore::WebKitTransitionEvent::initWebKitTransitionEvent): Ditto.

        * storage/StorageEvent.idl: Use the ConvertNullToNullString keyword on the
        arguments to initStorageEvent so it can create events with null values for the
        oldValue and newValue, just like the real storage events. Note that the properties
        already had ConvertNullStringTo=Null, so this is just the other half of that.

2009-01-05  Darin Adler  <darin@apple.com>

        Reviewed by Alexey Proskuryakov.

        Bug 23102: turn on unused parameter warnings in WebCore
        https://bugs.webkit.org/show_bug.cgi?id=23102

        First step: Fix the simple cases where we can just remove an argument name.
        Also made a few more things protected and private.

        * many files

2009-01-05  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=23115
        Create a version of ASSERT for use with otherwise unused variables

        * loader/appcache/ApplicationCacheStorage.cpp:
        (WebCore::ApplicationCacheStorage::verifySchemaVersion): Use the new ASSERT_UNUSED macro.

2009-01-05  Alexey Proskuryakov  <ap@webkit.org>

        Non-Mac build fix.

        * loader/appcache/ApplicationCacheStorage.cpp: Include wtf/StringExtras.h for snprintf.

2009-01-05  Adam Treat  <adam.treat@torchmobile.com>

        Reviewed by George Staikos.

        Remove unnecessary methods from EmptyFrameLoaderClient

        * loader/EmptyClients.h:

2009-01-05  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=23077
        Make application cache use SQLite built-in user_version

        * loader/appcache/ApplicationCacheStorage.cpp:
        (WebCore::ApplicationCacheStorage::verifySchemaVersion): Changed to track versions with
        PRAGMA user_version.

        * loader/appcache/ApplicationCacheResource.h: (WebCore::ApplicationCacheResource::):
        Used the occasion to get rid of the hole in bitmask that was a leftover from opportunistic
        cache entries.

2009-01-04  David Smith  <catfish.man@gmail.com>

        Reviewed by Oliver Hunt.

        https://bugs.webkit.org/show_bug.cgi?id=23084
        Avoid redundant AtomicString conversions

        * dom/Node.cpp:
        (WebCore::Node::getElementsByTagName): Pass starAtom instead of "*"
        (WebCore::Node::getElementsByTagNameNS): Take an AtomicString for the namespace URI
        (WebCore::Node::isDefaultNamespace): Ditto
        (WebCore::Node::lookupPrefix): Ditto
        (WebCore::Node::lookupNamespacePrefix): Ditto
        * dom/Node.h: Ditto

2009-01-04  Darin Adler  <darin@apple.com>

        Reviewed by Oliver Hunt.

        Bug 23105: canvas setFillColor function ignores alpha argument
        https://bugs.webkit.org/show_bug.cgi?id=23105

        Test: fast/canvas/set-colors.html

        * html/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::setFillColor): Pass alpha value through instead
        of ignoring it and always passing 1.

        * html/CanvasStyle.cpp:
        (WebCore::CanvasStyle::applyStrokeColor): Fix spelling of transparent in comments.
        (WebCore::CanvasStyle::applyFillColor): Ditto.

2009-01-04  Darin Adler  <darin@apple.com>

        Bug 23086: REGRESSION(r39540/r39541): Windows build fails due to ICU errors
        https://bugs.webkit.org/show_bug.cgi?id=23086

        * editing/TextIterator.cpp: Check UCONFIG_NO_COLLATION and don't compile
        in the new search path if it's 0.

2009-01-04  David Kilzer  <ddkilzer@apple.com>

        Don't install *.idl and *.in files as resources

        Reviewed by Oliver Hunt.

        Don't install these files as resources in the WebCore framework:
        - WMLAttributeNames.in
        - WMLTagNames.in
        - WorkerContext.idl
        - WorkerLocation.idl
        - WorkerNavigator.idl

        * WebCore.xcodeproj/project.pbxproj: Removed resources.

2009-01-04  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Darin Adler

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

        If an object gets a Layout hint, and the style change will result in
        the creation of a RenderLayer, then we need to repaint the old position
        of the object. This was done for transform, but we have to test opacity too.

        Test: fast/repaint/create-layer-repaint.html

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

2009-01-04  Darin Adler  <darin@apple.com>

        Reviewed by Dan Bernstein.

        Bug 23103: Safari's auto-fill no longer works for <select> elements
        https://bugs.webkit.org/show_bug.cgi?id=23103
        rdar://problem/6472061

        * bindings/objc/DOMHTML.mm:
        (-[DOMHTMLSelectElement _activateItemAtIndex:]): Implemented this.

2009-01-04  Adam Treat  <adam.treat@torchmobile.com>

        Reviewed by George Staikos.

        Add fixedLayoutSize feature to ScrollView to allow for controlling the
        layout beyond the constraint of the current viewports dynamic size

        * css/MediaQueryEvaluator.cpp:
        (WebCore::heightMediaFeatureEval):
        (WebCore::widthMediaFeatureEval):
        * dom/Element.cpp:
        (WebCore::Element::clientWidth):
        (WebCore::Element::clientHeight):
        * loader/FrameLoaderClient.cpp:
        (WebCore::FrameLoaderClient::transitionToCommittedForNewPage):
        * loader/FrameLoaderClient.h:
        * page/FrameView.cpp:
        (WebCore::FrameView::layout):
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::ScrollView):
        (WebCore::ScrollView::layoutWidth):
        (WebCore::ScrollView::layoutHeight):
        (WebCore::ScrollView::fixedLayoutSize):
        (WebCore::ScrollView::setFixedLayoutSize):
        (WebCore::ScrollView::useFixedLayout):
        (WebCore::ScrollView::setUseFixedLayout):
        * platform/ScrollView.h:
        * rendering/RenderView.cpp:
        (WebCore::RenderView::viewHeight):
        (WebCore::RenderView::viewWidth):
        * rendering/RenderView.h:

2009-01-03  Rob Buis  <rwlbuis@gmail.com>

        Reviewed by Darin.

        https://bugs.webkit.org/show_bug.cgi?id=22660
        SVG elements that are moved are nor fully invalidated/earsed

        Mark the SVG root as needing a layout when its position changes.

        Tests: svg/custom/circle-move-invalidation.svg

        * rendering/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::position):
        * rendering/RenderSVGRoot.h:

2009-01-03  Steve Falkenburg  <sfalken@apple.com>

        Build fix.

        * loader/FrameLoader.h:

2009-01-02  Cary Clark  <caryclark@google.com>

        Reviewed and landed by Darin Adler.

        Bug 22963: write icons before reading them
        https://bugs.webkit.org/show_bug.cgi?id=22963

        Reverse the order in the icon database main thread loop to
        write the pending icons to the database before trying
        to read any requested icons. This ensures that a requested icon
        has the correct data when read.

        * loader/icon/IconDatabase.cpp:
        (WebCore::IconDatabase::syncThreadMainLoop):

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

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadItem): One small thing I forgot in my last check-in.
        This cuts down on the number of hash table operations during loading.

2009-01-02  Dmitry Titov  <dimich@chromium.org>

        Reviewed and landed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=23025
        DOMTimer lifetime cleanup: timeoutMap methods on Document now do not delete the timer.
        Instead, all 3 places that delete timers do it directly calling 'delete' and then timer's dtor removes the ID from the timeoutMap.
        Note that in case the context is destroyed and timers are deleted at once, the check in ~DOMTimer() prevents
        unnecessary HashMap remove in case the Document is being destroyed.

        * bindings/js/DOMTimer.cpp:
        (WebCore::DOMTimer::~DOMTimer): removes the id from the timeoutMap.
        (WebCore::DOMTimer::install):
        (WebCore::DOMTimer::removeById): simply uses 'delete this'.
        (WebCore::DOMTimer::fired): same.
        (WebCore::DOMTimer::contextDestroyed): same.
        * dom/Document.cpp:
        (WebCore::Document::removeTimeout): now it only removes the id from the map, does not delete the timer.

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

        Reviewed by Sam Weinig.

        Bug 23072: REGRESSION (r37371): In the Dictionary application, scroll bar appears
        inside its web view when resizing its window
        https://bugs.webkit.org/show_bug.cgi?id=23072
        rdar://problem/6368028

        The first attempt at fixing this did not work.
        This time I was able to reproduce the bug and test the fix.

        Bug 11212: REGRESSION: Activity window doesn't always list all files until refresh
        https://bugs.webkit.org/show_bug.cgi?id=11212
        rdar://problem/4959702

        I had to fix this second bug because otherwise the WebKit code to trigger the first
        fix didn't run.

        Also fixes memory use that kept growing as we maintained a set of all URLs loaded in
        a particular frame. Bad idea! It's bad enough that we do it for each document, but
        the old version kept the set around forever as you moved from one document to the next.

        * html/HTMLFrameElementBase.cpp:
        (WebCore::HTMLFrameElementBase::parseMappedAttribute): Change this so that we allow
        turning off scrolling when the quirk is enabled. We just don't allow turning it on.
        This fixes one of the two problems with the initial patch; the other fix is in WebKit.

        * loader/DocumentLoader.h: Moved didTellClientAboutLoad and haveToldClientAboutLoad
        here from FrameLoader. The old way meant that a given frame would forever remember
        the URL of any resources loaded in that frame and never send any "loaded from cache"
        client calls about those URLs.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadResourceSynchronously): Removed call to didTellCientAboutLoad.
        This is now handled by dispatchWillSendRequest, which is safer since that's the actual
        function that tells the client about the load.
        (WebCore::FrameLoader::loadedResourceFromMemoryCache): Changed calls to
        haveToldClientAboutLoad and didTellClientAboutLoad to call the document loader.
        Also removed the call in the case where we don't load from the cache, since
        dispatchWillSendRequest now takes care of it.
        (WebCore::FrameLoader::dispatchWillSendRequest): Put calls to didTellClientAboutLoad
        here. Call it both on the URL we pass in and the URL the client returns; we won't
        tell the client about either if it's loaded from the memory cache.

        * loader/FrameLoader.h: Removed didTellClientAboutLoad, haveToldClientAboutLoad, and
        m_urlsClientKnowsAbout.

        * loader/SubresourceLoader.cpp: Removed unneeded load function that called
        didTellClientAboutLoad. That's now taken care of in dispatchWillSendRequest.

        * loader/SubresourceLoader.h: Removed load function. Also made all members private
        except for create and clearClient.

2009-01-02  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Darin Adler

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

        Fix GIF animation by ensuring that the signature of
        startAnimation() in the base class matches the method in BitmapImage.

        Test: fast/backgrounds/animated-gif-as-background.html

        * platform/graphics/Image.h:
        (WebCore::Image::startAnimation):

2009-01-02  David Smith  <catfish.man@gmail.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=22699
        Enable NodeList caching for getElementsByTagName

        test: fast/dom/getelementsbytagnamens-mixed-namespaces.html

        * dom/Document.cpp:
        (WebCore::FormElementKeyHash::hash): Use WTF::stringHashingStartValue
        * dom/Node.cpp:
        (WebCore::Node::getElementsByTagNameNS): Ensure rare data and add a node list cache
        (WebCore::NodeListsNodeData::invalidateCaches): Invalidate the tag name node list cache as well as the others
        (WebCore::NodeListsNodeData::isEmpty): Check the tag name node list cache as well as the others
        * dom/NodeRareData.h: Add m_tagNodeListCaches
        * dom/QualifiedName.cpp:
        * dom/QualifiedName.h: Move QNameHash to the header, make it work on QualifiedNames, and rename to QualifiedNameHash
        * dom/StyledElement.cpp:
        (WebCore::MappedAttributeHash::hash): Use WTF::stringHashingStartValue
        * dom/TagNodeList.cpp:
        (WebCore::TagNodeList::TagNodeList): Add a NodeList cache argument
        * dom/TagNodeList.h:
        (WebCore::TagNodeList::create): Add a NodeList cache argument
        * platform/text/StringHash.h:
        (WebCore::CaseFoldingHash::hash): Use WTF::stringHashingStartValue
        * platform/text/TextEncodingRegistry.cpp:
        (WebCore::TextEncodingNameHash::hash): Use WTF::stringHashingStartValue

2009-01-02  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Darin Adler

        Fix for https://bugs.webkit.org/show_bug.cgi?id=23066 & <rdar://problem/6028417>
        Full Page Zoom: a <video> element that doesn't include width/height attribute does not scale

        * rendering/RenderVideo.cpp:
        (WebCore::RenderVideo::calcReplacedWidth): Multiply aspect ratio width by style()->effectiveZoom()
        (WebCore::RenderVideo::calcReplacedHeight): Multiply aspect ratio height by style()->effectiveZoom()

2009-01-02  David Kilzer  <ddkilzer@apple.com>

        BUILD FIX (r39552): Add mediaControls.css to other build files

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

2009-01-02  David Kilzer  <ddkilzer@apple.com>

        Try to fix Wx build after r39427

        * platform/graphics/wx/PathWx.cpp:
        (WebCore::Path::strokeBoundingRect): Added stub.

2009-01-02  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Adele Peterson.

        <rdar://problem/6471356> Failed assertion on quit

        * platform/ThreadGlobalData.cpp: (WebCore::ThreadGlobalData::~ThreadGlobalData):
        Only assert that empty string are all removed on secondary threads.

2009-01-02  David Kilzer  <ddkilzer@apple.com>

        Bug 23081: These files are no longer part of the KDE libraries

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

        Reviewed by Darin Adler.

        Removed "This file is part of the KDE libraries" comment from
        source files.  Added or updated Apple copyrights as well.

        No tests since there are only changes to comments.

        * bridge/testbindings.cpp:
        * html/HTMLEntityNames.gperf:
        * loader/Cache.h:
        * loader/CachedCSSStyleSheet.h:
        * loader/CachedResourceClient.h:
        * loader/CachedResourceClientWalker.cpp:
        * loader/CachedResourceClientWalker.h:
        * loader/CachedScript.cpp:
        * loader/CachedScript.h:
        * loader/CachedXBLDocument.cpp:
        * loader/CachedXBLDocument.h:
        * loader/CachedXSLStyleSheet.cpp:
        * loader/CachedXSLStyleSheet.h:
        * rendering/GapRects.h:
        * xml/XMLSerializer.cpp:

2009-01-02  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Darin Adler

        Use an OwnPtr for m_chromeClient.

        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::~SVGImage):
        (WebCore::SVGImage::dataChanged):
        * svg/graphics/SVGImage.h:

2009-01-02  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Darin Adler

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

        Repaints inside of an SVGImage were thrown on the floor,
        which broke incremental painting due to loading, or SVG animation.
        Fix this by assigning the SVGImage a ChromeClient subclass that passes
        along repaints via a new method on ImageObserver, which also takes
        a rect parameter for the changed rect, allowing incremental repaints.
        Fix RenderImage::imageChanged to take advantage of this changedRect to
        only repaint the changed parts of the image.

        This also enables incremental painting for canvas-as-image, so
        add tests for that too.

        Tests: fast/backgrounds/animated-svg-as-background.html
               fast/backgrounds/animated-svg-as-mask.html
               fast/canvas/canvas-as-image-incremental-repaint.html
               fast/canvas/canvas-as-image.html
               fast/images/animated-svg-as-image.html

        * css/CSSCanvasValue.cpp:
        (WebCore::CSSCanvasValue::canvasChanged):
        * loader/CachedImage.cpp:
        (WebCore::CachedImage::notifyObservers):
        (WebCore::CachedImage::data):
        (WebCore::CachedImage::changedInRect):
        * loader/CachedImage.h:
        * loader/CachedResourceClient.h:
        (WebCore::CachedResourceClient::imageChanged):
        * platform/graphics/ImageObserver.h:
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::imageChanged):
        * rendering/RenderBox.h:
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::imageChanged):
        * rendering/RenderImage.h:
        * rendering/RenderListMarker.cpp:
        (WebCore::RenderListMarker::imageChanged):
        * rendering/RenderListMarker.h:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::imageChanged):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::imageChanged):
        * rendering/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::imageChanged):
        * rendering/RenderSVGImage.h:
        * rendering/RenderScrollbarPart.cpp:
        (WebCore::RenderScrollbarPart::imageChanged):
        * rendering/RenderScrollbarPart.h:
        * rendering/RenderTableCol.cpp:
        (WebCore::RenderTableCol::imageChanged):
        * rendering/RenderTableCol.h:
        * rendering/RenderTableRow.cpp:
        (WebCore::RenderTableRow::imageChanged):
        * rendering/RenderTableRow.h:
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::imageChanged):
        * rendering/RenderTableSection.h:
        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImageChromeClient::SVGImageChromeClient):
        (WebCore::SVGImageChromeClient::image):
        (WebCore::SVGImageChromeClient::chromeDestroyed):
        (WebCore::SVGImageChromeClient::repaint):
        (WebCore::SVGImage::SVGImage):
        (WebCore::SVGImage::~SVGImage):
        (WebCore::SVGImage::dataChanged):
        * svg/graphics/SVGImage.h:

2009-01-02  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Darin Adler

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

        Pull media controls css out of html4.css into separate file. Don't generate
        wml, svg, or media css globals unless the feature is enabled.

        * DerivedSources.make:
            Don't include css for unused features.

        * WebCore.xcodeproj/project.pbxproj:
            include mediaControls.css

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::styleForElement):
            don't parse or add media css unless VIDEO feature is enabled and the target
            element is video or audio

        * css/html4.css:
            moved media controls css to mediaControls.css

        * css/mediaControls.css: Added.

2009-01-02  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=23022
        Fix multiple issues with appcache online whitelist handling

        Test: http/tests/appcache/online-whitelist.html

        * loader/appcache/ApplicationCache.cpp:
        (WebCore::ApplicationCache::isURLInOnlineWhitelist): Test whitelist entries as prefixes,
        making it possible to use them for CGI invocation (as required by HTML5).

        * loader/DocumentLoader.cpp: (WebCore::DocumentLoader::shouldLoadResourceFromApplicationCache):
        Re-ordered checks, so that resources that are cached, but are also listed in online whitelist
        are loaded from the cache. This is required by HTML5, although Firefox doesn't match.

        * loader/appcache/ManifestParser.cpp:
        (WebCore::parseManifest):
        * loader/appcache/ManifestParser.h:
        * loader/appcache/ApplicationCache.h:
        (WebCore::ApplicationCache::onlineWhitelist):
        * loader/appcache/ApplicationCacheStorage.cpp:
        (WebCore::ApplicationCacheStorage::store):
        (WebCore::ApplicationCacheStorage::loadCache):
        Changed online whitelist to be a vector of URLs, which is better suited for the new algorithm.

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

        Reviewed by Oliver Hunt.

        Bug 23072: REGRESSION (r37371): In the Dictionary application, scroll bar appears inside its web view when resizing its window
        https://bugs.webkit.org/show_bug.cgi?id=23072
        rdar://problem/6368028

        * WebCore.base.exp: Updated.
        * WebCore.xcodeproj/project.pbxproj: Mark HTMLHeadElement.h Private so it can be used in WebKit.

        * dom/Document.cpp:
        (WebCore::Document::Document): Initialize m_frameElementsShouldIgnoreScrolling to false.
        * dom/Document.h: Added setFrameElementsShouldIgnoreScrolling, frameElementsShouldIgnoreScrolling,
        and m_frameElementsShouldIgnoreScrolling.

        * html/HTMLFrameElementBase.cpp:
        (WebCore::HTMLFrameElementBase::parseMappedAttribute): Don't allow changes to the scrolling attribute
        to affect the scrolling mode if frameElementsShouldIgnoreScrolling() returns true. This is only
        triggered on Mac OS X when running the Dictionary application.

2009-01-02  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=23036
        <rdar://problem/6451666> Implement AppCache fallback entries (23036)

        Test: http/tests/appcache/fallback.html

        * loader/FrameLoader.cpp: (WebCore::FrameLoader::loadResourceSynchronously): Use fallback
        entries if normal loading fails.

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::shouldLoadResourceFromApplicationCache): Do not prevent normal
        loading for resources that match fallback namespaces - they are only loaded from the cache
        if that fails.
        (WebCore::DocumentLoader::getApplicationCacheFallbackResource): Get a fallback entry for
        resource from associated appcache, or from passed in one, if any.
        (WebCore::DocumentLoader::scheduleLoadFallbackResourceFromApplicationCache): If a fallback
        entry for resourse exists, add it to pending substitute loads.

        * loader/DocumentLoader.h: Added new functions for loading fallback data for resources.

        * loader/ResourceLoader.h:
        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::scheduleLoadFallbackResourceFromApplicationCache): This function
        is called when normal loading fails (which includes network failures, 4xx and 5xx responses,
        and cross-origin redirects) to load appcache fallback data instead. It can use either the
        cache that is associated with the browsing context, or a custom one if association is yet
        to take place.
        (WebCore::ResourceLoader::willSendRequest): Try using fallback data.
        (WebCore::ResourceLoader::didReceiveResponse): Ditto.
        (WebCore::ResourceLoader::didFail): Ditto.

        * loader/MainResourceLoader.cpp:
        (WebCore::MainResourceLoader::didReceiveResponse): Locate an appropriate cache and load
        fallback data from it if loading fails. The browsing context may still be associated with
        its previous document here, so the cache to load from must be passed explicitly.
        (WebCore::MainResourceLoader::didFail): Ditto.
        (WebCore::MainResourceLoader::load): Remove unnecessary check and FIXME.

        * loader/appcache/ApplicationCache.cpp:
        (WebCore::ApplicationCache::setFallbackURLs):
        (WebCore::ApplicationCache::urlMatchesFallbackNamespace):
        * loader/appcache/ApplicationCache.h:
        (WebCore::ApplicationCache::fallbackURLs):
        * loader/appcache/ApplicationCacheStorage.cpp:
        (WebCore::ApplicationCacheStorage::cacheGroupForURL):
        (WebCore::ApplicationCacheStorage::fallbackCacheGroupForURL):
        (WebCore::ApplicationCacheStorage::store):
        (WebCore::ApplicationCacheStorage::loadCache):
        (WebCore::ApplicationCacheStorage::storeCopyOfCache):
        * loader/appcache/ApplicationCacheStorage.h:
        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::ApplicationCacheGroup::fallbackCacheForMainRequest):
        (WebCore::ApplicationCacheGroup::didFinishLoadingManifest):
        * loader/appcache/ApplicationCacheGroup.h:
        Implement fallback map saving and loading, pass it to the cache.

        * loader/appcache/ManifestParser.h: Use a correct data structure for fallback map - keys
        are matched by prefix, so HAshMap cannot be used.

        * loader/appcache/ManifestParser.cpp: (WebCore::parseManifest): Fix bugs in fallback section
        parsing.

2009-01-01  Oliver Hunt  <oliver@apple.com>

        Reviewed by Dan Bernstein.

        <rdar://problem/6450530> WebCore::FontPlatformData should not leak

        Whoops, previous patch should also have fixed the font referencing in
        the constructor.

        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/mac/FontPlatformDataMac.mm:
        (WebCore::FontPlatformData::FontPlatformData):

2009-01-01  Oliver Hunt  <oliver@apple.com>

        Reviewed by Dan Bernstein.

        <rdar://problem/6450530> WebCore::FontPlatformData should not leak

        Make sure we only adopt the new font, rather than re-referencing (and so leaking).

        * platform/graphics/mac/FontPlatformDataMac.mm:
        (WebCore::FontPlatformData::setFont):

2009-01-01  Darin Adler  <darin@apple.com>

        Reviewed by Dan Bernstein.

        Bug 23071: REGRESSION (r39536): New test failures after committing patch in bug 23051 (ICU search)
        https://bugs.webkit.org/show_bug.cgi?id=23071

        Also fix some things that Dan suggested during review of the ICU search patch that I forgot
        the first time around.

        * editing/TextIterator.cpp: Use ICU search on all platforms that use ICU, now that
        we've double checked it works everywhere, removing HAVE_ICU_SEARCH entirely.
        Removed unused m_atBreak data member from the non-ICU code path.
        (WebCore::TextIterator::TextIterator): Move null check up.
        (WebCore::TextIterator::handleTextBox): Fix mistake that made the iterator include
        collapsed whitespace. This was left over from an earlier version of the patch.
        (WebCore::SimplifiedBackwardsTextIterator::SimplifiedBackwardsTextIterator):
        Move null check up.

2009-01-01  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Darin Adler, Oliver Hunt

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

        Enable incremental painting of canvas. This turns incremental painting
        back on, and fixes issues with stroke width and miters, calling willDraw()
        for strokeText and fillText, and taking shadows into account.

        Test: fast/canvas/canvas-incremental-repaint.html

        * html/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasStrokeStyleApplier::CanvasStrokeStyleApplier):
        (WebCore::CanvasStrokeStyleApplier::strokeStyle):
        (WebCore::CanvasRenderingContext2D::stroke):
        (WebCore::CanvasRenderingContext2D::willDraw):
        (WebCore::CanvasRenderingContext2D::putImageData):
        (WebCore::CanvasRenderingContext2D::drawTextInternal):
        * html/CanvasRenderingContext2D.h:
        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::willDraw):
        * platform/graphics/FloatRect.h:
        (WebCore::mapRect): new method to map a rect contained
        in one rect to an equivalent rect inside another rect.

2008-12-29  Konstantin Käfer  <kkaefer@gmail.com>

        Reviewed by Tim Hatcher.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=17229
        <rdar://problem/5732829> Inspector should show properties of all JS objects in Console

        Prints objects not as plain text but makes them expandable so that
        they can be inspected.

        * inspector/front-end/Console.js:
        (): added a parameter "inline" to the WebInspector.Console._format function which indicates
            whether the object is printed in the context of another string (with console.log()) or
            as sole element.
        (.): objects and DOM nodes are now printed in an expandable form when they are printed alone
            (i.e. not in the context of a console.log() string) so that they can be inspected.
        * inspector/front-end/PropertiesSection.js:
        (WebInspector.PropertiesSection.prototype.set title): Allow DOM Nodes as title instead of strings
            in that case, the Node is inserted into the title instead of the string value of the passed
            object. This is used for displaying linkified titles, for example when inspecting DOM nodes,
            the syntax highlighted HTML representation is shown instead of the plain source code.
        * inspector/front-end/inspector.css: correct the offsetParent for the expandable object inspector.

2009-01-01  Darin Adler  <darin@apple.com>

        Reviewed by Dan Bernstein.

        Bug 23051: web page searching should use ICU's search so it can ignore diacritical differences
        https://bugs.webkit.org/show_bug.cgi?id=23051
        rdar://problem/3574497

        Test: editing/execCommand/findString-diacriticals.html

        * editing/TextIterator.cpp: Changed the CircularSearchBuffer class to have a new
        name, since it doesn't always use a circular buffer any more. Changed the interface
        so it can work well in the new chunky comparison mode for ICU search, and also
        added private data members for both the ICU-search and non-ICU-search code paths.
        (WebCore::TextIterator::TextIterator): Use the versions of the Range functions
        that don't take an exception code.
        (WebCore::TextIterator::handleTextBox): Added a special case to handle the position
        of a collapsed-away space better. This is not needed for search mechanism, but was
        helpful in an earlier version of this patch, and is still an improvement.
        (WebCore::SimplifiedBackwardsTextIterator::SimplifiedBackwardsTextIterator): Use the
        versions of the Range functions that don't take an exception code.
        (WebCore::CharacterIterator::range): Ditto.
        (WebCore::characterSubrange): Added. Helper function used in both places below where
        we want to convert a range and character offsets into a subrange.
        (WebCore::WordAwareIterator::advance): Use the versions of the Range functions that
        don't take an exception code.
        (WebCore::createSearcher): Added.
        (WebCore::searcher): Added.
        (WebCore::lockSearcher): Added.
        (WebCore::unlockSearcher): Added.
        (WebCore::SearchBuffer::SearchBuffer): Added.
        (WebCore::SearchBuffer::~SearchBuffer): Added.
        (WebCore::SearchBuffer::append): Added.
        (WebCore::SearchBuffer::atBreak): Added.
        (WebCore::SearchBuffer::reachedBreak): Added.
        (WebCore::SearchBuffer::search): Added.
        (WebCore::SearchBuffer::length): Added.
        (WebCore::TextIterator::subrange): Changed to call the characterSubrange
        function above.
        (WebCore::TextIterator::rangeFromLocationAndLength): Use the versions of the
        Range functions that don't take an exception code. Also tweak some other details
        of the code.
        (WebCore::isAllCollapsibleWhitespace): Added.
        (WebCore::collapsedToBoundary): Added.
        (WebCore::findPlainText): Rewrote to use new interface and streamline the
        logic a bit.

        Add the relevant files in the icu directory. As icu/README says, the "icu"
        directory is really just for Mac OS X, where we have the ICU library but not
        the headers installed. It should be moved inside platform/mac at some point
        to make this more clear (and the copy in JavaScriptCore should be moved
        somewhere similar for the same reason).

        * icu/unicode/ucoleitr.h: Added.
        * icu/unicode/usearch.h: Added.

2009-01-01  Oliver Hunt  <oliver@apple.com>

        Reviewed by Cameron Zwarich.

        CrashTracer: [REGRESSION] 1090 crashes in Safari at com.apple.JavaScriptCore: KJS::JSGlobalObject::stopTimeoutCheck + 0
        <rdar://problem/5821130>

        This was caused by a plugin instance calling into JS code that removed the plugin
        object.  This fix is to cache the global object locally in a ProtectedPtr so we don't
        need to rely on the continued existence of the plugin instance.

        * bridge/NP_jsobject.cpp:
        (_NPN_InvokeDefault):
        (_NPN_Invoke):
        (_NPN_Evaluate):
        (_NPN_Construct):

2008-12-31  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Holger Freyther.

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

        MinGW build failure.

        * platform/graphics/qt/SimpleFontDataQt.cpp:
        (WebCore::SimpleFontData::containsCharacters):

2008-12-31  Alexander V. Butenko  <alex@digiqube.com>

        Reviewed by Holger Freyther.

        https://bugs.webkit.org/show_bug.cgi?id=22750
        [gtk] webkit up to r39121 crash on image urls like
        http:///sitename.com

        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::ResourceHandle::start):

2008-12-31  Hiroyuki Ikezoe  <poincare@ikezoe.net>

        Reviewed by Holger Freyther.

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

        * platform/graphics/gtk/SimpleFontDataPango.cpp:
        (WebCore::SimpleFontData::determinePitch): Do not invoke
        isFixedPitch() when the font is a custom font.

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

        Reviewed by Cameron Zwarich.

        More work on Bug 3781: Animation via canvas could be faster
        <https://bugs.webkit.org/show_bug.cgi?id=3781>

        Make use of the fast path parsing of color strings that Color
        uses.  This improves performance of '#rgb', '#rrggbb', etc and
        named (eg. 'green') colors.

        Improves frame rate of test by around 40%

        * html/CanvasStyle.cpp:
        (WebCore::CanvasStyle::applyStrokeColor):
        (WebCore::CanvasStyle::applyFillColor):

2008-12-30  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Darin Adler

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

        Rather than doing a repaint() inside of computeAbsoluteRepaintRect()
        when there is a reflection, compute the location of the rect inside
        the reflection and take the union of the unreflected and reflected rects.

        Test: fast/repaint/reflection-redraw.html

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::computeAbsoluteRepaintRect):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::reflectedRect):
        * rendering/RenderObject.h:

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

        Reviewed by Adele Peterson.

        - fix <rdar://problem/6469944> REGRESSION(3.2.1-ToT): Repro crash in WebCore::HTMLInputElement::updatePlaceholderVisibility opening http://billshrink.com

        Test: fast/forms/placeholder-non-textfield.html

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::parseMappedAttribute): Only call
        updatePlaceholderVisibility() when the placeholder attribute changes if
        the element is a text field.

2008-12-30  Oliver Hunt  <oliver@apple.com>

        Reviewed by Antti Koivisto.

        First step of Bug 3781: Animation via canvas could be faster

        Amortise the cost of calling repaint by coalescing repaint rects
        while the canvas is drawn to.  In a later step we'll stop calling
        repaint() directly, and instead have all dirty canvases repaint
        at the end of JS execution.

        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::willDraw):
        (WebCore::HTMLCanvasElement::paint):
        * html/HTMLCanvasElement.h:

2008-12-30  Cameron Zwarich  <cwzwarich@uwaterloo.ca>

        Reviewed by Antti Koivisto.

        Bug 22931: Using the inspector with purgeable resources leads to assertion failures
        <https://bugs.webkit.org/show_bug.cgi?id=22931>

        Change InspectorResource::sourceString() so that it doesn't attempt to
        unsafely get the data of a purgeable CachedResource.

        * inspector/InspectorController.cpp:
        (WebCore::InspectorResource::sourceString): Attempt to make a purgeable
        resource unpurgeable, and if this not possible, return an empty string.
        * loader/CachedResource.h: Make InspectorResource a friend of CachedResource.

2008-12-29  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=23023
        Remove incomplete support for opportunistic appcache entries

        No change in behavior, thus no test.

        * loader/appcache/ApplicationCacheResource.h:
        (WebCore::ApplicationCacheResource::Type): Removed Opportunistic bit, will re-use when schema
        version changes.

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::scheduleApplicationCacheLoad):
        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::ApplicationCacheGroup::didFinishLoadingManifest):
        * loader/appcache/ApplicationCacheResource.cpp:
        (WebCore::ApplicationCacheResource::dumpType):

2008-12-29  Dirk Schulze  <krit@webkit.org>

        Reviewed by Oliver Hunt.

        Add arcTo support for Cairo. This is needed by Canvas.
        Cairo has no native support for arcTo. We have to make our
        own implementation.

        [Canvas] Cairo needs arcTo
        https://bugs.webkit.org/show_bug.cgi?id=23003

        * platform/graphics/cairo/PathCairo.cpp:
        (WebCore::Path::addArcTo):

2008-12-29  Oliver Hunt  <oliver@apple.com>

        Reviewed by Cameron Zwarich.

        Bug 23030: Cannot setTransform with a non-invertible ctm

        Removed a series of unnecessary and incorrect checks for an invertible
        transform.

        Test: fast/canvas/canvas-set-properties-with-non-invertible-ctm.html

        * html/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::setStrokeStyle):
        (WebCore::CanvasRenderingContext2D::setFillStyle):
            These properties are not effected by the current CTM, so there
            is no need to prevent them from being assigned.

        (WebCore::CanvasRenderingContext2D::setTransform):
            The whole point of tracking whether the current CTM was expected to be
            non-invertible was to allow setTransform to be used when the CTM had become
            non-invertible.

        (WebCore::CanvasRenderingContext2D::beginPath):
        (WebCore::CanvasRenderingContext2D::closePath):
            beginPath and closePath change the state of the path, but not any of
            its coordinates so there is no need prevent them from being called.

2008-12-29  Josh Roesslein  <jroesslein@gmail.com>

        Reviewed by Oliver Hunt.

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

        Context menu rendering error when full page zoomed

        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::handleContextMenuEvent):

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

        Reviewed by Mark Rowe.

        Add some basic memory statistic logging for Node.

        * dom/Node.cpp:
        (WebCore::Node::dumpStatistics):
        (WebCore::Node::Node):
        (WebCore::Node::~Node):
        (WebCore::Node::setDocument):
        * dom/Node.h:

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

        Reviewed by Anders Carlsson.

        Remove one use of DeprecatedPtrList.

        * css/CSSRuleList.cpp:
        (WebCore::CSSRuleList::~CSSRuleList):
        (WebCore::CSSRuleList::length):
        (WebCore::CSSRuleList::item):
        (WebCore::CSSRuleList::deleteRule):
        (WebCore::CSSRuleList::append):
        (WebCore::CSSRuleList::insertRule):
        * css/CSSRuleList.h: Change m_lstCSSRules from using DeprecatedPtrList to a Vector.
        I measured no performance change and was comforted by the fact that we use a Vector
        for StyleList, which serves the exact same purpose.

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

        Reviewed by Brady Eidson.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=21797
        <rdar://problem/6310682> REGRESSION: Crash in CFHTTPCookieStorageCopy beneath WebCore::cookies() when
        running fast/dom/document-attribute-js-null.html and http/tests/security/cookies/create-document.html

        Return early if the document is trying to get or set a cookie with an empty cookie url.

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

2008-12-28  Cameron Zwarich  <cwzwarich@uwaterloo.ca>

        Reviewed by Sam Weinig.

        Bug 23016: JavaScriptDebugServer::recompileAllJSFunctions() should not execute JS while reparsing all functions
        <https://bugs.webkit.org/show_bug.cgi?id=23016>
        <rdar://problem/6425077>

        JavaScriptDebugServer::recompileAllJSFunctions() calls sourceParsed() while
        reparsing all JS functions, which will execute JS in the inspector. Depending
        on the order in which functions are recompiled, a function could have a new
        body but other functions that have not been recompiled could have an optimized
        (in the sense of inline caching) call to it, bypassing the check of whether or
        not there is generated bytecode. This leads to a crash caused by accessing
        indices off of a null pointer.

        To fix the problem, simply delay calling sourceParsed() until after all functions
        have been reparsed. The crash isn't 100% reproducible, but on the one test case
        I have, this makes it impossible to reproduce after a large number of attempts,
        when it used to happen every few attempts.

        * inspector/JavaScriptDebugServer.cpp:
        (WebCore::JavaScriptDebugServer::recompileAllJSFunctions):

2008-12-28  Nikolas Zimmermann  <nikolas.zimmermann@torchmobile.com>

        Rubber-stamped by Antti Koivisto.
        Oops, remove some last minute ASSERTS that are obviously wrong.

        * rendering/RenderTextControlMultiLine.cpp:
        (WebCore::RenderTextControlMultiLine::RenderTextControlMultiLine):
        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::RenderTextControlSingleLine):

2008-12-28  Nikolas Zimmermann  <nikolas.zimmermann@torchmobile.com>

        Reviewed by Antti Koivisto.

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

        Don't rely on HTMLFormControlElement in RenderTextControl.

        Introduce an abstract FormControlElement class, containing the
        valueMatchesRenderer/setValueMatchesRenderer, the only HTMLFormControlElement
        specific methods that RenderTextControl relies on.

        This makes it possible for WML to reuse RenderTextControl.
        RenderTextControlSingleLine still relies on HTMLInputElement,
        this will change if WMLInputElement is introduced.

        * GNUmakefile.am:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/FormControlElement.h: Added.
        (WebCore::FormControlElement::~FormControlElement):
        (WebCore::FormControlElement::FormControlElement):
        * html/HTMLFormControlElement.h:
        (WebCore::HTMLFormControlElement::valueMatchesRenderer):
        (WebCore::HTMLFormControlElement::setValueMatchesRenderer):
        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::updateValue):
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::adjustInnerTextStyle):
        (WebCore::RenderTextControl::updateFromElement):
        (WebCore::RenderTextControl::setInnerTextValue):
        (WebCore::RenderTextControl::selectionChanged):
        (WebCore::RenderTextControl::formControlElement):
        * rendering/RenderTextControl.h:
        * rendering/RenderTextControlMultiLine.cpp:
        (WebCore::RenderTextControlMultiLine::RenderTextControlMultiLine):
        (WebCore::RenderTextControlMultiLine::subtreeHasChanged):
        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::RenderTextControlSingleLine):
        (WebCore::RenderTextControlSingleLine::updateFromElement):

2008-12-28  Cameron Zwarich  <cwzwarich@uwaterloo.ca>

        Reviewed by Darin Adler.

        Bug 23006: Many Loader::Host member functions are not safe to use reentrantly
        <https://bugs.webkit.org/show_bug.cgi?id=23006>
        <rdar://problem/6216106>

        Many Loader::Host member functions set m_processingResource to true when they
        begin processing a resource and set it to false when they are done. Thanks to
        JavaScript and the web inspector, almost anything can happen during the
        processing of a resource, including these functions being called reentrantly,
        which is unsafe due to this way of using m_processingResource.

        This can theoretically cause a Loader::Host to be used after it is freed,
        because when Loader::servedPendingRequests() is called, it will free Hosts
        that have m_processingResource set to false.

        To fix this, we replace m_processingResource with m_numResourcesProcessing,
        which is incremented and decremented using a helper object, ProcessingResource.

        There are no occurrences of crashes caused by this bug that are reproducible
        by multiple people, but this fixes the problem of m_processingResource being
        set to false while a Host is still alive.

        * loader/loader.cpp:
        (WebCore::Loader::Host::Host):
        (WebCore::Loader::Host::didFinishLoading): Change to use ProcessingResource
        instead of manually setting m_processingResource.
        (WebCore::Loader::Host::didFail): Ditto.
        (WebCore::Loader::Host::didReceiveData): Ditto.
        * loader/loader.h:
        (WebCore::Loader::Host::ProcessingResource::ProcessingResource): Added.
        (WebCore::Loader::Host::ProcessingResource::~ProcessingResource): Added.
        (WebCore::Loader::Host::processingResource): Change to use m_numResourcesProcessing
        instead of just getting m_processingResource.

2008-12-28  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=23007
        REGRESSION: Timer-related crash when closing Web Inspector

        Test: fast/dom/Window/remove-timeout-crash.html

        * bindings/js/DOMTimer.cpp: (WebCore::DOMTimer::fired): Besides deleting the timer, make
        sure to remove it from a Document map.

2008-12-28  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Anders Carlsson.

        https://bugs.webkit.org/show_bug.cgi?id=23012
        Bring application cache manifest parsing up to date

        Test: http/tests/appcache/manifest-parsing.html

        * loader/appcache/ManifestParser.cpp:
        (WebCore::Mode): Added a constant for unknown sections, which are ignored when parsing. This
        is necessary for future extensions.
        (WebCore::parseManifest): Parse unknown sections correctly. Ignore trailing tokens in
        supported sections.

2008-12-28  Nikolas Zimmermann  <nikolas.zimmermann@torchmobile.com>

        Reviewed by Darin Adler.

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

        RenderTextControl heavily depends on HTMLInputElement & HTMLTextAreaElement.
        It handles multi & single line text control rendering in one class. Split up
        in two new classes: RenderTextControlSingleLine & RenderTextControlMultiLine.

        This has several benefits - code is more readable now, the memory usage
        for RenderTextControlMultiLine is reduced, as all stuff related to search fields
        lives in RenderTextControlSingleLine, and it's easier to introduce an
        abstraction for input/textarea-like elements for other HTML flavours like WML.

        * GNUmakefile.am:
        * WebCore.order:
        * WebCore.pro:
        * WebCore.scons:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::createRenderer):
        (WebCore::HTMLInputElement::defaultEventHandler):
        (WebCore::HTMLInputElement::updatePlaceholderVisibility):
        (WebCore::HTMLInputElement::addSearchResult):
        (WebCore::HTMLInputElement::onSearch):
        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::createRenderer):
        (WebCore::HTMLTextAreaElement::defaultEventHandler):
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::RenderTextControl):
        (WebCore::RenderTextControl::~RenderTextControl):
        (WebCore::RenderTextControl::styleDidChange):
        (WebCore::RenderTextControl::adjustInnerTextStyle):
        (WebCore::RenderTextControl::createSubtreeIfNeeded):
        (WebCore::RenderTextControl::textBlockHeight):
        (WebCore::RenderTextControl::textBlockWidth):
        (WebCore::RenderTextControl::updateFromElement):
        (WebCore::RenderTextControl::setInnerTextValue):
        (WebCore::RenderTextControl::setSelectionRange):
        (WebCore::RenderTextControl::visiblePositionForIndex):
        (WebCore::RenderTextControl::indexForVisiblePosition):
        (WebCore::RenderTextControl::subtreeHasChanged):
        (WebCore::RenderTextControl::scrollbarThickness):
        (WebCore::RenderTextControl::calcHeight):
        (WebCore::RenderTextControl::hitInnerTextBlock):
        (WebCore::RenderTextControl::forwardEvent):
        (WebCore::RenderTextControl::calcPrefWidths):
        (WebCore::RenderTextControl::selectionChanged):
        (WebCore::RenderTextControl::innerTextElement):
        * rendering/RenderTextControl.h:
        (WebCore::RenderTextControl::hasControlClip):
        (WebCore::RenderTextControl::canHaveChildren):
        (WebCore::RenderTextControl::avoidsFloats):
        (WebCore::RenderTextControl::isEdited):
        (WebCore::RenderTextControl::setEdited):
        * rendering/RenderTextControlMultiLine.cpp: Added.
        (WebCore::RenderTextControlMultiLine::RenderTextControlMultiLine):
        (WebCore::RenderTextControlMultiLine::~RenderTextControlMultiLine):
        (WebCore::RenderTextControlMultiLine::subtreeHasChanged):
        (WebCore::RenderTextControlMultiLine::layout):
        (WebCore::RenderTextControlMultiLine::nodeAtPoint):
        (WebCore::RenderTextControlMultiLine::forwardEvent):
        (WebCore::RenderTextControlMultiLine::preferredContentWidth):
        (WebCore::RenderTextControlMultiLine::adjustControlHeightBasedOnLineHeight):
        (WebCore::RenderTextControlMultiLine::baselinePosition):
        (WebCore::RenderTextControlMultiLine::updateFromElement):
        (WebCore::RenderTextControlMultiLine::cacheSelection):
        (WebCore::RenderTextControlMultiLine::createInnerTextStyle):
        * rendering/RenderTextControlMultiLine.h: Added.
        (WebCore::RenderTextControlMultiLine::isTextArea):
        * rendering/RenderTextControlSingleLine.cpp: Added.
        (WebCore::RenderTextControlSingleLine::RenderTextControlSingleLine):
        (WebCore::RenderTextControlSingleLine::~RenderTextControlSingleLine):
        (WebCore::RenderTextControlSingleLine::placeholderShouldBeVisible):
        (WebCore::RenderTextControlSingleLine::updatePlaceholderVisibility):
        (WebCore::RenderTextControlSingleLine::addSearchResult):
        (WebCore::RenderTextControlSingleLine::stopSearchEventTimer):
        (WebCore::RenderTextControlSingleLine::showPopup):
        (WebCore::RenderTextControlSingleLine::hidePopup):
        (WebCore::RenderTextControlSingleLine::subtreeHasChanged):
        (WebCore::RenderTextControlSingleLine::paint):
        (WebCore::RenderTextControlSingleLine::layout):
        (WebCore::RenderTextControlSingleLine::nodeAtPoint):
        (WebCore::RenderTextControlSingleLine::forwardEvent):
        (WebCore::RenderTextControlSingleLine::styleDidChange):
        (WebCore::RenderTextControlSingleLine::capsLockStateMayHaveChanged):
        (WebCore::RenderTextControlSingleLine::textBlockWidth):
        (WebCore::RenderTextControlSingleLine::preferredContentWidth):
        (WebCore::RenderTextControlSingleLine::adjustControlHeightBasedOnLineHeight):
        (WebCore::RenderTextControlSingleLine::createSubtreeIfNeeded):
        (WebCore::RenderTextControlSingleLine::updateFromElement):
        (WebCore::RenderTextControlSingleLine::cacheSelection):
        (WebCore::RenderTextControlSingleLine::createInnerTextStyle):
        (WebCore::RenderTextControlSingleLine::createInnerBlockStyle):
        (WebCore::RenderTextControlSingleLine::createResultsButtonStyle):
        (WebCore::RenderTextControlSingleLine::createCancelButtonStyle):
        (WebCore::RenderTextControlSingleLine::updateCancelButtonVisibility):
        (WebCore::RenderTextControlSingleLine::autosaveName):
        (WebCore::RenderTextControlSingleLine::startSearchEventTimer):
        (WebCore::RenderTextControlSingleLine::searchEventTimerFired):
        (WebCore::RenderTextControlSingleLine::valueChanged):
        (WebCore::RenderTextControlSingleLine::itemText):
        (WebCore::RenderTextControlSingleLine::itemIsEnabled):
        (WebCore::RenderTextControlSingleLine::itemStyle):
        (WebCore::RenderTextControlSingleLine::menuStyle):
        (WebCore::RenderTextControlSingleLine::clientInsetLeft):
        (WebCore::RenderTextControlSingleLine::clientInsetRight):
        (WebCore::RenderTextControlSingleLine::clientPaddingLeft):
        (WebCore::RenderTextControlSingleLine::clientPaddingRight):
        (WebCore::RenderTextControlSingleLine::listSize):
        (WebCore::RenderTextControlSingleLine::selectedIndex):
        (WebCore::RenderTextControlSingleLine::itemIsSeparator):
        (WebCore::RenderTextControlSingleLine::itemIsLabel):
        (WebCore::RenderTextControlSingleLine::itemIsSelected):
        (WebCore::RenderTextControlSingleLine::setTextFromItem):
        (WebCore::RenderTextControlSingleLine::fontSelector):
        (WebCore::RenderTextControlSingleLine::hostWindow):
        (WebCore::RenderTextControlSingleLine::createScrollbar):
        * rendering/RenderTextControlSingleLine.h: Added.
        (WebCore::RenderTextControlSingleLine::hasControlClip):
        (WebCore::RenderTextControlSingleLine::isTextField):
        (WebCore::RenderTextControlSingleLine::placeholderIsVisible):
        (WebCore::RenderTextControlSingleLine::popupIsVisible):
        (WebCore::RenderTextControlSingleLine::shouldPopOver):
        (WebCore::RenderTextControlSingleLine::valueShouldChangeOnHotTrack):
        * rendering/TextControlInnerElements.cpp:
        (WebCore::RenderTextControlInnerBlock::nodeAtPoint):
        (WebCore::SearchFieldResultsButtonElement::defaultEventHandler):

2008-12-28  Dmitry Titov  <dimich@chromium.org>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=22755
        Prepare to add create/remove timeout methods to JSWorkerContext by moving
        timer-specific code from JSDOMWindowBase to DOMTimer.
        Moved everything JS-related from DOMTimer to ScheduledAction.
        Now ScheduledAction is what it wanted to be all the time: a JS engine-specific
        container for timer callback that knows how to invoke it.
        DOMTimer is not anymore JS-specific.

        This is mostly moving the code around. No intended functional changes.

        * bindings/js/DOMTimer.cpp:
        (WebCore::DOMTimer::DOMTimer):
        (WebCore::DOMTimer::~DOMTimer):
        (WebCore::DOMTimer::install):
        (WebCore::DOMTimer::removeById):
        (WebCore::DOMTimer::fired):
        (WebCore::DOMTimer::stop):
        * bindings/js/DOMTimer.h:
        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::installTimeout):
        (WebCore::JSDOMWindowBase::removeTimeout):
        * bindings/js/JSDOMWindowBase.h:
        * bindings/js/ScheduledAction.cpp:
        (WebCore::ScheduledAction::execute):
        * bindings/js/ScheduledAction.h:
        * dom/Document.cpp:
        (WebCore::Document::addTimeout):

2008-12-26  Zalan Bujtas  <zbujtas@gmail.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=22999
        Check if database thread exists.

        * storage/Database.cpp:
        (WebCore::Database::openAndVerifyVersion):
        (WebCore::Database::markAsDeletedAndClose):
        (WebCore::Database::tableNames):

2008-12-26  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=23001
        A call to applicationCache.update() from a cached event listener should be ignored

        Test: http/tests/appcache/idempotent-update.html

        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::ApplicationCacheGroup::checkIfLoadIsComplete): Only reset m_status after
        dispatching events.

2008-12-26  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=22997
        ASSERTION FAILED: !m_resources.contains(url) in ApplicationCache::addResource()

        Tests: http/tests/appcache/top-frame-1.html
               http/tests/appcache/top-frame-2.html
               http/tests/appcache/top-frame-3.html
               http/tests/appcache/top-frame-4.html

        * loader/appcache/ApplicationCacheGroup.cpp: (WebCore::ApplicationCacheGroup::cacheForMainRequest):
        Fixed one more instance of top level frame being used for caching purposes.

2008-12-26  Dmitry Titov  <dimich@chromium.org>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=22987
        Fix for broken test editing/execCommand/5763082.html

        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::mergeIdenticalElements): Used local RefPtr to hold onto
        function parameter across multiple calls.

2008-12-25  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=22993
        Application cache shouldn't be inherited by subframes

        <rdar://problem/6284708> AppCache crashes in ApplicationCacheResource::addType()
        This crash happened because main resource for subframe was looked up in top frame's
        appcache. If not for the spec change, it could have been fixed by preventing the load
        altogether.

        Test: http/tests/appcache/foreign-iframe-main.html
        I intend to write additional tests for the behavior change.

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::shouldLoadResourceFromApplicationCache):
        * loader/DocumentLoader.h:
        (WebCore::DocumentLoader::applicationCache):
        * loader/MainResourceLoader.cpp:
        (WebCore::MainResourceLoader::load):
        * loader/appcache/DOMApplicationCache.cpp:
        (WebCore::DOMApplicationCache::associatedCache):
        Removed DocumentLoader::topLevelApplicationCache(), and changed callers accordingly.

        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::ApplicationCacheGroup::selectCache):
        (WebCore::ApplicationCacheGroup::selectCacheWithoutManifestURL):
        Removed checks for the frame being top-level one, now that subframes are cached independently.

2008-12-25  Antti Koivisto  <antti@apple.com>

        Reviewed by Oliver Hunt.

        <rdar://problem/6465669> Frequent !isPurgeable() assertion in WebCore::CachedResource::addClient

        Disallow turning resources that are being revalidated to purgable state.

        No test, the condition is difficult to produce in DRT.

        * loader/CachedCSSStyleSheet.cpp:
        (WebCore::CachedCSSStyleSheet::allClientsRemoved):
        * loader/CachedImage.cpp:
        (WebCore::CachedImage::destroyDecodedData):
        * loader/CachedResource.cpp:
        (WebCore::CachedResource::isSafeToMakePurgeable):
        (WebCore::CachedResource::makePurgeable):
        * loader/CachedResource.h:
        * loader/CachedScript.cpp:
        (WebCore::CachedScript::destroyDecodedData):

2008-12-25  Alexey Proskuryakov  <ap@webkit.org>

        Qt build fix.

        * WebCore.pro: Added ThreadGlobalData.cpp.

2008-12-24  Mark Rowe  <mrowe@apple.com>

        Build fix.

        * WebCore.base.exp:  Remove a symbol from the export file now that it is no longer generated.

2008-12-24  Holger Hans Peter Freyther  <zecke@selfish.org>

        Unreviewed build fix to find addSubresourceURL

        This is needed to compile on WebKit/Gtk+

        * css/CSSFontFaceSrcValue.cpp:

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

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=22980
        WebCore uses more thread specific keys than it really needs

        Consolidated ThreadSpecific data into a single ThreadGlobalData structure.

        * GNUmakefile.am:
        * WebCore.base.exp:
        * WebCore.scons:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * dom/EventNames.cpp:
        * dom/EventNames.h:
        (WebCore::eventNames):
        * page/Frame.cpp:
        (WebCore::Frame::Frame):
        * platform/ThreadGlobalData.cpp: Added.
        (WebCore::threadGlobalData):
        (WebCore::ThreadGlobalData::ThreadGlobalData):
        (WebCore::ThreadGlobalData::~ThreadGlobalData):
        * platform/ThreadGlobalData.h: Added.
        (WebCore::ThreadGlobalData::eventNames):
        (WebCore::ThreadGlobalData::emptyString):
        (WebCore::ThreadGlobalData::atomicStringTable):
        (WebCore::ThreadGlobalData::cachedConverterICU):
        (WebCore::ThreadGlobalData::cachedConverterTEC):
        * platform/text/AtomicString.cpp:
        (WebCore::stringTable):
        (WebCore::AtomicString::add):
        (WebCore::AtomicString::remove):
        (WebCore::AtomicString::find):
        (WebCore::AtomicString::init):
        * platform/text/StringImpl.cpp:
        (WebCore::StringImpl::empty):
        * platform/text/StringImpl.h:
        * platform/text/TextCodecICU.cpp:
        (WebCore::ICUConverterWrapper::~ICUConverterWrapper):
        (WebCore::cachedConverterICU):
        * platform/text/TextCodecICU.h:
        (WebCore::ICUConverterWrapper::ICUConverterWrapper):
        * platform/text/mac/TextCodecMac.cpp:
        (WebCore::cachedConverterTEC):
        * platform/text/mac/TextCodecMac.h:
        (WebCore::TECConverterWrapper::TECConverterWrapper):
        (WebCore::TECConverterWrapper::~TECConverterWrapper):

2008-12-23  Mark Rowe  <mrowe@apple.com>

        Build fix.

        * WebCore.xcodeproj/project.pbxproj: CSSPropertyNames.h is a generated file so it needs to be explicitly copied
        into the PrivateHeaders directory, rather than relying on the automatic copying of headers which runs before the
        derived sources are generated.

2008-12-23  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein

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

        If the document element has opacity, we need to erase the view background to
        white before painting.

        Test: fast/backgrounds/opacity-on-document-element.html

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

2008-12-23  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein

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

        Fix SVGImage painting by ensuring that the SVGImage resizes its FrameView correctly.
        Otherwise the FrameView is left at 0x0, and nothing paints.

        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::draw):

2008-12-23  Darin Adler  <darin@apple.com>

        Reviewed by John Sullivan.

        - improve robustness of undo/redo in HTML editing to fix the following bugs
          <https://bugs.webkit.org/show_bug.cgi?id=19703> Crash in WebCore::InsertNodeBeforeCommand::doUnapply()
          <rdar://problem/4059423> DOM operations performed on editable HTML can cause a crash later during Undo

        Major categories of improvements:

            1) Added null checks.
            2) Eliminated type casts without corresponding type checks.
            3) Avoided possible infinite loops by building up lists of nodes to operate on
               before starting to make DOM changes.
            4) Use more RefPtr.

        No test at this time, but test cases should follow in separate patches.

        * WebCore.xcodeproj/project.pbxproj: Set the role of CSSPropertyNames.h to Private so it
        can be used in other Private headers, specifically editing ones.

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::locateCousinList): Adopt parentElement.
        (WebCore::CSSStyleSelector::locateSharedStyle): Ditto.
        (WebCore::CSSStyleSelector::SelectorChecker::checkOneSelector): Ditto.

        * dom/Element.cpp: (WebCore::Element::cloneElement): Added.
        * dom/Element.h: Added cloneElement and an implementation of parentElement.
        * dom/Node.h: Moved parentElement from here to Element.h and changed its
        implementation so it will return 0 when the parent is not an element
        (document, document fragment, etc.).

        * editing/AppendNodeCommand.cpp:
        (WebCore::AppendNodeCommand::AppendNodeCommand): Made parent be an Element.
        Moved assertions from doApply in here.
        (WebCore::AppendNodeCommand::doApply): Simplified to just a single unchecked
        appendChild call.
        (WebCore::AppendNodeCommand::doUnapply): Simplified to just a single remove call.
        * editing/AppendNodeCommand.h: Updated.

        * editing/ApplyStyleCommand.cpp:
        (WebCore::createStyleSpanElement): Eliminate casting by creating an element in a more
        direct way with new instead of createElementNS.
        (WebCore::ApplyStyleCommand::ApplyStyleCommand): Use PassRefPtr.
        (WebCore::ApplyStyleCommand::removeCSSStyle): Use CSSPropertyID.
        (WebCore::ApplyStyleCommand::addInlineStyleIfNeeded): Use cloneElement.
        * editing/ApplyStyleCommand.h:

        * editing/BreakBlockquoteCommand.cpp:
        (WebCore::BreakBlockquoteCommand::doApply): Use Element* and cloneElement.

        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::applyStyledElement): Use PassRefPtr and unsigned.
        (WebCore::CompositeEditCommand::removeStyledElement): Ditto.
        (WebCore::CompositeEditCommand::insertNodeBefore): Ditto.
        (WebCore::CompositeEditCommand::insertNodeAfter): Ditto.
        (WebCore::CompositeEditCommand::insertNodeAt): Ditto.
        (WebCore::CompositeEditCommand::appendNode): Ditto.
        (WebCore::CompositeEditCommand::removeChildrenInRange): Ditto. Also use a vector to
        make the list of children in case removing them has side effects.
        (WebCore::CompositeEditCommand::removeNode): Ditto.
        (WebCore::CompositeEditCommand::removeNodePreservingChildren): Ditto.
        (WebCore::CompositeEditCommand::removeNodeAndPruneAncestors): Ditto.
        (WebCore::CompositeEditCommand::splitTextNode): Ditto.
        (WebCore::CompositeEditCommand::splitElement): Ditto.
        (WebCore::CompositeEditCommand::mergeIdenticalElements): Ditto.
        (WebCore::CompositeEditCommand::wrapContentsInDummySpan): Ditto.
        (WebCore::CompositeEditCommand::splitTextNodeContainingElement): Ditto.
        (WebCore::CompositeEditCommand::joinTextNodes): Ditto.
        (WebCore::CompositeEditCommand::inputText): Ditto.
        (WebCore::CompositeEditCommand::insertTextIntoNode): Ditto.
        (WebCore::CompositeEditCommand::deleteTextFromNode): Ditto.
        (WebCore::CompositeEditCommand::replaceTextInNode): Ditto.
        (WebCore::CompositeEditCommand::insertNodeAtTabSpanPosition): Ditto.
        (WebCore::CompositeEditCommand::removeCSSProperty): Ditto.
        (WebCore::CompositeEditCommand::removeNodeAttribute): Ditto. Implement by calling
        setNodeAttribute instead of with its own SimpleEditCommand.
        (WebCore::CompositeEditCommand::setNodeAttribute): Ditto.
        (WebCore::CompositeEditCommand::deleteInsignificantText): Ditto.
        (WebCore::CompositeEditCommand::appendBlockPlaceholder): Ditto.
        (WebCore::CompositeEditCommand::addBlockPlaceholderIfNeeded): Ditto.
        (WebCore::CompositeEditCommand::insertNewDefaultParagraphElementAt): Ditto. Don't
        bother using an undoable operation to put the break element into the paragraph
        element because there's no need to split them and redo this when doing undo/redo.
        (WebCore::CompositeEditCommand::moveParagraphs): Ditto.
        (WebCore::CompositeEditCommand::breakOutOfEmptyListItem): Ditto.
        * editing/CompositeEditCommand.h: Ditto.

        * editing/DeleteFromTextNodeCommand.cpp:
        (WebCore::DeleteFromTextNodeCommand::DeleteFromTextNodeCommand): Use unsigned.
        (WebCore::DeleteFromTextNodeCommand::doApply): Eliminated inappropriate assertions.
        (WebCore::DeleteFromTextNodeCommand::doUnapply): Ditto.
        * editing/DeleteFromTextNodeCommand.h:

        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::removeNode): Use PassRefPtr.
        (WebCore::DeleteSelectionCommand::deleteTextFromNode): Ditto.
        * editing/DeleteSelectionCommand.h:

        * editing/FormatBlockCommand.cpp:
        (WebCore::FormatBlockCommand::FormatBlockCommand): Use AtomicString.
        (WebCore::FormatBlockCommand::doApply): Use Element.
        * editing/FormatBlockCommand.h:

        * editing/IndentOutdentCommand.cpp:
        (WebCore::createIndentBlockquoteElement): Use new to create the element
        instead of calling a function so we have a more specific type.
        (WebCore::IndentOutdentCommand::prepareBlockquoteLevelForInsertion):
        Use RefPtr and Element.
        (WebCore::IndentOutdentCommand::indentRegion): Ditto.
        (WebCore::IndentOutdentCommand::outdentParagraph): Ditto.
        * editing/IndentOutdentCommand.h:

        * editing/InsertIntoTextNodeCommand.cpp:
        (WebCore::InsertIntoTextNodeCommand::InsertIntoTextNodeCommand):
        Use unsigned. Added an assertion.
        (WebCore::InsertIntoTextNodeCommand::doApply): Eliminated inappropriate assertions.
        (WebCore::InsertIntoTextNodeCommand::doUnapply): Ditto.
        * editing/InsertIntoTextNodeCommand.h:

        * editing/InsertLineBreakCommand.cpp:
        (WebCore::InsertLineBreakCommand::insertNodeAfterPosition): Use Element.
        (WebCore::InsertLineBreakCommand::insertNodeBeforePosition): Ditto.

        * editing/InsertListCommand.cpp:
        (WebCore::InsertListCommand::doApply): Use Element.

        * editing/InsertNodeBeforeCommand.cpp:
        (WebCore::InsertNodeBeforeCommand::InsertNodeBeforeCommand): Moved assertions
        here from doApply.
        (WebCore::InsertNodeBeforeCommand::doApply): Eliminated inappropriate assertions.
        Added a null check.
        (WebCore::InsertNodeBeforeCommand::doUnapply): Simplified to just a single remove call.

        * editing/InsertParagraphSeparatorCommand.cpp:
        (WebCore::InsertParagraphSeparatorCommand::doApply): Use Element and cloneElement.

        * editing/JoinTextNodesCommand.cpp:
        (WebCore::JoinTextNodesCommand::doApply): Eliminated inappropriate assertions.
        Added some runtime checks. Don't store anything in m_offset.
        (WebCore::JoinTextNodesCommand::doUnapply): Ditto.
        * editing/JoinTextNodesCommand.h:

        * editing/MergeIdenticalElementsCommand.cpp:
        (WebCore::MergeIdenticalElementsCommand::MergeIdenticalElementsCommand): Moved
        an assertion here from doApply.
        (WebCore::MergeIdenticalElementsCommand::doApply): Eliminated inappropriate assertions.
        Added a null check. Changed implementation to use remove to avoid null parent issue.
        Use a vector of nodes to avoid possible infinite loop if mutation happens while iterating.
        (WebCore::MergeIdenticalElementsCommand::doUnapply): Ditto.

        * editing/ModifySelectionListLevel.cpp:
        (WebCore::ModifySelectionListLevelCommand::appendSiblingNodeRange): Use Element*.
        (WebCore::IncreaseSelectionListLevelCommand::doApply): Ditto.
        * editing/ModifySelectionListLevel.h:

        * editing/RemoveCSSPropertyCommand.cpp:
        (WebCore::RemoveCSSPropertyCommand::RemoveCSSPropertyCommand): Use PassRefPtr and
        CSSPropertyID. Also renamed m_decl to m_style.
        (WebCore::RemoveCSSPropertyCommand::doApply): Eliminated inappropriate assertions.
        (WebCore::RemoveCSSPropertyCommand::doUnapply): Ditto.

        * editing/RemoveNodeAttributeCommand.cpp: Removed contents of this file. To be deleted.
        Use SetNodeAttributeCommand instead.
        * editing/RemoveNodeAttributeCommand.h: Ditto.

        * editing/RemoveNodeCommand.cpp:
        (WebCore::RemoveNodeCommand::RemoveNodeCommand): Moved assertions here from doApply.
        Don't initialize m_refChild here; rather do it in doApply.
        (WebCore::RemoveNodeCommand::doApply): Eliminated inappropriate assertions. Added
        checks and streamlined implementation.
        (WebCore::RemoveNodeCommand::doUnapply): Ditto.
        * editing/RemoveNodeCommand.h:

        * editing/RemoveNodePreservingChildrenCommand.cpp:
        (WebCore::RemoveNodePreservingChildrenCommand::doApply): Use a vector.

        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplacementFragment::insertFragmentForTestRendering): Removed now-unneeded cast.

        * editing/SetNodeAttributeCommand.cpp:
        (WebCore::SetNodeAttributeCommand::SetNodeAttributeCommand): Use AtomicString.
        Removed assertion that prevents us from using this to remove an attribute.
        (WebCore::SetNodeAttributeCommand::doApply): Eliminated inappropriate assertions.
        (WebCore::SetNodeAttributeCommand::doUnapply): Ditto.
        * editing/SetNodeAttributeCommand.h:

        * editing/SplitElementCommand.cpp:
        (WebCore::SplitElementCommand::SplitElementCommand): Moved assertion here from doApply.
        (WebCore::SplitElementCommand::doApply): Check some more invariants and use a vector
        to avoid possible infinite loops.
        (WebCore::SplitElementCommand::doUnapply): Ditto.

        * editing/SplitTextNodeCommand.cpp:
        (WebCore::SplitTextNodeCommand::SplitTextNodeCommand): Moved assertions and comment
        here from doApply.
        (WebCore::SplitTextNodeCommand::doApply): Check for null and failures when applying.
        (WebCore::SplitTextNodeCommand::doUnapply): Ditto.

        * editing/SplitTextNodeContainingElementCommand.cpp:
        (WebCore::SplitTextNodeContainingElementCommand::doApply): Use Element.

        * editing/WrapContentsInDummySpanCommand.cpp:
        (WebCore::WrapContentsInDummySpanCommand::doApply): Check for null and ignore failures.
        Don't reuse the dummy span. Simplified logic.
        (WebCore::WrapContentsInDummySpanCommand::doUnapply): Ditto.

        * editing/htmlediting.cpp:
        (WebCore::isBlock): Make sure this returns true only for elements.
        (WebCore::enclosingBlock): Return an Element*.
        (WebCore::enclosingTableCell): Ditto.
        (WebCore::enclosingList): Return an HTMLElement*.
        (WebCore::outermostEnclosingList): Return an HTMLElement*.
        (WebCore::createDefaultParagraphElement): Return an HTMLElement*.
        (WebCore::createBreakElement): Return an HTMLElement*.
        (WebCore::createOrderedListElement): Return an HTMLElement*.
        (WebCore::createUnorderedListElement): Return an HTMLElement*.
        (WebCore::createListItemElement): Return an HTMLElement*.
        (WebCore::createHTMLElement): Return an HTMLElement*.
        * editing/htmlediting.h:

        * editing/markup.cpp:
        (WebCore::createFragmentFromText): Use createBreakElement and use Element*.

        * page/MouseEventWithHitTestResults.cpp:
        (WebCore::MouseEventWithHitTestResults::targetNode): Use parentElement.

2008-12-23  Darin Adler  <darin@apple.com>

        Reviewed by Dan Bernstein.

        * dom/Node.h: Tweak comments and order of bits that Sam moved
        here last night.
        * dom/Node.cpp: Ditto.

2008-12-22  Julien Chaffraix  <jchaffraix@webkit.org>

        Reviewed by Darin Adler.

        Bug 11106: Some XMLHttpRequest URI resolving tests fail
        https://bugs.webkit.org/show_bug.cgi?id=11106

        Use the ScriptExecutionContext to resolve the URI when calling open in JavaScript.
        The previous code was using the containing DOMWindow to do so which would fail for
        XMLHttpRequest object being passed between iframe.

        Tests: http/tests/xmlhttprequest/uri-resolution-opera-open-004.html
               http/tests/xmlhttprequest/uri-resolution-opera-open-005.html
               http/tests/xmlhttprequest/uri-resolution-opera-open-006.html
               http/tests/xmlhttprequest/uri-resolution-opera-open-007.html
               http/tests/xmlhttprequest/uri-resolution-opera-open-008.html
               http/tests/xmlhttprequest/uri-resolution-opera-open-009.html
               http/tests/xmlhttprequest/uri-resolution-opera-open-010.html

        * bindings/js/JSXMLHttpRequestCustom.cpp:
        (WebCore::JSXMLHttpRequest::open): Use the ScriptExecutionContext
        to resolve the URL.

        * dom/Document.cpp:
        (WebCore::Document::virtualCompleteURL): Virtual method added to
        avoid performance hit on completeURL call.

        * dom/Document.h:
        * dom/ScriptExecutionContext.h:
        (WebCore::ScriptExecutionContext::completeURL): Non-virtual method
        that wrap the call to the virtual call.
        * dom/WorkerContext.cpp:
        (WebCore::WorkerContext::virtualCompleteURL): Pure virtual method.
        * dom/WorkerContext.h:

2008-12-23  Darin Adler  <darin@apple.com>

        Reviewed by Dan Bernstein.

        - https://bugs.webkit.org/show_bug.cgi?id=22978
          a couple tweaks to the new strokeBoundingRect functions

        * platform/graphics/cairo/PathCairo.cpp:
        (WebCore::Path::strokeBoundingRect): Only create a GraphicsContext
        if the applier is non-null.

        * platform/graphics/cg/PathCG.cpp:
        (WebCore::putBytesNowhere): Added.
        (WebCore::createScratchContext): Changed to use a "/dev/null" type
        function to discard bytes rather than using a data object. This
        eliminates the possibility that memory will be used if someone draws
        into the scratch context by accident. Also moved to the top of the
        file; it was in a slightly strange place before.
        (WebCore::Path::strokeBoundingRect): Only create a GraphicsContext
        if the applier is non-null. Simplify the empty path special case.

2008-12-22  Sam Weinig  <sam@webkit.org>

        Reviewed by Mark Rowe.

        Save a word in all Elements by moving the 5 loose bits to Node,
        where we had 16 spare.

        * dom/Element.cpp:
        (WebCore::Element::Element):
        * dom/Element.h:
        * dom/Node.cpp:
        (WebCore::Node::Node):
        * dom/Node.h:

2008-12-22  Nikolas Zimmermann  <nikolas.zimmermann@torchmobile.com>

        Reviewed by George Staikos.

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

        Add WML <meta> element support. All needed functionality is present
        in Document::processHttpEquiv, already covered by tests.

        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * wml/WMLMetaElement.cpp: Added.
        (WebCore::WMLMetaElement::WMLMetaElement):
        (WebCore::WMLMetaElement::parseMappedAttribute):
        (WebCore::WMLMetaElement::insertedIntoDocument):
        * wml/WMLMetaElement.h: Added.
        * wml/WMLTagNames.in:

2008-12-22  Nikolas Zimmermann  <nikolas.zimmermann@torchmobile.com>

        Rubber-stamped by Darin Adler.

        Don't reference specific layout tests in comments.

        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::createFormData):

2008-12-22  Nikolas Zimmermann  <nikolas.zimmermann@torchmobile.com>

        Reviewed by George Staikos.

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

        Add WML <head> element support. Doesn't require a WMLHeadElement.
        No functional behaviour, as we already created a WMLElement for headTag, by default.
        It's just cleaner to list <head> in WMLTagNames, forwarding to a WMLElement constructor.

        * wml/WMLTagNames.in:

2008-12-22  Nikolas Zimmermann  <nikolas.zimmermann@torchmobile.com>

        Reviewed by George Staikos.

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

        Fix regression caused by the HTMLFormElement refactorization.
        File form elements without a name have to be included in multipart/form-data
        submission. Cover this behaviour with a new test case.

        Test: http/tests/misc/empty-file-formdata.html

        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::createFormData):
        * wml/WMLTagNames.in:

2008-12-22  David Kilzer  <ddkilzer@apple.com>

        <rdar://problem/6438298> Bump schema version for app cache

        Reviewed by Alexey Proskuryakov.

        * loader/appcache/ApplicationCacheStorage.cpp: Increment
        SchemaVersion from 2 to 3.

2008-12-22  David Kilzer  <ddkilzer@apple.com>

        Use Deque in CSSStyleSheet::addSubresourceStyleURLs()

        Reviewed by Darin Adler.

        * css/CSSStyleSheet.cpp:
        (WebCore::CSSStyleSheet::addSubresourceStyleURLs): Replaced
        use of ListHashSet with more efficient Deque.

2008-12-22  Nikolas Zimmermann  <nikolas.zimmermann@torchmobile.com>

        Reviewed by Sam Weinig.

        Fix obvious crash fix for WML enabled builds.

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

2008-12-22  David Kilzer  <ddkilzer@apple.com>

        Bug 11850: Webarchive fails to save images referenced in CSS

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

        Reviewed by Darin Adler.

        This entry contains two parts since the tests for adding a
        completeURL() method to StyleSheet and CSSStyleSheet (part 1) depend
        on Bug 11850 being fixed (part 2).

        --

        Tests: http/tests/webarchive/test-css-url-encoding-shift-jis.html
               http/tests/webarchive/test-css-url-encoding-utf-8.html
               http/tests/webarchive/test-css-url-encoding.html

        Added completeURL() methods to StyleSheet and CSSStyleSheet that
        match the behavior of Document::completeURL().  Most notably,
        CSSStyleSheet::completeURL() uses the charset of the stylesheet
        (if it exists) to construct URLs, just like Document::completeURL().

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue): Use CSSStyleSheet::completeURL().
        (WebCore::CSSParser::parseContent): Ditto.
        (WebCore::CSSParser::parseFillImage): Ditto.
        (WebCore::CSSParser::parseFontFaceSrc): Ditto.
        (WebCore::CSSParser::parseBorderImage): Ditto.

        * css/CSSStyleSheet.cpp:
        (WebCore::CSSStyleSheet::completeURL): Added.
        * css/CSSStyleSheet.h:
        (WebCore::CSSStyleSheet::completeURL): Added declaration.

        * css/StyleSheet.cpp:
        (WebCore::StyleSheet::completeURL): Added.
        * css/StyleSheet.h:
        (WebCore::StyleSheet::completeURL): Added declaration.

        * dom/Document.cpp:
        (WebCore::Document::completeURL): Added comment referring to the new
        completeURL() methods in StyleSheet and CSSStyleSheet.

        --

        Tests: webarchive/test-css-url-resources-in-stylesheets.html
               webarchive/test-css-url-resources-inline-styles.html

        Walk stylesheets and inline style attributes for url() references
        when building a list of URLs to include in a webarchive.  Note that
        not all URLs found this way will be included in the webarchive if
        they were not used (and thus not downloaded) when laying out the
        page.

        The key method for CSS stylesheets is
        CSSStyleSheet::addSubresourceStyleURLs() which iterates over all
        CSSStyleSheet objects recursively referenced from its own stylesheet
        through @import rules.  Starting with the CSSRule objects in each
        sheet and continuing down through the CSSMutableStyleDeclaration and
        CSSValue objects, addSubresourceStyleURLs() methods are called to
        gather URLs.

        For inline style attributes in HTML DOM elements,
        StyledElement::addSubresourceAttributeURLs() calls
        CSSMutableStyleDeclaration::addSubresourceStyleURLs() to gather URLs
        from each element, hence the need to call
        addSubresourceAttributeURLs() on superclasses when the method is
        implemented on the element class itself.

        * css/CSSBorderImageValue.cpp:
        (WebCore::CSSBorderImageValue::addSubresourceStyleURLs): Added.
        * css/CSSBorderImageValue.h:
        (WebCore::CSSBorderImageValue::addSubresourceStyleURLs): Added
        declaration.

        * css/CSSFontFaceRule.cpp:
        (WebCore::CSSFontFaceRule::addSubresourceStyleURLs): Added.
        * css/CSSFontFaceRule.h:
        (WebCore::CSSFontFaceRule::addSubresourceStyleURLs): Added
        declaration.

        * css/CSSFontFaceSrcValue.cpp:
        (WebCore::CSSFontFaceSrcValue::addSubresourceStyleURLs): Added.
        * css/CSSFontFaceSrcValue.h:
        (WebCore::CSSFontFaceSrcValue::addSubresourceStyleURLs): Added
        declaration.

        * css/CSSImportRule.cpp:
        (WebCore::CSSImportRule::addSubresourceStyleURLs): Added.
        * css/CSSImportRule.h:
        (WebCore::CSSImportRule::addSubresourceStyleURLs): Added
        declaration.

        * css/CSSMutableStyleDeclaration.cpp:
        (WebCore::CSSMutableStyleDeclaration::addSubresourceStyleURLs): Added.
        Iterates over m_properties vector of CSSProperty objects calling
        addSubresourceStyleURLs() on each property's CSSValue object.
        * css/CSSMutableStyleDeclaration.h:
        (WebCore::CSSMutableStyleDeclaration::addSubresourceStyleURLs): Added
        declaration.

        * css/CSSPrimitiveValue.cpp:
        (WebCore::CSSPrimitiveValue::addSubresourceStyleURLs): Added.
        * css/CSSPrimitiveValue.h:
        (WebCore::CSSPrimitiveValue::addSubresourceStyleURLs): Added
        declaration.

        * css/CSSReflectValue.cpp:
        (WebCore::CSSReflectValue::addSubresourceStyleURLs): Added.
        * css/CSSReflectValue.h:
        (WebCore::CSSReflectValue::addSubresourceStyleURLs): Added
        declaration.

        * css/CSSRule.h:
        (WebCore::CSSRule::addSubresourceStyleURLs): Added.  Virtual
        method with empty implementation that's overridden by subclasses
        as needed.

        * css/CSSStyleRule.cpp:
        (WebCore::CSSStyleRule::addSubresourceStyleURLs): Added.
        * css/CSSStyleRule.h:
        (WebCore::CSSStyleRule::addSubresourceStyleURLs): Added
        declaration.

        * css/CSSStyleSheet.cpp:
        (WebCore::CSSStyleSheet::addSubresourceStyleURLs): Updated to
        call CSSRule::addSubresourceStyleURLs on each rule to extract
        URLs.  Removed unneeded baseURL parameter now that the
        completeURL() method exists.
        * css/CSSStyleSheet.h:
        (WebCore::CSSStyleSheet::addSubresourceStyleURLs): Updated
        declaration.

        * css/CSSValue.h:
        (WebCore::CSSValue::addSubresourceStyleURLs): Added.  Virtual
        method with empty implementation that's overridden by subclasses
        as needed.

        * css/CSSValueList.cpp:
        (WebCore::CSSValueList::addSubresourceStyleURLs): Added.
        Iterates over m_values vector of CSSValue objects calling
        addSubresourceStyleURLs() on each.
        * css/CSSValueList.h:
        (WebCore::CSSValueList::addSubresourceStyleURLs): Added
        declaration.

        * css/StyleSheet.h:
        (WebCore::StyleSheet::addSubresourceStyleURLs): Updated
        declaration to remove unneeded baseURL parameter.

        * dom/ProcessingInstruction.cpp:
        (WebCore::ProcessingInstruction::addSubresourceAttributeURLs):
        Fixed to use the StyleBase::baseURL() method to get the
        stylesheet's URL instead of calling Document::completeURL().

        * dom/StyledElement.cpp:
        (WebCore::StyledElement::addSubresourceAttributeURLs): Added method
        to extract URLs from inline style declarations.
        * dom/StyledElement.h:
        (WebCore::StyledElement::addSubresourceAttributeURLs): Added
        declaration.

        * html/HTMLBodyElement.cpp:
        (WebCore::HTMLBodyElement::addSubresourceAttributeURLs): Call
        addSubresourceAttributeURLs() in superclass to extract URLs
        from inline style declarations.
        * html/HTMLEmbedElement.cpp:
        (WebCore::HTMLEmbedElement::addSubresourceAttributeURLs): Ditto.
        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::addSubresourceAttributeURLs): Ditto.
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::addSubresourceAttributeURLs): Ditto.
        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::addSubresourceAttributeURLs): Ditto.
        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::addSubresourceAttributeURLs): Ditto.
        * html/HTMLParamElement.cpp:
        (WebCore::HTMLParamElement::addSubresourceAttributeURLs): Ditto.
        * html/HTMLScriptElement.cpp:
        (WebCore::HTMLScriptElement::addSubresourceAttributeURLs): Ditto.
        * html/HTMLStyleElement.cpp:
        (WebCore::HTMLStyleElement::addSubresourceAttributeURLs): Ditto.
        * html/HTMLTableCellElement.cpp:
        (WebCore::HTMLTableCellElement::addSubresourceAttributeURLs): Ditto.
        * html/HTMLTableElement.cpp:
        (WebCore::HTMLTableElement::addSubresourceAttributeURLs): Ditto.
        * svg/SVGCursorElement.cpp:
        (WebCore::SVGCursorElement::addSubresourceAttributeURLs): Ditto.
        * svg/SVGFEImageElement.cpp:
        (WebCore::SVGFEImageElement::addSubresourceAttributeURLs): Ditto.
        * svg/SVGImageElement.cpp:
        (WebCore::SVGImageElement::addSubresourceAttributeURLs): Ditto.
        * svg/SVGScriptElement.cpp:
        (WebCore::SVGScriptElement::addSubresourceAttributeURLs): Ditto.

2008-12-22  Dhananjoy Chutia  <dhanrd@gmail.com>

        Reviewed by David Kilzer.

        Fixes: https://bugs.webkit.org/show_bug.cgi?id=22959
        Memory leak fixes for WebKit+soup

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

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

        Reviewed by Darin Adler.

        <rdar://problem/6277060> ASSERTION FAILED: !m_cacheBeingUpdated if the manifest is not available

        Tests: http/tests/appcache/404-manifest.html
               http/tests/appcache/fail-on-update.html

        * loader/appcache/ApplicationCacheGroup.cpp: (WebCore::ApplicationCacheGroup::stopLoading):
        Removed the incorrect assertion.

        * loader/appcache/ApplicationCacheGroup.h: Added an explanation of somewhat nonintuitive
        m_currentHandle handling.

2008-12-22  Nikolas Zimmermann  <nikolas.zimmermann@torchmobile.com>

        Reviewed by Alexey Proskuryakov & George Staikos.

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

        Add WML <fieldset> element support.
        Unlike HTML's <fieldset> element, WML doesn't provide a <legend> child element
        to describe the <fieldset>. WML instead offers a 'title' attribute on the <fieldset>
        element. To integrate within the existing RenderFieldset code, we just create an
        internal <insertedLegend> element as first child for a WML <fieldset> element, containing
        the title attribute value.

        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::adjustRenderStyle):
        * css/wml.css:
        * rendering/RenderFieldset.cpp:
        (WebCore::RenderFieldset::RenderFieldset):
        (WebCore::RenderFieldset::findLegend):
        * rendering/RenderFieldset.h:
        * rendering/RenderLegend.cpp:
        (WebCore::RenderLegend::RenderLegend):
        * rendering/RenderLegend.h:
        * wml/WMLFieldSetElement.cpp: Added.
        (WebCore::WMLFieldSetElement::WMLFieldSetElement):
        (WebCore::WMLFieldSetElement::~WMLFieldSetElement):
        (WebCore::WMLFieldSetElement::parseMappedAttribute):
        (WebCore::WMLFieldSetElement::insertedIntoDocument):
        (WebCore::WMLFieldSetElement::removedFromDocument):
        (WebCore::WMLFieldSetElement::createRenderer):
        * wml/WMLFieldSetElement.h: Added.
        * wml/WMLInsertedLegendElement.cpp: Added.
        (WebCore::WMLInsertedLegendElement::WMLInsertedLegendElement):
        (WebCore::WMLInsertedLegendElement::~WMLInsertedLegendElement):
        (WebCore::WMLInsertedLegendElement::createRenderer):
        * wml/WMLInsertedLegendElement.h: Added.
        * wml/WMLTagNames.in:

2008-12-22  Nikolas Zimmermann  <nikolas.zimmermann@torchmobile.com>

        Not reviewed. Try to fix clean Mac builds, set role=private for FormDataBuilder.h

        * WebCore.xcodeproj/project.pbxproj:

2008-12-22  Nikolas Zimmermann  <nikolas.zimmermann@torchmobile.com>

        Rubber-stamped by George Staikos.

        Unify all TorchMobile copyright lines. Consolidate in a single line, as requested by Mark Rowe, some time ago.

        * css/CSSStyleSelector.cpp:
        * css/wml.css:
        * dom/DOMImplementation.cpp:
        * dom/Document.cpp:
        * dom/Document.h:
        * dom/XMLTokenizer.cpp:
        * dom/XMLTokenizerLibxml2.cpp:
        * dom/XMLTokenizerQt.cpp:
        * history/BackForwardList.cpp:
        * history/BackForwardList.h:
        * loader/FrameLoader.cpp:
        * loader/FrameLoader.h:
        * loader/MainResourceLoader.cpp:
        * page/Page.cpp:
        * page/Page.h:
        * platform/MIMETypeRegistry.cpp:
        * platform/network/FormDataBuilder.cpp:
        * platform/network/FormDataBuilder.h:
        * platform/qt/MIMETypeRegistryQt.cpp:
        * wml/WMLAElement.cpp:
        * wml/WMLAElement.h:
        * wml/WMLAccessElement.cpp:
        * wml/WMLAccessElement.h:
        * wml/WMLAnchorElement.cpp:
        * wml/WMLAnchorElement.h:
        * wml/WMLBRElement.cpp:
        * wml/WMLBRElement.h:
        * wml/WMLCardElement.cpp:
        * wml/WMLCardElement.h:
        * wml/WMLDoElement.cpp:
        * wml/WMLDoElement.h:
        * wml/WMLDocument.cpp:
        * wml/WMLDocument.h:
        * wml/WMLElement.cpp:
        * wml/WMLElement.h:
        * wml/WMLErrorHandling.cpp:
        * wml/WMLErrorHandling.h:
        * wml/WMLEventHandlingElement.cpp:
        * wml/WMLEventHandlingElement.h:
        * wml/WMLGoElement.cpp:
        * wml/WMLGoElement.h:
        * wml/WMLImageElement.cpp:
        * wml/WMLImageElement.h:
        * wml/WMLImageLoader.cpp:
        * wml/WMLImageLoader.h:
        * wml/WMLIntrinsicEvent.cpp:
        * wml/WMLIntrinsicEvent.h:
        * wml/WMLIntrinsicEventHandler.cpp:
        * wml/WMLIntrinsicEventHandler.h:
        * wml/WMLNoopElement.cpp:
        * wml/WMLNoopElement.h:
        * wml/WMLOnEventElement.cpp:
        * wml/WMLOnEventElement.h:
        * wml/WMLPElement.cpp:
        * wml/WMLPElement.h:
        * wml/WMLPageState.cpp:
        * wml/WMLPageState.h:
        * wml/WMLPostfieldElement.cpp:
        * wml/WMLPostfieldElement.h:
        * wml/WMLPrevElement.cpp:
        * wml/WMLPrevElement.h:
        * wml/WMLRefreshElement.cpp:
        * wml/WMLRefreshElement.h:
        * wml/WMLSetvarElement.cpp:
        * wml/WMLSetvarElement.h:
        * wml/WMLTableElement.cpp:
        * wml/WMLTableElement.h:
        * wml/WMLTaskElement.cpp:
        * wml/WMLTaskElement.h:
        * wml/WMLTemplateElement.cpp:
        * wml/WMLTemplateElement.h:
        * wml/WMLTimerElement.cpp:
        * wml/WMLTimerElement.h:
        * wml/WMLVariables.cpp:
        * wml/WMLVariables.h:

2008-12-22  Nikolas Zimmermann  <nikolas.zimmermann@torchmobile.com>

        Reviewed by George Staikos.

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

        Add POST method support to WMLGoElement. GET & POST over HTTP
        covered by a new set of WML HTTP layout tests.

        Tests: http/tests/wml/go-task-get-method-accept-charset.html
               http/tests/wml/go-task-get-method.html
               http/tests/wml/go-task-post-method-accept-charset.html
               http/tests/wml/go-task-post-method.html

        * wml/WMLGoElement.cpp:
        (WebCore::WMLGoElement::WMLGoElement):
        (WebCore::WMLGoElement::registerPostfieldElement):
        (WebCore::WMLGoElement::parseMappedAttribute):
        (WebCore::WMLGoElement::executeTask):
        (WebCore::WMLGoElement::preparePOSTRequest):
        (WebCore::WMLGoElement::prepareGETRequest):
        (WebCore::WMLGoElement::createFormData):
        * wml/WMLGoElement.h:
        * wml/WMLPostfieldElement.cpp:
        (WebCore::encodedString):
        (WebCore::WMLPostfieldElement::encodeData):
        * wml/WMLPostfieldElement.h:

2008-12-21  Nikolas Zimmermann  <nikolas.zimmermann@torchmobile.com>

        Reviewed by Darin Adler and George Staikos.

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

        Refactor HTMLFormElement to share a maximum level of code between HTMLFormElement & WMLGoElement.
        Create a new helper class 'FormDataBuilder', which is hold as member variable in those classes.
        It encapsulates all functionality needed to generate a FormData object, usable for HTML/WML form
        submission, including boundary string generation, multi-part form handling etc.

        No functional changes, no test cases affected.
        WMLGoElement will be converted in a follow-up patch.

        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.scons:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::HTMLFormElement):
        (WebCore::HTMLFormElement::dataEncoding):
        (WebCore::HTMLFormElement::createFormData):
        (WebCore::HTMLFormElement::submit):
        (WebCore::HTMLFormElement::parseMappedAttribute):
        * html/HTMLFormElement.h:
        (WebCore::HTMLFormElement::enctype):
        (WebCore::HTMLFormElement::encoding):
        (WebCore::HTMLFormElement::setEncoding):
        (WebCore::HTMLFormElement::acceptCharset):
        * platform/network/FormDataBuilder.cpp: Added.
        (WebCore::FormDataBuilder::FormDataBuilder):
        (WebCore::FormDataBuilder::~FormDataBuilder):
        (WebCore::FormDataBuilder::parseEncodingType):
        (WebCore::FormDataBuilder::parseMethodType):
        (WebCore::FormDataBuilder::dataEncoding):
        (WebCore::appendString):
        (WebCore::FormDataBuilder::beginMultiPartHeader):
        (WebCore::FormDataBuilder::addBoundaryToMultiPartHeader):
        (WebCore::FormDataBuilder::addFileNameToMultiPartHeader):
        (WebCore::FormDataBuilder::addContentTypeToMultiPartHeader):
        (WebCore::FormDataBuilder::finishMultiPartHeader):
        (WebCore::FormDataBuilder::clear):
        (WebCore::FormDataBuilder::addKeyValuePairAsFormData):
        (WebCore::FormDataBuilder::encodeStringAsFormData):
        (WebCore::FormDataBuilder::generateUniqueBoundaryString):
        * platform/network/FormDataBuilder.h: Added.
        (WebCore::FormDataBuilder::isPostMethod):
        (WebCore::FormDataBuilder::setIsPostMethod):
        (WebCore::FormDataBuilder::isMultiPartForm):
        (WebCore::FormDataBuilder::setIsMultiPartForm):
        (WebCore::FormDataBuilder::encodingType):
        (WebCore::FormDataBuilder::setEncodingType):
        (WebCore::FormDataBuilder::acceptCharset):
        (WebCore::FormDataBuilder::setAcceptCharset):
        (WebCore::FormDataBuilder::encodedData):
        (WebCore::FormDataBuilder::multiPartData):

2008-12-21  Dirk Schulze  <krit@webkit.org>

        Reviewed by Darin Adler, Nikolas Zimmermann.

        Move the the platform dependent strokeBBox functionality out of RenderPath
        into Path with strokeBoundingRect.

        RenderPath clean-up for strokeBoundingBox
        [https://bugs.webkit.org/show_bug.cgi?id=22902]

        * GNUmakefile.am:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/GraphicsContext.h:
        * platform/graphics/Path.h:
        * platform/graphics/StrokeStyleApplier.h: Added.
        (WebCore::StrokeStyleApplier::~StrokeStyleApplier):
        * platform/graphics/cairo/PathCairo.cpp:
        (WebCore::Path::strokeBoundingRect):
        * platform/graphics/cg/PathCG.cpp:
        (WebCore::createScratchContext):
        (WebCore::scratchContext):
        (WebCore::Path::strokeBoundingRect):
        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::GraphicsContext::pen):
        * platform/graphics/qt/PathQt.cpp:
        (WebCore::Path::strokeBoundingRect):
        * rendering/RenderPath.cpp:
        (WebCore::StrokeBoundingRectStyleApplier::StrokeBoundingRectStyleApplier):
        (WebCore::StrokeBoundingRectStyleApplier::strokeStyle):
        (WebCore::RenderPath::relativeBBox):
        * rendering/RenderPath.h:
        * svg/graphics/cairo/RenderPathCairo.cpp:
        * svg/graphics/cg/RenderPathCg.cpp:
        * svg/graphics/qt/RenderPathQt.cpp:

2008-12-20  David Kilzer  <ddkilzer@apple.com>

        Fix typo "CSSAferRuleValue" to "CSSAfterRuleValue"

        * html/PreloadScanner.cpp:
        (WebCore::PreloadScanner::tokenizeCSS):
        * html/PreloadScanner.h:
        (WebCore::PreloadScanner::CSSState):

2008-12-19  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Geoff Garen.

        <rdar://problem/6454076> Random crashes on JS raytracer

        No test, because the crash is not readily reproducible.

        * platform/text/StringImpl.cpp:
        (WebCore::StringImpl::empty):
        * platform/text/StringImpl.h:
        Made empty string per-thread.

2008-12-19  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Replace some uses of HardRetain etc with RetainPtr.

        * platform/mac/DragImageMac.mm:
        * platform/mac/SharedBufferMac.mm:
        (WebCore::SharedBuffer::createCFData):
        * rendering/RenderThemeMac.mm:
        * svg/graphics/cg/SVGResourceFilterCg.mm:
        (WebCore::SVGResourceFilter::prepareFilter):
        (WebCore::SVGResourceFilter::applyFilter):
        * svg/graphics/mac/SVGResourceFilterPlatformDataMac.h:
        * svg/graphics/mac/SVGResourceFilterPlatformDataMac.mm:
        (WebCore::SVGResourceFilterPlatformDataMac::SVGResourceFilterPlatformDataMac):

2008-12-19  miggilin  <mr.diggilin@gmail.com>

        Reviewed by Kevin Ollivier.

        Add Context Menu support to wx bindings.

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

        * platform/ContextMenu.h:
        * platform/ContextMenuItem.h:
        (WebCore::PlatformMenuItemDescription::PlatformMenuItemDescription):
        * platform/wx/ContextMenuItemWx.cpp: Added.
        * platform/wx/ContextMenuWx.cpp: Added.
        * platform/wx/LocalizedStringsWx.cpp:
        * platform/wx/TemporaryLinkStubs.cpp:
        * webcore-wx.bkl:


2008-12-19  Beth Dakin  <bdakin@apple.com>

        Reviewed by Darin Adler.

        Temporary band-aide fix for <rdar://problem/6372481> In Gmail, a
        crash occurs at
        AccessibilityTable::isTableExposableThroughAccessibility() when
        attempting to create a link in a rich text message

        We need to disable Accessibility Tables until we get this fixed for
        real to prevent rampant crashing.

        * page/AccessibilityTable.cpp:
        (WebCore::AccessibilityTable::AccessibilityTable):

2008-12-19  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Darin Adler

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

        When the document element is transformed, we need to paint
        the view background to avoid unpainted areas.

        Test: fast/transforms/transformed-document-element.html

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

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

        Fix build.

        * WebCore.vcproj/WebCore.vcproj:

2008-12-19  Kevin Ollivier  <kevino@theolliviers.com>

        wx build fixes after recent changes.

        * WebCoreSources.bkl:
        * platform/graphics/wx/ImageSourceWx.cpp:
        (WebCore::ImageSource::clear):
        * webcore-base.bkl:

2008-12-19  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Sam Weinig.

        [GTK] Fix make distcheck again

        These files were moved to WebCore/platform/animation
        and WebCore/platform/graphics/transforms.

        * GNUmakefile.am:

2008-12-19  Gustavo Noronha Silva  <gns@gnome.org>

        Reviewed by Holger Freyther.

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

        Fix AtomicString usage, so that building works.

        * platform/network/soup/ResourceHandleSoup.cpp:

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

        Windows build fix on older versions of CFNetwork after r39393

        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::highestSupportedCFURLConnectionClientVersion): Changed
        preprocessor directives not to leave in unreachable code on old
        versions of CFNetwork.

2008-12-19  Antti Koivisto  <antti@apple.com>

        Comment fix.

        * platform/PurgeableBuffer.h:

2008-12-19  Holger Hans Peter Freyther  <zecke@selfish.org>

        [GTK] Build fix by adding the new files.

        * GNUmakefile.am:

2008-12-19  Jade Han <jade.han@nokia.com>

        Reviewed by Tor Arne Vestbø.

        [Qt] Allow conversion of JavaScript Number and Boolean types to Qt types

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

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

2008-12-19  Tor Arne Vestbø  <tavestbo@trolltech.com>

        Reviewed by Holger Freyther.

        Implement ImageDecoder::filenameExtension() for Qt

        * platform/graphics/qt/ImageDecoderQt.cpp:
        (WebCore::ImageDecoderQt::filenameExtension):
        * platform/graphics/qt/ImageDecoderQt.h:
        * platform/graphics/qt/ImageSourceQt.cpp:
        (WebCore::ImageSource::filenameExtension):

2008-12-19  Adam Barth  <abarth@webkit.org>

        Reviewed by Darin Alder.

        Implement ImageSource::filenameExtension for Cario
          https://bugs.webkit.org/show_bug.cgi?id=22905

        * platform/graphics/cairo/ImageSourceCairo.cpp:
        (WebCore::ImageSource::filenameExtension):
        * platform/image-decoders/ImageDecoder.h:
        * platform/image-decoders/bmp/BMPImageDecoder.h:
        (WebCore::BMPImageDecoder::filenameExtension):
        * platform/image-decoders/gif/GIFImageDecoder.h:
        (WebCore::GIFImageDecoder::filenameExtension):
        * platform/image-decoders/ico/ICOImageDecoder.h:
        (WebCore::ICOImageDecoder::filenameExtension):
        * platform/image-decoders/jpeg/JPEGImageDecoder.h:
        (WebCore::JPEGImageDecoder::filenameExtension):
        * platform/image-decoders/png/PNGImageDecoder.h:
        (WebCore::PNGImageDecoder::filenameExtension):
        * platform/image-decoders/xbm/XBMImageDecoder.h:
        (WebCore::XBMImageDecoder::filenameExtension):

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

        Reviewed by Sam Weinig.

        - avoid using the ResourceHandle-level credential storage, if any,
          unless the client opts to use it; when use of the credential
          storage is disallowed, all authentication challenges are sent to
          the client.
        - let the FrameLoaderClient decide whether to use the credential
          storage.

        * loader/EmptyClients.h:
        (WebCore::EmptyFrameLoaderClient::shouldUseCredentialStorage): Added.
        Returns false.
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::shouldUseCredentialStorage): Added. Calls through
        to the FrameLoaderClient.
        * loader/FrameLoader.h: Declared shouldUseCredentialStorage().
        * loader/FrameLoaderClient.h: Declared shouldUseCredentialStorage().
        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::shouldUseCredentialStorage): Added. Calls
        through to the FrameLoader.
        * loader/ResourceLoader.h:
        (WebCore::ResourceLoader::shouldUseCredentialStorage): Implemented this
        ResourceHandleClient method.
        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::shouldUseCredentialStorage): Added.
        Overrides the ResourceLoader implementation by letting the client
        supply the return value. If the client does not do this, continues
        with the ResourceLoader behavior of asking the FrameLoader.
        * loader/SubresourceLoader.h: Removed an unused #include and declared
        shouldUseCredentialStorage().
        * loader/SubresourceLoaderClient.h:
        (WebCore::SubresourceLoaderClient::getShouldUseCredentialStorage):
        Added a default implementation which returns false, meaning the client
        does not wish to decide whether the credential storage should be used.
        * platform/network/ResourceHandle.h: Removed unused forward declarations.
        Declared a new member function, shouldUseCredentialStorage(), on Mac and
        CFNetwork-using builds.
        * platform/network/ResourceHandleClient.h:
        (WebCore::ResourceHandleClient::shouldUseCredentialStorage): Added this
        default implementation that returns false.
        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::findCFNetworkModule): Added. Returns a handle to the CFNetwork
        module.
        (WebCore::cfNetworkVersion): Added. Returns the high word of the
        CFNetwork library's product version.
        (WebCore::highestSupportedCFURLConnectionClientVersion): Added. Returns
        the highest version of the CFURLConnectionClient structure supported by
        the CFNetwork library. The only reason to check this at runtime is
        that WebKit may be linking at runtime against an older version of
        CFNetwork than the one it was built with, as is the case with nightly
        builds.
        (WebCore::shouldUseCredentialStorageCallback): Added this
        CFURLConnection callback which calls through to
        ResourceHandle::shouldUseCredentialStorage().
        (WebCore::ResourceHandle::start): Pass a version 3 CFURLConnectionClient
        including the shouldUseCredentialStorage callback. At runtime, clamp the
        client structure version down to the highest supported by CFNetwork.
        (WebCore::ResourceHandle::shouldUseCredentialStorage): Added. Calls through
        to the client if there is one. Otherwise returns false.
        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::shouldUseCredentialStorage): Ditto.
        (-[WebCoreResourceHandleAsDelegate connectionShouldUseCredentialStorage:]):
        Added this delegate method which callls through to
        ResourceHandle::shouldUseCredentialStorage().

2008-12-18  David Kilzer  <ddkilzer@apple.com>

        Reset role to "Private" on 6 header files to fix clean builds after r39378

        Reviewed by BUILD FIX.

        * WebCore.xcodeproj/project.pbxproj: Added back "Private" role
        that was lost on 6 headers when they were "moved":
        AffineTransform.h, Animation.h, AnimationList.h,
        TimingFunction.h, TransformOperation.h and
        TransformOperations.h.

2008-12-18  Pamela Greene  <pam@chromium.org>

        Reviewed by Dan Bernstein.

        Add initializer for m_textDirectionSubmenuInclusionBehavior.
        https://bugs.webkit.org/show_bug.cgi?id=22926

        * page/Settings.cpp:
        (WebCore::Settings::Settings): Initialize m_textDirectionSubmenuInclusionBehavior

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

        Reviewed by John Sullivan.

        Add new FrameLoaderClient method to indicate the first visually
        non-empty layout based on an heuristic.  Right now that heuristic
        is the first layout after an image, text or plugin has been added
        to the render tree, but I can imagine it becoming much smarter.

        * loader/EmptyClients.h:
        (WebCore::EmptyFrameLoaderClient::dispatchDidFirstVisuallyNonEmptyLayout):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::didFirstVisuallyNonEmptyLayout):
        * loader/FrameLoader.h:
        * loader/FrameLoaderClient.h:
        * page/FrameView.cpp:
        (WebCore::FrameViewPrivate::reset):
        (WebCore::FrameView::layout):
        (WebCore::FrameView::performPostLayoutTasks):
        (WebCore::FrameView::setIsVisuallyNonEmpty):
        * page/FrameView.h:
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::RenderImage):
        * rendering/RenderPartObject.cpp:
        (WebCore::RenderPartObject::RenderPartObject):
        * rendering/RenderText.cpp:
        (WebCore::RenderText::RenderText):

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

        Reviewed by Sam Weinig.

        - fix <rdar://problem/6449841> reduce memory use of ResourceResponseBase by removing two maps

        We were parsing the cache-control and pragma header field values into maps.
        I changed that so instead we only cache two bits with the data we were actually
        using. Later we might want to move this responsibility out of this class entirely;
        we can cache it at the higher level instead.

        * loader/CachedResource.cpp:
        (WebCore::CachedResource::mustRevalidate): Changed to call a specific API to get at
        the bits in quest instead of a general "cache control directives" API.

        * platform/network/ResourceResponseBase.cpp:
        (WebCore::ResourceResponseBase::setHTTPHeaderField): Remove the logic for the
        pragma header field since no one is using this for now.
        (WebCore::ResourceResponseBase::parseCacheControlDirectives): Eliminated the return
        value and made this function have side effects only. Changed it so it's the caller's
        responsibility to check m_haveParsedCacheControl. Set m_cacheControlContainsNoCache
        and m_cacheControlContainsMustRevalidate rather than keeping a map around.

        * platform/network/ResourceResponseBase.h:
        (WebCore::ResourceResponseBase::cacheControlContainsNoCache): Added.
        (WebCore::ResourceResponseBase::cacheControlContainsMustRevalidate): Added.
        (WebCore::ResourceResponseBase::ResourceResponseBase): Updated since I removed
        m_haveParsedCacheControl and renamed m_haveParsedCacheControlHeader to remove
        the imprecise use of the term "header".

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

        Build fix.
        Delete 2nd copy of code in these files.

        * platform/animation/Animation.cpp:
        * platform/animation/Animation.h:
        * platform/animation/AnimationList.cpp:
        * platform/animation/AnimationList.h:
        * platform/animation/TimingFunction.h:
        * platform/graphics/transforms/AffineTransform.cpp:
        * platform/graphics/transforms/AffineTransform.h:
        * platform/graphics/transforms/IdentityTransformOperation.h:
        * platform/graphics/transforms/MatrixTransformOperation.cpp:
        * platform/graphics/transforms/MatrixTransformOperation.h:
        * platform/graphics/transforms/RotateTransformOperation.cpp:
        * platform/graphics/transforms/RotateTransformOperation.h:
        * platform/graphics/transforms/ScaleTransformOperation.cpp:
        * platform/graphics/transforms/ScaleTransformOperation.h:
        * platform/graphics/transforms/SkewTransformOperation.cpp:
        * platform/graphics/transforms/SkewTransformOperation.h:
        * platform/graphics/transforms/TransformOperation.h:
        * platform/graphics/transforms/TransformOperations.cpp:
        * platform/graphics/transforms/TransformOperations.h:
        * platform/graphics/transforms/TranslateTransformOperation.cpp:
        * platform/graphics/transforms/TranslateTransformOperation.h:

2008-12-18  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Geoffrey Garen.

        https://bugs.webkit.org/show_bug.cgi?id=22859
        Abstract away the use of JSDOMWindow in CachedPage and introduce
        ScriptCachedPageData abstraction.

        * GNUmakefile.am: Added ScriptCachedPageData to project.
        * WebCore.pro: Added ScriptCachedPageData to project.
        * WebCore.vcproj/WebCore.vcproj: Added ScriptCachedPageData to project.
        * WebCore.xcodeproj/project.pbxproj: Added ScriptCachedPageData to
            project.
        * bindings/js/ScriptCachedPageData.cpp: Added.
        (WebCore::ScriptCachedPageData::ScriptCachedPageData):
        (WebCore::ScriptCachedPageData::~ScriptCachedPageData):
        (WebCore::ScriptCachedPageData::restore):
        (WebCore::ScriptCachedPageData::clear):
        * bindings/js/ScriptCachedPageData.h: Added.
        * history/CachedPage.cpp: Replaced JSDOMWindow and ProtectedPtr with
            ScriptCachedPageData.
        (WebCore::CachedPage::CachedPage):
        (WebCore::CachedPage::domWindow):
        (WebCore::CachedPage::restore):
        (WebCore::CachedPage::clear):
        * history/CachedPage.h: Replaced JSDOMWindow and ProtectedPtr with
            ScriptCachedPageData.

2008-12-18  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Dave Hyatt.

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

        To avoid future dependency issues, all the TransformOperations and Animation related files need to be moved to platform

        * WebCore.xcodeproj/project.pbxproj:
        * platform/animation: Added.
        * platform/animation/Animation.cpp: Copied from WebCore/rendering/style/Animation.cpp.
        * platform/animation/Animation.h: Copied from WebCore/rendering/style/Animation.h.
        * platform/animation/AnimationList.cpp: Copied from WebCore/rendering/style/AnimationList.cpp.
        * platform/animation/AnimationList.h: Copied from WebCore/rendering/style/AnimationList.h.
        * platform/animation/TimingFunction.h: Copied from WebCore/rendering/style/TimingFunction.h.
        * platform/graphics/AffineTransform.cpp: Removed.
        * platform/graphics/AffineTransform.h: Removed.
        * platform/graphics/transforms: Added.
        * platform/graphics/transforms/AffineTransform.cpp: Copied from WebCore/platform/graphics/AffineTransform.cpp.
        * platform/graphics/transforms/AffineTransform.h: Copied from WebCore/platform/graphics/AffineTransform.h.
        * platform/graphics/transforms/IdentityTransformOperation.h: Copied from WebCore/rendering/style/IdentityTransformOperation.h.
        * platform/graphics/transforms/MatrixTransformOperation.cpp: Copied from WebCore/rendering/style/MatrixTransformOperation.cpp.
        * platform/graphics/transforms/MatrixTransformOperation.h: Copied from WebCore/rendering/style/MatrixTransformOperation.h.
        * platform/graphics/transforms/RotateTransformOperation.cpp: Copied from WebCore/rendering/style/RotateTransformOperation.cpp.
        * platform/graphics/transforms/RotateTransformOperation.h: Copied from WebCore/rendering/style/RotateTransformOperation.h.
        * platform/graphics/transforms/ScaleTransformOperation.cpp: Copied from WebCore/rendering/style/ScaleTransformOperation.cpp.
        * platform/graphics/transforms/ScaleTransformOperation.h: Copied from WebCore/rendering/style/ScaleTransformOperation.h.
        * platform/graphics/transforms/SkewTransformOperation.cpp: Copied from WebCore/rendering/style/SkewTransformOperation.cpp.
        * platform/graphics/transforms/SkewTransformOperation.h: Copied from WebCore/rendering/style/SkewTransformOperation.h.
        * platform/graphics/transforms/TransformOperation.h: Copied from WebCore/rendering/style/TransformOperation.h.
        * platform/graphics/transforms/TransformOperations.cpp: Copied from WebCore/rendering/style/TransformOperations.cpp.
        * platform/graphics/transforms/TransformOperations.h: Copied from WebCore/rendering/style/TransformOperations.h.
        * platform/graphics/transforms/TranslateTransformOperation.cpp: Copied from WebCore/rendering/style/TranslateTransformOperation.cpp.
        * platform/graphics/transforms/TranslateTransformOperation.h: Copied from WebCore/rendering/style/TranslateTransformOperation.h.
        * rendering/style/Animation.cpp: Removed.
        * rendering/style/Animation.h: Removed.
        * rendering/style/AnimationList.cpp: Removed.
        * rendering/style/AnimationList.h: Removed.
        * rendering/style/IdentityTransformOperation.h: Removed.
        * rendering/style/MatrixTransformOperation.cpp: Removed.
        * rendering/style/MatrixTransformOperation.h: Removed.
        * rendering/style/RotateTransformOperation.cpp: Removed.
        * rendering/style/RotateTransformOperation.h: Removed.
        * rendering/style/ScaleTransformOperation.cpp: Removed.
        * rendering/style/ScaleTransformOperation.h: Removed.
        * rendering/style/SkewTransformOperation.cpp: Removed.
        * rendering/style/SkewTransformOperation.h: Removed.
        * rendering/style/TimingFunction.h: Removed.
        * rendering/style/TransformOperation.h: Removed.
        * rendering/style/TransformOperations.cpp: Removed.
        * rendering/style/TransformOperations.h: Removed.
        * rendering/style/TranslateTransformOperation.cpp: Removed.
        * rendering/style/TranslateTransformOperation.h: Removed.

2008-12-18  Cameron Zwarich  <zwarich@apple.com>

        Reviewed by Geoff Garen.

        Bug 21855: REGRESSION (r37323): Gmail complains about popup blocking when opening a link
        <https://bugs.webkit.org/show_bug.cgi?id=21855>
        <rdar://problem/6278244>

        If JavaScript is not currently executing, the handleEvent member function
        of JSAbstractEventListener should set the dynamic global object to the
        global object of the context in which the event occurred.

        If this is not set, then JavaScriptCore will simply take the global object
        of the context where the event handler function was created, which may be
        a different frame. This will cause the popup blocker to incorrectly block
        windows opened from onclick events inside of an iframe whose handler was
        created in the outer frame, as it will check the outer frame and see that
        it is not processing any events.

        * bindings/js/JSEventListener.cpp:
        (WebCore::JSAbstractEventListener::handleEvent):

2008-12-17  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dave Hyatt

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

        Add the ability to compute clip rects independently from
        caching them on the RenderLayer. When painting reflections, use
        such temporarily computed clipRects, otherwise the layer may cache
        clipRects which are invalid, since they have been computed with
        a rootLayer that is not the one usually used to paint.

        Test: fast/reflections/reflection-overflow-hidden.html

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paintLayer):
        (WebCore::RenderLayer::hitTestLayer):
        (WebCore::RenderLayer::updateClipRects):
        (WebCore::RenderLayer::calculateClipRects):
        (WebCore::RenderLayer::calculateRects):
        * rendering/RenderLayer.h:
        (WebCore::ClipRects::ClipRects):
        (WebCore::ClipRects::reset):
        (WebCore::ClipRects::overflowClipRect):
        (WebCore::ClipRects::setOverflowClipRect):
        (WebCore::ClipRects::fixedClipRect):
        (WebCore::ClipRects::setFixedClipRect):
        (WebCore::ClipRects::posClipRect):
        (WebCore::ClipRects::setPosClipRect):
        (WebCore::ClipRects::setFixed):
        (WebCore::ClipRects::operator==):
        (WebCore::ClipRects::operator=):
        * rendering/RenderReplica.cpp:
        (WebCore::RenderReplica::paint):

2008-12-17  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Simon Hausmann.

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

        Fix MinGW QtWebKit linking problems and also make the
        QtWebKit build system more robust.

        * WebCore.pro:

2008-12-17  Nikolas Zimmermann  <nikolas.zimmermann@torchmobile.com>

        Reviewed by Maciej Stachowiak.

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

        wml.css is based on an older copy of html4.css. Synchronize them.
        Remove all entries, that are irrelevant for WML.

        Fix <do> appearance: should behave like HTMLs <button>.

        * css/wml.css:

2008-12-17  Yury Semikhatsky <yurys@google.com>

        Reviewed by Timothy Hatcher.
        Landed by Adam Barth.

        Added more checks that WebInspector.panels.{resources,scripts} are
        defined where they are accessed from other panels and WebInspector
        (some panels are not yet supported in Chrome).

        * inspector/front-end/Console.js:
        (WebInspector.Console.prototype.addMessage):
        (WebInspector.Console.prototype.clearMessages):
        (WebInspector.Console.prototype.completions):
        * inspector/front-end/ObjectPropertiesSection.js:
        (WebInspector.ObjectPropertyTreeElement.prototype.evaluateExpression):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype.get searchableViews):
        (WebInspector.ScriptsPanel.prototype._sourceViewForScriptOrResource):
        (WebInspector.ScriptsPanel.prototype._sourceFrameForScriptOrResource):
        (WebInspector.ScriptsPanel.prototype._showScriptOrResource):
        * inspector/front-end/SourceView.js:
        (WebInspector.SourceView.prototype._addBreakpoint):
        * inspector/front-end/inspector.js:
        (WebInspector.addResource):
        (WebInspector.removeResource):
        (WebInspector.showResourceForURL):

2008-12-17  Cary Clark  < caryclark@google.com>

        Reviewed by Darin Adler.
        Landed by Adam Barth.

        Add ENABLE_TEXT_CARET to permit the ANDROID platform
        to invalidate and draw the caret in a separate thread.

        * page/Frame.cpp:
        (WebCore::Frame::clearCaretRectIfNeeded): Body of
        function does nothing if text caret is disabled.
        (WebCore::Frame::selectionLayoutChanged): Do nothing
        if text caret is disabled and the caret only blinked.
        (WebCore::Frame::caretBlinkTimerFired):
        (WebCore::Frame::paintCaret):
        (WebCore::Frame::paintDragCaret): Body of
        functions does nothing if text caret is disabled.

2008-12-16  Darin Adler  <darin@apple.com>

        Reviewed and landed by Cameron Zwarich.

        Change the style of AtomicString::add() to match Identifier:add().

        * platform/text/AtomicString.cpp:
        (WebCore::AtomicString::add):

2008-12-16  Adele Peterson  <adele@apple.com>

        Reviewed by Darin Adler.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=22827
        <rdar://problem/6247724> RenderThemeWin buttons have weird heavy text

        * rendering/RenderThemeWin.cpp:
        (WebCore::fillFontDescription): Add version that takes a font size.
        (WebCore::RenderThemeWin::systemFont): Use the default GUI font for control fonts, but specify the size.
        This will match Firefox.

2008-12-16  Stephanie Lewis  <slewis@apple.com>

        Another build fix.

        * platform/text/AtomicString.h:
        (WebCore::AtomicString::AtomicString):

2008-12-16  Stephanie Lewis  <slewis@apple.com>

        Windows Build Fix.

        * platform/text/AtomicString.h:
        (WebCore::AtomicString::AtomicString):
        (WebCore::AtomicString::createCFString):

2008-12-16  Peter Kasting  <pkasting@google.com>

        Reviewed by David Hyatt.

        https://bugs.webkit.org/show_bug.cgi?id=22885
        Fix memory corruption in GIFImageDecoder.cpp with certain GIFs.

        * platform/image-decoders/gif/GIFImageDecoder.cpp:
        (WebCore::GIFImageDecoder::frameComplete):

2008-12-16  Stephanie Lewis  <slewis@apple.com>

        Reviewed by Geoff Garen.

        Change HTTPHeaderMap to use an AtomicString as its key.
        Shaves ~1MB off of the Mozilla Memory Test
        No functionality difference

        * WebCore.xcodeproj/project.pbxproj:
        * inspector/InspectorController.cpp:
        (WebCore::addHeaders):
        * loader/appcache/ApplicationCacheStorage.cpp:
        (WebCore::parseHeader):
        * platform/network/HTTPHeaderMap.h:
        * platform/network/ResourceRequestBase.cpp:
        (WebCore::ResourceRequestBase::httpHeaderField):
        (WebCore::ResourceRequestBase::setHTTPHeaderField):
        (WebCore::ResourceRequestBase::addHTTPHeaderField):
        * platform/network/ResourceRequestBase.h:
        * platform/network/ResourceResponseBase.cpp:
        (WebCore::ResourceResponseBase::httpHeaderField):
        (WebCore::ResourceResponseBase::setHTTPHeaderField):
        * platform/network/ResourceResponseBase.h:
        * platform/text/StringHash.h:
        (WebCore::CaseFoldingHash::hash):
        (WebCore::CaseFoldingHash::equal):
        * xml/XMLHttpRequest.cpp:
        (WebCore::isSetCookieHeader):
        (WebCore::XMLHttpRequest::setRequestHeader):
        (WebCore::XMLHttpRequest::setRequestHeaderInternal):
        (WebCore::XMLHttpRequest::getRequestHeader):
        (WebCore::XMLHttpRequest::getResponseHeader):
        * xml/XMLHttpRequest.h:

2008-12-16  Nikolas Zimmermann  <nikolas.zimmermann@torchmobile.com>

        Reviewed by Darin Adler.

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

        Remove legacy randomNumber() functionality from HTMLFormElement, and use the new wtf/RandomNumber.h.
        Also remove an uneeded QFileInfo include while I'm at it - there is no Qt usage in this file.

        * ForwardingHeaders/wtf/RandomNumber.h: Added.
        * html/HTMLFormElement.cpp:
        (WebCore::getUniqueBoundaryString):

2008-12-16 Yael Aharon <yael.aharon@nokia.com>

        Reviewed by Tor Arne Vestbø.

        Qt/Win build fix

        * platform/win/SystemTimeWin.cpp:

2008-12-16  Kalle Vahlman  <kalle.vahlman@movial.com>

        Reviewed by Holger Freyther.

        [CURL] memory leak of ResouceHandles
        http://bugs.webkit.org/show_bug.cgi?id=20777

        Fix ResourceHandle ref management to be consistent and correct.
        Original patch from Marco Barisione.

        * platform/network/curl/ResourceHandleCurl.cpp:
        (WebCore::ResourceHandle::start):
        * platform/network/curl/ResourceHandleManager.cpp:
        (WebCore::ResourceHandleManager::removeFromCurl):
        (WebCore::ResourceHandleManager::add):
        (WebCore::ResourceHandleManager::removeScheduledJob):

2008-12-16  Simon Hausmann  <simon.hausmann@nokia.com>

        Fix the Qt build.

        * platform/graphics/qt/ImageSourceQt.cpp:
        (WebCore::ImageSource::clear): Adjust to new signature.

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

        Rubber-stamped by Cameron Zwarich.

        <rdar://problem/6289933> Change WebKit-related projects to build with GCC 4.2 on Leopard.

        * Configurations/Base.xcconfig:
        * Configurations/DebugRelease.xcconfig:

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

        Reviewed by Darin Adler.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=22871
        <rdar://problem/6417316> RenderThemeWin buttons are too short/thin

        * rendering/RenderButton.cpp: (WebCore::RenderButton::setupInnerStyle):
        Check if the button's style (not the new inner style) has appearance set to determine whether we should set padding on the inner style.

2008-12-15  Nikolas Zimmermann  <nikolas.zimmermann@torchmobile.com>

        Reviewed by Oliver Hunt.

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

        Add complete WML <table> / <tr> / <td> element support.
        Proper handling of all table related attributes, including tests.

        Tests: fast/wml/table-element-align-attribute-invalid.wml (variable reference in 'align' attribute, raises error)
               fast/wml/table-element-columns-attribute-invalid-number.wml (columns='0', raises error)
               fast/wml/table-element-columns-attribute-invalid.wml (non-numeric 'columns' attribute value, raises error)
               fast/wml/table-element-columns-attribute-missing.wml (missing 'columns')
               fast/wml/table-element-columns-attribute.wml (test 'columns' attribute and <td> count mismatches)

        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::offsetParent):
        * rendering/RenderTableRow.cpp:
        (WebCore::RenderTableRow::addChild):
        * wml/WMLTableElement.cpp: Added.
        (WebCore::WMLTableElement::WMLTableElement):
        (WebCore::WMLTableElement::~WMLTableElement):
        (WebCore::WMLTableElement::mapToEntry):
        (WebCore::WMLTableElement::parseMappedAttribute):
        (WebCore::WMLTableElement::finishParsingChildren):
        * wml/WMLTableElement.h: Added.
        * wml/WMLTagNames.in:

2008-12-15  Darin Adler  <darin@apple.com>

        Reviewed by Sam Weinig.

        - fix <rdar://problem/6427048> crash due to infinite recursion after setting window.__proto__ = window

        Test: fast/dom/Window/window-custom-prototype.html

        Replaced toGlobalObject with the more generally useful unwrappedObject.

        * bindings/js/JSDOMWindowShell.cpp:
        (WebCore::JSDOMWindowShell::unwrappedObject): Added.
        * bindings/js/JSDOMWindowShell.h: Declared unwrappedObject.
        * bindings/js/JSQuarantinedObjectWrapper.h:
        (WebCore::JSQuarantinedObjectWrapper::unwrappedObject): Ditto.

2008-12-15  Gustavo Noronha Silva  <kov@kov.eti.br>

        Reviewed by Mark Rowe.

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

        GTK+ build fix.

        * GNUmakefile.am:

2008-12-15  Sam Weinig  <sam@webkit.org>

        Reviewed by Darin Adler.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=22847
        Geolocation PositionOptions cannot be an arbitrary object.

        Allow the PositionOptions to be a vanilla JS object and parse it
        appropriately.

        * DerivedSources.make: Remove PositionOptions.
        * GNUmakefile.am: Ditto.
        * WebCore.pro: Ditto.
        * WebCore.vcproj/WebCore.vcproj: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * WebCoreSources.bkl: Ditto.

        * bindings/js/JSGeolocationCustom.cpp:
        (WebCore::createPositionOptions): Added. Extracts the enableHighAccuracy
        and timeout fields from a vanilla JS object in order to create the
        PositionOptions object, checking for exceptions as necessary.
        (WebCore::JSGeolocation::getCurrentPosition): Use createPositionOptions
        instead of toPositionOptions.
        (WebCore::JSGeolocation::watchPosition): Ditto.
        * page/PositionOptions.idl: Removed

2008-12-15  Peter Kasting  <pkasting@google.com>

        Reviewed by David Hyatt.

        https://bugs.webkit.org/show_bug.cgi?id=22108
        Large animated GIFs weren't always animating.  The code that deleted
        the entire decoder after each frame of a large image was resulting in
        us forgetting the loop count, breaking animations intermittently.

        Instead of throwing the whole decoder away, we're more careful to just
        delete frames we don't care about.  This additionally addresses
        problems in the Cairo and Chromium ports with excessive peak memory
        use and CPU use when decoding large animated GIFs because it leads to
        much less redecoding (O(n) instead of O(n^2) CPU, and O(1) instead of
        O(n) memory).

        This change has less impact on the CG decoder, which seems to throw
        away frames automatically when their external references are dropped;
        this means the CG decoder didn't suffer from the peak memory usage
        issue before (and still doesn't), but it also still burns excessive
        CPU redecoding earlier frames, that in theory it wouldn't need to
        redecode if it would judiciously save the most recent frames.  At
        least this patch plumbs some useful info to the ImageSource so it can
        help guide the CG decoder heuristics in the future.

        * platform/graphics/BitmapImage.cpp:
        (WebCore::frameBytes):
        (WebCore::BitmapImage::destroyDecodedData):
        (WebCore::BitmapImage::destroyDecodedDataIfNecessary):
        (WebCore::BitmapImage::destroyMetadataAndNotify):
        (WebCore::BitmapImage::clearFrame):
        (WebCore::BitmapImage::cacheFrame):
        (WebCore::BitmapImage::dataChanged):
        (WebCore::BitmapImage::startAnimation):
        (WebCore::BitmapImage::resetAnimation):
        (WebCore::BitmapImage::internalAdvanceAnimation):
        * platform/graphics/BitmapImage.h:
        * platform/graphics/GeneratedImage.h:
        (WebCore::GeneratedImage::destroyDecodedData):
        * platform/graphics/Image.h:
        * platform/graphics/ImageSource.h:
        * platform/graphics/cairo/ImageSourceCairo.cpp:
        (WebCore::ImageSource::~ImageSource):
        (WebCore::ImageSource::clear):
        * platform/graphics/cg/ImageSourceCG.cpp:
        (WebCore::ImageSource::~ImageSource):
        (WebCore::ImageSource::clear):
        * platform/graphics/cg/PDFDocumentImage.h:
        (WebCore::PDFDocumentImage::destroyDecodedData):
        * platform/graphics/qt/StillImageQt.h:
        (WebCore::StillImage::destroyDecodedData):
        * platform/image-decoders/ImageDecoder.h:
        (WebCore::RGBA32Buffer::clear):
        (WebCore::ImageDecoder::clearFrameBufferCache):
        * platform/image-decoders/gif/GIFImageDecoder.cpp:
        (WebCore::GIFImageDecoder::repetitionCount):
        (WebCore::GIFImageDecoder::clearFrameBufferCache):
        (WebCore::GIFImageDecoder::initFrameBuffer):
        * platform/image-decoders/gif/GIFImageDecoder.h:
        * platform/image-decoders/gif/GIFImageReader.h:
        (GIFImageReader::GIFImageReader):
        * svg/graphics/SVGImage.h:
        (WebCore::SVGImage::destroyDecodedData):

2008-12-15  Cameron Zwarich  <zwarich@apple.com>

        Reviewed by Darin Adler.

        Bug 22562: REGRESSION (r37971): events not firing after going back in back/forward cache
        <https://bugs.webkit.org/show_bug.cgi?id=22562>
        <rdar://problem/6414593>

        Restore the Frame's DOMWindow to its previous value when going back in
        the back/forward cache. The fact that it was not getting set before may
        have always caused some subtle bugs with the back/forward cache, but
        after r37971, it causes no events to fire after restoring a page.

        Previously, ScriptController::clearScriptObjects() was calling
        clearPlatformScriptObjects(), which was not actually clearing any
        objects, only updating them to reflect some change in state. Since the
        window shell was not updated until after the call to clearScriptObjects(),
        this didn't actually make that much sense.

        We rename clearPlatformScriptObjects() to reflect its actual purpose and
        call it after the window shell has been updated rather than before.

        Unfortunately, there is no way to test this with a layout test because
        it involves the back/forward cache.

        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::updatePlatformScriptObjects): Renamed from
        clearPlatformScriptObjects(), because the only nonempty implementation
        doesn't actually clear any objects, it updates them. Also made public.
        (WebCore::ScriptController::clearScriptObjects): Remove the call to
        clearPlatformScriptObjects().
        * bindings/js/ScriptController.h:
        * bindings/js/ScriptControllerMac.mm:
        (WebCore::ScriptController::updatePlatformScriptObjects):
        * history/CachedPage.cpp:
        (WebCore::CachedPage::domWindow): Added.
        * history/CachedPage.h:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::cancelAndClear): Added call to updatePlatformScriptObjects().
        (WebCore::FrameLoader::begin): Added call to updatePlatformScriptObjects().
        (WebCore::FrameLoader::open): Added call to updatePlatformScriptObjects().
        * page/Frame.cpp:
        (WebCore::Frame::setDOMWindow): Added.
        (WebCore::Frame::pageDestroyed): Added call to updatePlatformScriptObjects().
        * page/Frame.h:

2008-12-15  Antti Koivisto  <antti@apple.com>

        Reviewed by Darin Adler.

        When a resource is cached locally, WebKit should follow RFC 2616 "Specific end-to-end revalidation" instead of "Unspecified end-to-end revalidation"
        https://bugs.webkit.org/show_bug.cgi?id=17998

        - Enable conditional revalidation for reloads by default.
        - Add a parameter to FrameLoader::reload() for forcing end-to-end reload.
        - To avoid duplicating state remove m_cachePolicy variables from FrameLoader and DocLoader.
          Instead synthezise the policy on demand.

        This speeds up reloads and makes them use way less bandwidth.

        * WebCore.base.exp:
        * loader/CachePolicy.h: Rename CachePolicyRefresh to CachePolicyRevalidate.
        (WebCore::):
        * loader/DocLoader.cpp:
        (WebCore::DocLoader::DocLoader):
        (WebCore::DocLoader::checkForReload): Support CachePolicyRevalidate.
        (WebCore::DocLoader::requestResource):
        (WebCore::DocLoader::cachePolicy):
        * loader/DocLoader.h: Get rid of m_cachePolicy member.
        * loader/FrameLoader.cpp:
        (WebCore::ScheduledRedirection::ScheduledRedirection):
            Add parameter to differentiate refresh from other types of redirects.
            m_cachePolicy was used for signaling this before.
        (WebCore::isBackForwardLoadType):
        (WebCore::FrameLoader::FrameLoader):
        (WebCore::FrameLoader::changeLocation):
        (WebCore::FrameLoader::stopLoading):
        (WebCore::FrameLoader::receivedFirstData):
        (WebCore::FrameLoader::write):
        (WebCore::FrameLoader::startIconLoader):
        (WebCore::FrameLoader::restoreDocumentState):
        (WebCore::FrameLoader::scheduleHTTPRedirection):
        (WebCore::FrameLoader::scheduleLocationChange):
        (WebCore::FrameLoader::scheduleRefresh):
        (WebCore::FrameLoader::redirectionTimerFired):
        (WebCore::FrameLoader::canCachePage):
        (WebCore::FrameLoader::loadURL):
        (WebCore::FrameLoader::reload):
            Differentiate between revalidation and reload.
            No need to use setHTTPHeaderField here, addExtraFieldsToRequest will set the headers.
        (WebCore::FrameLoader::transitionToCommitted):
        (WebCore::FrameLoader::cachePolicy): Determine the cache policy based on current load type.
        (WebCore::FrameLoader::checkLoadCompleteForThisFrame):
        (WebCore::FrameLoader::addExtraFieldsToRequest): Set Cache-control: no-cache for FrameLoadTypeReloadFromOrigin
        (WebCore::FrameLoader::shouldScrollToAnchor):
        (WebCore::FrameLoader::loadItem):
        (WebCore::FrameLoader::updateHistoryForReload):
        (WebCore::FrameLoader::updateHistoryForCommit):
        (WebCore::FrameLoader::switchOutLowBandwidthDisplayIfReady):
        * loader/FrameLoader.h:
        * loader/FrameLoaderTypes.h: Add FrameLoadTypeReloadFromOrigin
        (WebCore::):
        * loader/NavigationAction.cpp:
        (WebCore::navigationType):  Support FrameLoadTypeReloadFromOrigin
        * loader/loader.cpp:
        (WebCore::Loader::Host::servePendingRequests):

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

        Reviewed by Simon Hausmann.

        Add null checks to PlatformScreenQt

        The other ports do the null checks and JSDOMWindowBase is
        at least one caller that is passing 0.

        * platform/qt/PlatformScreenQt.cpp:
        (WebCore::screenDepth):
        (WebCore::screenDepthPerComponent):
        (WebCore::screenIsMonochrome):
        (WebCore::screenRect):
        (WebCore::screenAvailableRect):

2008-12-15  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Oliver Hunt.

        <rdar://problem/6444455> Worker Thread crash running multiple workers for a moderate amount of time

        * dom/WorkerThread.cpp: (WebCore::WorkerThread::workerThread):
        Detach the thread. Without this, one page of its stack was never unmmaped, and fragmentation
        made RegisterFile allocaiton fail after a while.

2008-12-13  Darin Adler  <darin@apple.com>

        Reviewed by Sam Weinig.

        - half of https://bugs.webkit.org/show_bug.cgi?id=17425
          eliminate DeprecatedPtrList

        * dom/Document.cpp:
        (WebCore::Document::removeImage): Change to set slots in the vector
        to 0 rather than removing items from a list.
        (WebCore::Document::dispatchImageLoadEventsNow): Rewrite to process
        the list. Since we now use a "set to zero" design, we don't need to
        be careful about where the iterator points while iterating the list,
        instead we just have to skip zeros.

        * dom/Document.h: Use Vector instead of DeprecatedPtrList.

        * dom/EventTargetNode.cpp:
        (WebCore::EventTargetNode::dispatchGenericEvent): Use a Vector instead
        of a DeprecatedPtrList for the list of nodes to handle. Also streamlined
        the logic a bit and used goto in a couple key places.

        * dom/Node.cpp:
        (WebCore::Node::eventParentNode): Moved this function into this file
        because it's a virtual function so already can't be inlined. Also updated
        to return a ContainerNode, so it needs to be in a place where the
        definition of ContainerNode is visible, not the header file.

        * dom/Node.h: Changed return type of eventParentNode to ContainerNode
        and moved its definition into the cpp file.

        * dom/XMLTokenizerLibxml2.cpp:
        (WebCore::PendingCallbacks::~PendingCallbacks): Added a call to
        deleteAllValues here instead of setAutoDelete in the constructor, since
        we're using Deque instead of DeprecatedPtrList.
        (WebCore::PendingCallbacks::callAndRemoveFirstCallback): Changed the
        code to use an OwnPtr since the deque won't delete the callback object.

        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::applyRelativeFontStyleChange): Use a
        Vector instead of a DeprecatedPtrList.

        * svg/SVGElement.cpp:
        (WebCore::SVGElement::eventParentNode): Moved this function into this file
        because it's a virtual function so already can't be inlined. Also updated
        to return a ContainerNode.

        * svg/SVGElement.h: Changed setShadowParentNode to take a ContainerNode*,
        made eventParentNode return a ContainerNode*, and made m_shadowParent a
        ContainerNode*.

2008-12-14  Nikolas Zimmermann  <nikolas.zimmermann@torchmobile.com>

        Reviewed by George Staikos.

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

        Jumps within a WML deck using <go> task elements fail. Manual reloading
        is necessary to display the page - fix cache-policy in WMLGoElement::executeTask
        to prevent the problem.

        Refactor setActiveCardInDocument in two new functions: findNamedCardInDocument
        and determineActiveCard, to fix a side-effect of executing a <go> task:
        when switching cards within a deck the active card was changed before the load
        was fired which resulted in a flash effect on the screen, and doing unnecessary work.

        Test: wml/go-task-animation.html

        * wml/WMLCardElement.cpp:
        (WebCore::WMLCardElement::findNamedCardInDocument):
        (WebCore::WMLCardElement::determineActiveCard):
        * wml/WMLCardElement.h:
        * wml/WMLDocument.cpp:
        (WebCore::WMLDocument::finishedParsing):
        * wml/WMLGoElement.cpp:
        (WebCore::WMLGoElement::executeTask):
        (WebCore::WMLGoElement::prepareGETRequest):
        * wml/WMLGoElement.h:

2008-12-14  Dirk Schulze  <krit@webkit.org>

        Reviewed by Oliver Hunt.

        Fixes an issue in cairo. A fully transparent color can cause wrong
        drawings on canvas' composite.

        https://bugs.webkit.org/show_bug.cgi?id=22846
        [CAIRO] Canvas: transparent color and composite

        Test: fast/canvas/canvas-transparency-and-composite.html

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

2008-12-13  Julien Chaffraix  <jchaffraix@webkit.org>

        Reviewed by Darin Adler.

        Bug 22665: Remove setCreatedByParser(bool) from the few elements that use it
        https://bugs.webkit.org/show_bug.cgi?id=22665

        Remove setCreatedByParser from frame and iframe.

        * html/HTMLElementFactory.cpp:
        (WebCore::frameConstructor):
        (WebCore::iframeConstructor):
        (WebCore::objectConstructor):
        * html/HTMLFrameElement.cpp:
        (WebCore::HTMLFrameElement::HTMLFrameElement):
        * html/HTMLFrameElement.h:
        * html/HTMLFrameElementBase.cpp:
        (WebCore::HTMLFrameElementBase::HTMLFrameElementBase):
        * html/HTMLFrameElementBase.h:
        * html/HTMLFrameOwnerElement.cpp:
        (WebCore::HTMLFrameOwnerElement::HTMLFrameOwnerElement):
        * html/HTMLFrameOwnerElement.h:
        (WebCore::HTMLFrameOwnerElement::createdByParser):
        * html/HTMLIFrameElement.cpp:
        (WebCore::HTMLIFrameElement::HTMLIFrameElement):
        * html/HTMLIFrameElement.h:
        * html/HTMLPlugInElement.cpp:
        (WebCore::HTMLPlugInElement::HTMLPlugInElement):
        * html/HTMLTagNames.in:

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

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=22843
        Auto-generate JSWorkerContext

        * bindings/scripts/CodeGeneratorJS.pm:
        * dom/WorkerContext.idl: Added.
        * page/DOMWindow.idl:
        Added ExtendsDOMGlobalObject, a new attribute for behaviors common to DOMWindow and
        WorkerContext.

        * bindings/js/WorkerScriptController.cpp:
        (WebCore::WorkerScriptController::initScript):
        Made JSWorkerContext creation look more like JSDOMWindow creation, to work with generated code.

        * DerivedSources.make:
        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.scons:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSWorkerContext.cpp: Removed.
        * bindings/js/JSWorkerContext.h: Removed.
        * bindings/js/JSWorkerContextBase.cpp: Copied from WebCore/bindings/js/JSWorkerContext.cpp.
        (WebCore::JSWorkerContextBase::JSWorkerContextBase):
        (WebCore::JSWorkerContextBase::~JSWorkerContextBase):
        (WebCore::JSWorkerContextBase::scriptExecutionContext):
        (WebCore::getJSWorkerContextBaseTable):
        (WebCore::):
        (WebCore::JSWorkerContextBase::put):
        * bindings/js/JSWorkerContextBase.h: Copied from WebCore/bindings/js/JSWorkerContext.h.
        * bindings/js/JSWorkerContextCustom.cpp: Added.
        (WebCore::JSWorkerContext::customGetOwnPropertySlot):
        (WebCore::JSWorkerContext::mark):
        (WebCore::JSWorkerContext::self):
        (WebCore::JSWorkerContext::setSelf):
        (WebCore::JSWorkerContext::addEventListener):
        (WebCore::JSWorkerContext::removeEventListener):
        Moved code around. Note that currently, JSWorkerContextBase lookup table is empty, but we'll
        need to add some global objects to it in the future, as it is done in JSDOMWindowBase.

        * page/WorkerNavigator.cpp:
        * page/WorkerNavigator.h:
        Added ENABLE(WORKERS) ifdefs.

2008-12-13  Darin Adler  <darin@apple.com>

        - fix Release build

        * dom/Node.cpp:
        (WebCore::Node::rareData): Remove inappropriate inline directive.

2008-12-13  Darin Adler  <darin@apple.com>

        Reviewed by Dan Bernstein.

        - fix https://bugs.webkit.org/show_bug.cgi?id=18734
          REGRESSION (r31081): Focus problems in Gmail 2/Plain text message text
          <rdar://problem/5892415>

        Test: fast/forms/textarea-selection-preservation.html

        The regression reported was caused by the fact that the renderer code had
        a bug where it would constantly think the newline at the end of text was
        missing, and so it would replace all the text even though it wasn't changing,
        which would destroy the selection.

        When writing the regression test I discovered another problem: The value
        property in HTMLTextAreaElement was intentionally changing the selection
        to the end of the textarea, but doing that even when the value wasn't changing.

        This patch fixes both and the test checks both.

        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::setValue): Exit early if the value is
        not changing.

        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::text): Add a newline character for each <br>
        element encountered in the control

2008-12-13  Darin Adler  <darin@apple.com>

        - file deletion part of https://bugs.webkit.org/show_bug.cgi?id=17497
          eliminate DeprecatedValueList

        * GNUmakefile.am: Removed references to deleted files.
        * WebCore.pro: Ditto.
        * WebCore.scons: Ditto.
        * WebCore.vcproj/WebCore.vcproj: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * WebCoreSources.bkl: Ditto.

        * platform/DeprecatedPtrQueue.h: Removed.
        * platform/DeprecatedValueList.h: Removed.
        * platform/DeprecatedValueListImpl.cpp: Removed.
        * platform/DeprecatedValueListImpl.h: Removed.

2008-12-13  Darin Adler  <darin@apple.com>

        Reviewed by Anders Carlsson.

        - https://bugs.webkit.org/show_bug.cgi?id=17497
          eliminate DeprecatedValueList

        * css/CSSStyleDeclaration.cpp: Removed unneeded include.

        * dom/Document.cpp:
        (WebCore::Document::removeAllEventListenersFromAllNodes):
        Set the removed flag on the window event listeners in case we
        are in the middle of dispatching events on this window.
        (WebCore::Document::clear): Ditto.
        (WebCore::Document::handleWindowEvent): Changed to use a vector
        instead of a DeprecatedPtrList.
        (WebCore::Document::windowInlineEventListenerForType): Ditto.
        (WebCore::Document::removeWindowInlineEventListenerForType): Ditto.
        Also added a call to setRemoved, which is needed here just as in
        other functions that remove.
        (WebCore::Document::removeWindowEventListener): Ditto.
        (WebCore::Document::hasWindowEventListener): Ditto.

        * dom/Document.h: Changed RegisteredEventListenerList to
        RegisteredEventListeners.

        * dom/Element.cpp:
        (WebCore::Element::attach): Use a function to access rare data instead
        of getting directly at the data field.
        (WebCore::Element::focus): Ditto.
        (WebCore::Element::cancelFocusAppearanceUpdate): Ditto.

        * dom/ElementRareData.h: Use "using" to make things that are protected
        in NodeRareData be public here.

        * dom/EventTarget.h: Removed include of DeprecatedValueList and
        related declearations that weren't needed. Tweaked the definitions
        of the forbidEventDispatch functions too.

        * dom/EventTargetNode.cpp:
        (WebCore::EventTargetNode::EventTargetNode): Eliminated code that
        was used to initialized m_regdListeners.
        (WebCore::EventTargetNode::~EventTargetNode): Elminated delete of
        m_regdListeners. Changed code to use eventListeners() instead of
        m_regdListeners.
        (WebCore::EventTargetNode::eventListeners): Added.
        (WebCore::EventTargetNode::insertedIntoDocument): Use eventListeners.
        (WebCore::EventTargetNode::removedFromDocument): Ditto.
        (WebCore::EventTargetNode::willMoveToNewOwnerDocument): Ditto.
        (WebCore::EventTargetNode::didMoveToNewOwnerDocument): Ditto.
        (WebCore::EventTargetNode::addEventListener): Ditto.
        (WebCore::EventTargetNode::removeEventListener): Ditto.
        (WebCore::EventTargetNode::removeAllEventListeners): Ditto.
        Also added code to call setRemoved on all the listeners.
        (WebCore::EventTargetNode::handleLocalEvents): Ditto.
        (WebCore::EventTargetNode::dispatchGenericEvent): Fixed indentation.
        (WebCore::EventTargetNode::removeInlineEventListenerForType): Use
        the new event listeners vector. Also added missing call to setRemoved.
        (WebCore::EventTargetNode::inlineEventListenerForType): Ditto.

        * dom/EventTargetNode.h: Added a new RegisteredEventListenerVector
        type and replaced the old localEventListeners function with a new
        eventListeners function. Removed m_regdListeners.

        * dom/Node.cpp:
        (WebCore::Node::childNodes): Removed unneeded std prefix.
        (WebCore::Node::setFocus): Use function instead of going directly
        at rare data.
        (WebCore::Node::rareDataFocused): Ditto.
        (WebCore::Node::registerDynamicNodeList): Removed unneeded std prefix.
        (WebCore::Node::getElementsByName): Ditto.
        (WebCore::Node::getElementsByClassName): Ditto.
        (WebCore::Node::compareDocumentPosition): Ditto.

        * dom/Node.h: Removed unneeded forward declaration of
        RegisteredEventListener. This is now in EventTargetNode.

        * dom/NodeRareData.h: Renamed m_focused to m_isFocused and made it
        private. Made m_needsFocusAppearanceUpdateSoonAfterAttach private.
        Added listeners and ensureListeners functions as well as isFocused,
        setFocused, and focus-appearance functions. Made all data members private.

        * dom/RegisteredEventListener.cpp: Removed operator ==.
        * dom/RegisteredEventListener.h: Removed operator == and !=.

        * svg/SVGElement.cpp:
        (WebCore::hasLoadListener): Rewrote to work with the vector.
        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::transferEventListenersToShadowTree): Ditto.

2008-12-13  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Dan Bernstein.

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

        Change ENABLE(FONT_FAST_PATH) to USE(FONT_FAST_PATH). With r39206
        floatWidth always used the complex path causing a regression
        in the pixel tests.

        * platform/graphics/Font.cpp:
        (WebCore::Font::floatWidth): Use the fast path again

2008-12-13  Dirk Schulze  <krit@webkit.org>

        Reviewed by Darin Adler.

        Fixes behavior of gradients on empty path in canvas/Cg

        https://bugs.webkit.org/show_bug.cgi?id=22844
        [Cg] Canvas fill() draws gradients even without a path

        Test: fast/canvas/canvas-gradient-without-path.html

        * html/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::fill):
        (WebCore::CanvasRenderingContext2D::stroke):

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

        wx build fix.

        * platform/graphics/wx/ImageSourceWx.cpp:
        (WebCore::ImageSource::filenameExtension):

2008-12-12  Brent Fulgham  <bfulgham@gmail.com>

        Reviewed by Oliver Hunt.

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

        Provides implementation of image dragging logic for Windows Cairo
        back-end.

        * platform/win/DragImageCGWin.cpp:
        (WebCore::deallocContext): Add a generic CGContextRef destructor.
        * platform/win/DragImageCairoWin.cpp:
        (WebCore::deallocContext): Add a generic cairo_* destructor.
        (WebCore::allocImage):  New implementation to allocate a Cairo
        surface of a specified size.
        (WebCore::createCairoContextFromBitmap): New implementation to
        create a Cairo surface from a Windows BITMAP.
        (WebCore::scaleDragImage): Replace stub with implementation to
        actually create a scaled image.
        (WebCore::createDragImageFromImage): Replace stub with implementation
        to actually create an image.

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

        Reviewed by Darin Adler.

        Expose WebKitAnimationEvent, WebKitTransitionEvent,
        WebKitCSSTransformValue, WebKitCSSKeyframeRule and
        WebKitCSSKeyframesRule to Window object.
        This required generating constructors for the event
        interfaces.

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

        * dom/WebKitAnimationEvent.idl:
        * dom/WebKitTransitionEvent.idl:
        * page/DOMWindow.idl:

2008-12-12  Dave Moore  <davemoore@google.com>

        Reviewed by Eric Seidel.

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

        In Font::drawTextUsingSVGFont() a variable of type SVGTextRunWalkerDrawTextData
        is created on the stack (called data). One of its fields, charsConsumed, is
        unitialized, leading to random values after calling walk() on the
        SVGTextRunWalker created with it. I now initialize the variable

        This bug was revealed in our Purify run. I don't know of any specific incorrect
        behavior caused by it but it would lead to the charsConsumed field having a
        a wrong value.

        * svg/SVGFont.cpp:
        (WebCore::Font::drawTextUsingSVGFont):

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

        Rubber Stamped by Steve Falkenburg.

        Build fix.

        * platform/KURL.h:

2008-12-12  Brett Wilson  <brettw@chromium.org>

        Reviewed by Darin Adler.

        Add the ability so that Google-URL can optionally be used in a build
        of WebKit without changing the shared header. The guts of KURL are
        optionally ifdefed out, and the replacement code goes in a different
        header to avoid polluting KURL.h

        * platform/KURL.cpp:
        * platform/KURL.h:
        (WebCore::KURL::string):
        (WebCore::KURL::operator const String&):
        (WebCore::KURL::operator JSC::UString):
        (WebCore::KURL::operator NSString*):
        (WebCore::KURL::parsed):
        (WebCore::KURL::utf8String):
        (WebCore::KURL::isNull):
        (WebCore::KURL::isEmpty):
        (WebCore::KURL::isValid):
        (WebCore::KURL::hostStart):
        (WebCore::KURL::hostEnd):
        (WebCore::KURL::pathStart):
        (WebCore::KURL::pathEnd):
        (WebCore::KURL::pathAfterLastSlash):

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

        Delete the previous timer-queue timer in the main thread, just prior to scheduling a new timer.
        The code previously called DeleteTimerQueueTimer in the timer callback proc.

        The new technique simplifies the code, since we now create and delete timers on the
        same thread, and don't access the timer queue or timer handles in the callback.
        This allows us to remove some mutex use, and more importantly, it solves a race
        condition that was occuring between ChangeTimerQueueTimer and DeleteTimerQueueTimer.

        Since the timer callback isn't passed the timer handle, we were retrieving that handle
        via a global. If the timer callback code was entered, but then a new timer was immediately
        scheduled (prior to the callback acquiring the mutex and calling DeleteTimerQueueTimer),
        there was a small window where the timer could be re-scheduled via ChangeTimerQueueTimer
        and then immediately deleted once the already running callback acquired the mutex and
        then called DeleteTimerQueueTimer. This resulted in the newly scheduled timer never firing.

        Reviewed by Oliver Hunt.

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

2008-12-12  Kai Brüning  <kai@granus.net>

        Reviewed and tweaked by Darin Adler.

        - fix https://bugs.webkit.org/show_bug.cgi?id=18205
          DOMNode objects are garbage collected although there are strong references
          <rdar://problem/6441200>

        Fixes resurrection bug for wrapper objects by using an NSMapTable with zeroing weak
        memory for the wrapper reference for DOMWrapperCache (DOMInternal.mm),
        JSWrapperCache (WebScriptObject.mm) and wrapperCache (DOMRGBColor.mm).
        BUILDING_ON_TIGER is used to create a Leopard-only NSMapTable or an old-style
        procedural map table for Tiger systems.

        No regression tests yet since we don't currently run any tests in GC mode.

        * bindings/objc/DOMInternal.h: added WebCore::createWrapperCache for use by all three caches
        * bindings/objc/DOMInternal.mm:
        (WebCore::createWrapperCache): Contains the compile-time check for map table creation
        (WebCore::getDOMWrapper): HashMap -> NSMapTable
        (WebCore::addDOMWrapper): ditto
        (WebCore::removeDOMWrapper): ditto
        * bindings/objc/DOMObject.mm: removed [DOMObject finalize]
        * bindings/objc/DOMRGBColor.mm: removed [DOMRGBColor finalize]
        (WebCore::getWrapperForRGB): CFMutableDictionaryRef -> NSMapTable
        (WebCore::setWrapperForRGB): ditto
        (WebCore::removeWrapperForRGB): ditto
        * bindings/objc/WebScriptObject.mm:
        (WebCore::getJSWrapper): HashMap -> NSMapTable
        (WebCore::addJSWrapper): ditto
        (WebCore::removeJSWrapper): ditto
        (-[WebScriptObject finalize]): removed call of removeJSWrapper()

2008-12-12  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Alexey Proskuryakov.

        https://bugs.webkit.org/show_bug.cgi?id=22813
        Remove unused references to JSDOMBinding, CallFrame, and JSLock.

        * dom/Node.cpp: Removed CallFrame and JSLock header includes.
        * loader/FrameLoader.cpp: Removed JSDOMBinding header include.

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

        Reviewed by Simon Hausmann.

        Update the WebKit.qrc and add a script to automatically generate the file.

        With the way rcc and qmake work this can not be done at build time
        as the WebKit.qrc must sit inside the directory that contains the files
        and at build time we may not change the content of the source directory.

        * inspector/front-end/WebKit.qrc: Updated with new script

2008-12-12  Oliver Hunt  <oliver@apple.com>

        Reviewed by Alexey Proskuryakov.

        REGRESSION: Canvas is broken in high dpi mode
        <rdar://problem/6432739> <https://bugs.webkit.org/show_bug.cgi?id=22823>

        Simply made sure that we correctly scale the graphics context to
        account for the difference between logical and buffer resolution.

        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::createImageBuffer):
        (WebCore::HTMLCanvasElement::baseTransform):

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

        Rubber-stamped by Oliver Hunt.

        Share PluginView::paintMissingPluginIcon() between ports

        Also, enable this feature for Qt/X11, Qt/Mac and GTK

        * plugins/PluginView.cpp:
        (WebCore::PluginView::paintMissingPluginIcon):
        * plugins/gtk/PluginViewGtk.cpp:
        (WebCore::PluginView::paint):
        * plugins/mac/PluginViewMac.cpp:
        (WebCore::PluginView::paint):
        * plugins/qt/PluginViewQt.cpp:
        (WebCore::PluginView::paint):
        * plugins/win/PluginViewWin.cpp:

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

        Reviewed by Simon Hausmann.

        [Qt/Mac] Implement PluginView::updatePluginWidget()

        We should update the window and clip rect regardless of whether or
        not the plugin has been loaded, for example to ensure that the
        missing plugin image is placed correctly.

        * plugins/mac/PluginViewMac.cpp:
        (WebCore::PluginView::setNPWindowIfNeeded):
        (WebCore::PluginView::updatePluginWidget):

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

        Rubber-stamped by Oliver Hunt.

        Make PluginView::updatePluginWidget() non-const

        We can do this now since frameRectsChanged() is no longer const. This
        also allows us to get rid of the mutables in the PluginView.

        * platform/qt/TemporaryLinkStubs.cpp:
        (PluginView::updatePluginWidget):
        * plugins/PluginView.h:
        * plugins/gtk/PluginViewGtk.cpp:
        (WebCore::PluginView::updatePluginWidget):
        * plugins/mac/PluginViewMac.cpp:
        (WebCore::PluginView::updatePluginWidget):
        * plugins/qt/PluginViewQt.cpp:
        (WebCore::PluginView::updatePluginWidget):
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginView::updatePluginWidget):
        * plugins/wx/PluginViewWx.cpp:
        (WebCore::PluginView::updatePluginWidget):

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

        Reviewed by Simon Hausmann.

        Implement ImageSource::filenameExtension() for the Qt port

        We're using QImageReader::imageFormat().toLower() to check
        that the image format is supported, and if it is we store
        the resulting extension when creating the ImageDecoderQt.

        * platform/graphics/qt/ImageDecoderQt.cpp:
        (WebCore::ImageDecoderQt::create):
        (WebCore::ImageDecoderQt::ImageDecoderQt):
        (WebCore::ImageDecoderQt::imageFormat):
        * platform/graphics/qt/ImageDecoderQt.h:
        * platform/graphics/qt/ImageSourceQt.cpp:
        (WebCore::ImageSource::setData):
        (WebCore::ImageSource::filenameExtension):

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

        Reviewed by Geoff Garen

        Account for the size of the response and request headers as well as other overhead
        when calculating the size a resource takes up in the cache.  Halts unbounded
        growth in the cache.  Reduced stress test memory high water marks by > 50%.

        Uses estimates gathered from the stress test to set the overhead size.
        A version of the patch was created that calculated most of the sizes, but it was
        decided that the patch was still at a basic level an estimate.  What gains it made
        in accuracy was offset by the complexity involved in creating and updating the
        estimate.

        * loader/Cache.cpp:
        (WebCore::Cache::resourceAccessed):
        (WebCore::Cache::TypeStatistic::addResource):
        (WebCore::Cache::dumpLRULists):
        * loader/CachedResource.cpp:
        (WebCore::CachedResource::overheadSize):
        * loader/CachedResource.h:
        (WebCore::CachedResource::size):

2008-12-11  Nikolas Zimmermann  <nikolas.zimmermann@torchmobile.com>

        Reviewed by Holger Freyther.

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

        Add <wml> image element support. Based on HTML/SVGImage{Element/Loader}, with
        the only difference that WML defines a second source attribute 'localsrc', that
        takes precedence over the 'src' attribute. If loading the 'localsrc' attribute
        fails, the user agent should try loading the 'src' attribute. If both fail the
        'alt' fallback content will be used - just like in HTML.

        Fixes: fast/wml/img-localsrc.wml (<img> and 'localsrc' attribute)
               fast/wml/img-src-localsrc-alt.wml ('localsrc'/'src' fallback handling)
               fast/wml/img-src.wml (<img> and 'src' attribute)

        * GNUmakefile.am:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * rendering/HitTestResult.cpp:
        (WebCore::HitTestResult::altDisplayString):
        (WebCore::HitTestResult::absoluteImageURL):
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::updateAltText):
        * wml/WMLImageElement.cpp: Added.
        (WebCore::WMLImageElement::WMLImageElement):
        (WebCore::WMLImageElement::~WMLImageElement):
        (WebCore::WMLImageElement::mapToEntry):
        (WebCore::WMLImageElement::parseMappedAttribute):
        (WebCore::WMLImageElement::attach):
        (WebCore::WMLImageElement::createRenderer):
        (WebCore::WMLImageElement::insertedIntoDocument):
        (WebCore::WMLImageElement::isURLAttribute):
        (WebCore::WMLImageElement::imageSourceAttributeName):
        (WebCore::WMLImageElement::altText):
        * wml/WMLImageElement.h: Added.
        (WebCore::WMLImageElement::useFallbackAttribute):
        (WebCore::WMLImageElement::setUseFallbackAttribute):
        * wml/WMLImageLoader.cpp: Added.
        (WebCore::WMLImageLoader::WMLImageLoader):
        (WebCore::WMLImageLoader::~WMLImageLoader):
        (WebCore::WMLImageLoader::dispatchLoadEvent):
        (WebCore::WMLImageLoader::sourceURI):
        (WebCore::WMLImageLoader::notifyFinished):
        * wml/WMLImageLoader.h: Added.
        * wml/WMLTagNames.in:

2008-12-11  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Darin Adler.

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

        Do not run into the WebCore::DocumentLoader::updateLoading
        ASSERT on Gtk+/CURL when trying to load tests from our LayoutTests.

        Do not call setPrimaryLoadComplete when the
        activeDocumentLoader has already been replaced. This can happen
        when a script executed from within FramerLoader::didFinishLoading will
        navigate to another URL.

        The assertion is caused by existing tests (e.g.
        fast/history/clicked-link-is-visited.html) reproducing this with
        network backends not equal to curl is tough or maybe not
        even possible.

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::setPrimaryLoadComplete):

2008-12-11  Nikolas Zimmermann  <nikolas.zimmermann@torchmobile.com>

        Reviewed by Eric Seidel.

        - Remove some dead, commented-out code from WMLAElement.
        - Add missing virtual destructor for <noop>, as suggested by Alexey.
        - Refactor addHTMLAlignment in a static helper function to share with WML.

        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::addHTMLAlignment):
        (WebCore::HTMLElement::addHTMLAlignmentToStyledElement):
        * html/HTMLElement.h:
        * wml/WMLAElement.cpp:
        (WebCore::WMLAElement::defaultEventHandler):
        * wml/WMLNoopElement.cpp:
        (WebCore::WMLNoopElement::~WMLNoopElement):
        * wml/WMLNoopElement.h:

2008-12-10  Oliver Hunt  <oliver@apple.com>

        Reviewed by Adele Peterson.

        <rdar://problem/6302405> Crash (null-deref) when using :before pseudoselector with content CSS rule in SVG
        <https://bugs.webkit.org/show_bug.cgi?id=22804>

        This issue was caused by css generated content resulting in non-svg flowboxes
        being injected into SVG content.  As SVG spec does not describe behaviour in
        this case, and neither Opera nor Firefox displays such generated content, so
        now we make svg text layout and rendering just ignore any such content.

        Test: svg/css/crash-css-generated-content.xhtml

        * rendering/SVGRootInlineBox.cpp:
        (WebCore::SVGRootInlineBox::buildLayoutInformation):
        (WebCore::SVGRootInlineBox::layoutInlineBoxes):
        (WebCore::SVGRootInlineBox::buildTextChunks):

2008-12-11  Cameron Zwarich  <zwarich@apple.com>

        Reviewed by Dave Hyatt.

        Bug 21256: REGRESSION (r36906): horizontally repeating image leaves ghosts when vertical scrolling
        <https://bugs.webkit.org/show_bug.cgi?id=21256>
        <rdar://problem/6362978>

        The ScrollView refactoring in r36906 caused the ScrollView and the
        platform widget to disagree about whether optimizing scrolling via
        blitting is allowed. The easiest way to fix this is to make ScrollView
        simply ask the platform widget whether this is safe on platforms that
        are affected.

        It is not possible to write a layout test for this bug because it
        involves the back/forward cache.

        * platform/ScrollView.cpp:
        (WebCore::ScrollView::ScrollView):
        (WebCore::ScrollView::setCanBlitOnScroll):
        (WebCore::ScrollView::canBlitOnScroll):
        (WebCore::ScrollView::platformSetCanBlitOnScroll):
        (WebCore::ScrollView::platformCanBlitOnScroll):
        * platform/ScrollView.h:
        * platform/mac/ScrollViewMac.mm:
        (WebCore::ScrollView::platformSetCanBlitOnScroll):
        (WebCore::ScrollView::platformCanBlitOnScroll):
        * platform/wx/ScrollViewWx.cpp:
        (WebCore::ScrollView::platformSetCanBlitOnScroll):
        (WebCore::ScrollView::platformCanBlitOnScroll):

2008-12-11  Brent Fulgham  <bfulgham@gmail.com>

        Reviewed by Adam Roben.

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

        Correct build break due to malformed XML in Visual Studio project
        following @r39205 change.

        * WebCore.vcproj/WebCore.vcproj: Correct file entry so project loads.

2008-12-10  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Dave Hyatt.

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

        This gets rid of the per-animation timers which were used when an animation
        started, ended and looped. Their job is now done by the main AnimationController's
        timer. It is now set to fire as needed. For instance, if there is a delay, it will
        fire after the delay time and then every 30ms to run the animation. The start, loop
        and end events are generated as needed during the firing of this timer.

        I had to add one more bit of code. When animation timers used to fire the animation events.
        This would always happen from the RunLoop, so any style changes that happened in the
        event handler would get picked up on the next updateRendering() call. But now the start
        event is generated during the styleIsAvailable() call, which is in the middle of the
        updateRendering() cycle. And calling an event handler in the middle of updateRendering()
        is not allowed and causes style changes to get missed. We already have a mechanism in
        AnimationController to defer updateRendering() calls. So I added logic to defer all
        event handling to there. Now, I put any request for event handling into a list and ask
        for a deferred updateRendering() call. When that deferred timer fires, I go through that
        list, send all the events and then call updateRendering().

        * page/animation/AnimationBase.cpp:
        (WebCore::AnimationBase::AnimationBase):
        (WebCore::AnimationBase::updateStateMachine):
        (WebCore::AnimationBase::fireAnimationEventsIfNeeded):
        (WebCore::AnimationBase::willNeedService):
        (WebCore::AnimationBase::goIntoEndingOrLoopingState):
        * page/animation/AnimationBase.h:
        * page/animation/AnimationController.cpp:
        (WebCore::AnimationControllerPrivate::updateAnimationTimer):
        (WebCore::AnimationControllerPrivate::updateRenderingDispatcherFired):
        (WebCore::AnimationControllerPrivate::addEventToDispatch):
        (WebCore::AnimationControllerPrivate::animationTimerFired):
        (WebCore::AnimationController::addEventToDispatch):
        * page/animation/AnimationController.h:
        * page/animation/CompositeAnimation.cpp:
        (WebCore::CompositeAnimationPrivate::updateTransitions):
        (WebCore::CompositeAnimationPrivate::willNeedService):
        (WebCore::CompositeAnimationPrivate::getAnimationForProperty):
        (WebCore::CompositeAnimation::willNeedService):
        (WebCore::CompositeAnimation::getAnimationForProperty):
        * page/animation/CompositeAnimation.h:
        * page/animation/ImplicitAnimation.cpp:
        (WebCore::ImplicitAnimation::animate):
        (WebCore::ImplicitAnimation::onAnimationEnd):
        (WebCore::ImplicitAnimation::sendTransitionEvent):
        * page/animation/ImplicitAnimation.h:
        * page/animation/KeyframeAnimation.cpp:
        (WebCore::KeyframeAnimation::animate):
        (WebCore::KeyframeAnimation::sendAnimationEvent):
        * page/animation/KeyframeAnimation.h:
        (WebCore::KeyframeAnimation::setUnanimatedStyle):

2008-12-11  Simon Hausmann  <simon.hausmann@nokia.com>

        Fix the Qt build with an empty filenameExtension() implementation.

        * platform/graphics/qt/ImageSourceQt.cpp:
        (WebCore::ImageSource::filenameExtension):

2008-12-11  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Simon Hausmann.

        Fix crash in the cairo implementation of the SVGPaintServer

        For SVGFonts the RenderObject can be zero. The existing SVGFont
        test cases is exposing this bug. Qt and other ports have fixed
        this issue by adding null checks as well.

        * svg/graphics/cairo/SVGPaintServerCairo.cpp:
        (WebCore::SVGPaintServer::renderPath):

2008-12-11  Holger Freyther  <zecke@selfish.org>

        Reviewed by Simon Hausmann.

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

        Make the Qt port follow the Win, Mac, Gtk+ port in regard to Font
        handling. FontQt.cpp from now on is only implementing the complex path. Create
        FontFallbackListQt.cpp and FontPlatformDataQt.cpp to work within
        the framework set by the Font code.

        Sharing the Font.cpp implementation allows the Qt port to support
        the CSS font faces and SVG fonts.

        Split out the Qt4.3 Font handling into FonQt43.cpp to allow to more
        easily deprecate it.

        This commit is removing a lot of #ifdefs from Font.h as the Qt Font
        implementation is now in line with the rest of WebCore.

        * WebCore.pro:
        * platform/graphics/Font.h: Remove #ifdefs
        (WebCore::Font::letterSpacing):
        (WebCore::Font::setLetterSpacing):
        (WebCore::Font::isPlatformFont):
        * platform/graphics/FontFallbackList.h:
        * platform/graphics/SimpleFontData.cpp:
        (WebCore::SimpleFontData::SimpleFontData):
        (WebCore::SimpleFontData::platformGlyphInit): There is no GlyphCache
        on Qt, move the initialisation over.
        (WebCore::SimpleFontData::~SimpleFontData):
        * platform/graphics/SimpleFontData.h:
        (WebCore::SimpleFontData::getQtFont):
        * platform/graphics/qt/FontCacheQt.cpp:
        (WebCore::FontCache::getCachedFontPlatformData): Remove unused parameter
        (WebCore::FontCache::releaseFontData): Add to build
        * platform/graphics/qt/FontCustomPlatformData.cpp:
        (WebCore::FontCustomPlatformData::~FontCustomPlatformData):
        (WebCore::FontCustomPlatformData::fontPlatformData):
        (WebCore::createFontCustomPlatformData):
        * platform/graphics/qt/FontCustomPlatformData.h:
        * platform/graphics/qt/FontFallbackListQt.cpp: Added.
        (WebCore::FontFallbackList::FontFallbackList):
        (WebCore::FontFallbackList::invalidate):
        (WebCore::FontFallbackList::releaseFontData):
        (WebCore::FontFallbackList::determinePitch):
        (WebCore::FontFallbackList::fontDataAt):
        (WebCore::FontFallbackList::fontDataForCharacters):
        (WebCore::FontFallbackList::setPlatformFont):
        * platform/graphics/qt/FontPlatformData.h:
        (WebCore::FontPlatformData::font):
        (WebCore::FontPlatformData::size):
        * platform/graphics/qt/FontPlatformDataQt.cpp: Added.
        (WebCore::FontPlatformData::FontPlatformData):
        * platform/graphics/qt/FontQt.cpp:
        (WebCore::Font::drawComplexText):
        (WebCore::Font::floatWidthForComplexText):
        (WebCore::Font::offsetForPositionForComplexText):
        (WebCore::Font::selectionRectForComplexText):
        (WebCore::Font::font):
        * platform/graphics/qt/FontQt43.cpp: Added. Moved Qt4.3 code from FontQt.cpp
        (WebCore::Font::drawComplexText):
        (WebCore::Font::floatWidthForComplexText):
        (WebCore::Font::offsetForPositionForComplexText):
        (WebCore::Font::selectionRectForComplexText):
        * platform/graphics/qt/GlyphPageTreeNodeQt.cpp:
        (WebCore::GlyphPageTreeNode::pruneTreeCustomFontData):
        (WebCore::GlyphPageTreeNode::pruneTreeFontData):
        * platform/graphics/qt/SimpleFontDataQt.cpp:
        (WebCore::SimpleFontData::determinePitch):
        (WebCore::SimpleFontData::containsCharacters):
        (WebCore::SimpleFontData::platformInit):
        (WebCore::SimpleFontData::platformGlyphInit):
        (WebCore::SimpleFontData::platformDestroy):
        * platform/qt/RenderThemeQt.cpp:
        (WebCore::RenderThemeQt::adjustButtonStyle): Avoid crashes.

2008-12-11  Holger Freyther  <zecke@selfish.org>

        Reviewed by Simon Hausmann.

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

        For Qt it is not pratical to have a FontCache and GlyphPageTreeNode
        implementation. This is one of the reasons why the Qt port is currently not
        using WebCore/platform/graphics/Font.cpp. By allowing to not use
        the simple/fast-path the Qt port will be able to use it.

        Introduce USE(FONT_FAST_PATH) and define it for every port but the
        Qt one.

        * platform/graphics/Font.cpp:
        (WebCore::Font::drawText):
        (WebCore::Font::floatWidth):
        (WebCore::Font::selectionRectForText):
        (WebCore::Font::offsetForPosition):
        * platform/graphics/Font.h:

2008-12-11  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Darin Adler.

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

        Split out the font fast path from Fast.cpp into FontFastPath.cpp. This
        will allow the Qt port to share most of WebCore::Font
        implementation but the fast path. Qt does not provide the API to get
        individual Glyphs making the fast path hard to support.


        * GNUmakefile.am:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * platform/graphics/Font.cpp:
        * platform/graphics/FontFastPath.cpp: Added.
        (WebCore::Font::glyphDataForCharacter):

2008-12-11  Robert Carr  <racarr@svn.gnome.org>

        Reviewed by Holger Freyther.

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

        Code in PlatformScreenGtk for screenDepth and screenRect can not
        assume that the platformWindow for the widget has a valid "window"
        member. For example in the case of, a new browser view opening as a
        child of a GtkNotebook, but never being switched to, or manually
        realized. Solve by using the toplevel window of the widget, rather
        than the widget itself.

        * platform/gtk/PlatformScreenGtk.cpp:
        (WebCore::screenDepth):
        (WebCore::screenRect):

2008-12-08  Tor Arne Vestbø  <tavestbo@trolltech.com>

        Reviewed by Darin Adler and Holger Freyther.

        Make Widget::frameRectsChanged() and overrides non-const

        This will hopefully allow us to get rid of some of the mutables in
        the classes that react to the callback by changing their own state.

        * platform/ScrollView.cpp:
        (WebCore::ScrollView::frameRectsChanged):
        * platform/ScrollView.h:
        * platform/Widget.h:
        (WebCore::Widget::frameRectsChanged):
        * platform/gtk/ScrollbarGtk.cpp: Remove non-const version since
        this was more complex and did the same thing, changed const of
        the leftover frameRectsChanged() method.
        (ScrollbarGtk::frameRectsChanged):
        * platform/gtk/ScrollbarGtk.h:
        * plugins/PluginView.cpp:
        (WebCore::PluginView::frameRectsChanged):
        * plugins/PluginView.h:

2008-12-11  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed and implemented with Tor Arne Vestbø.

        Reimplement RenderTheme::caretBlinkInterval for Qt.

        The QApplication::cursorFlashTime is in milliseconds and describes
        the whole cycle while WebCore expects half a cycle.

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

2008-12-09  Trenton Schulz <trenton.schulz@nokia.com>

        Reviewed by Tor Arne Vestbø.

        [Qt/Mac] Don't call HIGetScaleFactor() if we're not on Tiger or better

        * plugins/mac/PluginViewMac.cpp:
        (WebCore::tigerOrBetter):
        (WebCore::PluginView::globalMousePosForPlugin):

2008-12-10  Nikolas Zimmermann  <nikolas.zimmermann@torchmobile.com>

        Reviewed by Eric Seidel and George Staikos.

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

        Add WML <template> support. The <template> element is specified at deck-level
        and declares a template for all <card> elements in the document.

        * GNUmakefile.am:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * editing/htmlediting.cpp:
        (WebCore::canHaveChildrenForEditing): Treat <do> just like a <button>.
        * wml/WMLCardElement.cpp:
        (WebCore::WMLCardElement::WMLCardElement):
        (WebCore::WMLCardElement::setTemplateElement):
        (WebCore::WMLCardElement::handleIntrinsicEventIfNeeded):
        (WebCore::WMLCardElement::handleDeckLevelTaskOverridesIfNeeded):
        * wml/WMLCardElement.h:
        (WebCore::WMLCardElement::templateElement):
        * wml/WMLDoElement.cpp:
        (WebCore::WMLDoElement::insertedIntoDocument):
        * wml/WMLDocument.cpp:
        (WebCore::WMLDocument::finishedParsing):
        * wml/WMLErrorHandling.cpp:
        (WebCore::errorMessageForErrorCode):
        * wml/WMLErrorHandling.h:
        (WebCore::):
        * wml/WMLEventHandlingElement.cpp:
        (WebCore::WMLEventHandlingElement::~WMLEventHandlingElement):
        * wml/WMLEventHandlingElement.h:
        (WebCore::WMLEventHandlingElement::doElements):
        * wml/WMLTagNames.in:
        * wml/WMLTemplateElement.cpp: Added.
        (WebCore::WMLTemplateElement::WMLTemplateElement):
        (WebCore::WMLTemplateElement::~WMLTemplateElement):
        (WebCore::WMLTemplateElement::parseMappedAttribute):
        (WebCore::WMLTemplateElement::registerTemplatesInDocument):
        * wml/WMLTemplateElement.h: Added.
        * wml/WMLTimerElement.cpp:
        (WebCore::WMLTimerElement::timerFired):

2008-12-09  Dmitry Titov  <dimich@chromium.org>

        Reviewed by Darin Adler.

        Fix memory leak - need to call stopActiveDOMObjects
        when cached pages get destroyed.
        https://bugs.webkit.org/show_bug.cgi?id=22753

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

2008-12-10  Alice Liu  <alice.liu@apple.com>

        Manual test for https://bugs.webkit.org/show_bug.cgi?id=20685

        Reviewed by Darin Adler.

        * manual-tests/drag-image-to-desktop.html: Added.

2008-12-10  Alice Liu  <alice.liu@apple.com>

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

        Reviewed by Darin Adler.

        Manual test case is manual-tests/drag-image-to-desktop.html

        Added new files to projects
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:

        * page/DragController.cpp:
        (WebCore::DragController::startDrag):
        * platform/MIMETypeRegistry.cpp:
        (WebCore::initializeSupportedImageMIMETypes):
        (WebCore::initializeSupportedImageMIMETypesForEncoding):

        These changes add a method to obtain the extension for an image
        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::filenameExtension):
        * platform/graphics/BitmapImage.h:
        * platform/graphics/Image.h:
        (WebCore::Image::filenameExtension):
        * platform/graphics/ImageSource.h:
        * platform/graphics/cairo/ImageSourceCairo.cpp:
        (WebCore::ImageSource::filenameExtension):
        * platform/graphics/cg/ImageSourceCG.cpp:
        (WebCore::ImageSource::filenameExtension):

        These changes added a utility that returns the preferred extension for a UTI
        * platform/graphics/cg/ImageSourceCG.h: Added.
        * platform/graphics/cg/ImageSourceCGMac.mm: Added.
        (WebCore::MIMETypeForImageSourceType):
        (WebCore::preferredExtensionForImageSourceType):
        * platform/graphics/cg/ImageSourceCGWin.cpp: Added.
        (WebCore::MIMETypeForImageSourceType):
        (WebCore::preferredExtensionForImageSourceType):

        * platform/mac/MIMETypeRegistryMac.mm:
        moved getMIMETypeForUTI to ImageSourceCGMac.mm

        Ask image for its file extension instead of relying on MIME type and file path
        * platform/win/ClipboardWin.cpp:
        (WebCore::createGlobalImageFileDescriptor):

        Remove extraneous code from getPreferredExtensionForMIMEType.
        Also moved getMIMETypeForUTI to ImageSourceCGWin.cpp
        * platform/win/MIMETypeRegistryWin.cpp:
        (WebCore::MIMETypeRegistry::getPreferredExtensionForMIMEType):

2008-12-10  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Antti Koivisto

        <rdar://problem/6431224>

        When updating the value of a slider, don't mark the parents
        as needing layout, because the size of the slider can never
        change. This fixes full-page repaints in some cases.

        * rendering/RenderSlider.cpp:
        (WebCore::RenderSlider::updateFromElement):

2008-12-10  Simon Fraser  <simon.fraser@apple.com>

        Potential build fix. The forward declaration of FloatPoint should
        be inside the WebCore namespace.

        * platform/graphics/FloatPoint3D.h:

2008-12-10  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Sam Weinig.

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

        Cleanup FloatPoint3D: inline the getters and setters,
        fix a potential divide-by-zero in normalize(), and add
        a FloatPoint constructor.

        * platform/graphics/FloatPoint3D.cpp:
        (WebCore::FloatPoint3D::FloatPoint3D):
        (WebCore::FloatPoint3D::normalize):
        * platform/graphics/FloatPoint3D.h:
        (WebCore::FloatPoint3D::x):
        (WebCore::FloatPoint3D::setX):
        (WebCore::FloatPoint3D::y):
        (WebCore::FloatPoint3D::setY):
        (WebCore::FloatPoint3D::z):
        (WebCore::FloatPoint3D::setZ):

2008-12-09  Julien Chaffraix  <jchaffraix@webkit.org>

        Reviewed by Eric Seidel.

        Bug 22665: Remove setCreatedByParser(bool) from the few elements that use it
        https://bugs.webkit.org/show_bug.cgi?id=22665

        - Removed setCreatedByParser from style and link elements.

        - Removed XMLTokenizer::eventuallyMarkAsCreatedByParser.

        * dom/XMLTokenizer.cpp:
        * dom/XMLTokenizer.h:
        * dom/XMLTokenizerLibxml2.cpp:
        (WebCore::XMLTokenizer::startElementNs):
        * dom/XMLTokenizerQt.cpp:
        (WebCore::XMLTokenizer::parseStartElement):
        * html/HTMLElementFactory.cpp:
        (WebCore::linkConstructor):
        (WebCore::styleConstructor):
        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::HTMLLinkElement):
        * html/HTMLLinkElement.h:
        * html/HTMLStyleElement.cpp:
        (WebCore::HTMLStyleElement::HTMLStyleElement):
        * html/HTMLStyleElement.h:
        * html/HTMLTagNames.in:
        * svg/SVGStyleElement.cpp:
        (WebCore::SVGStyleElement::SVGStyleElement):
        * svg/SVGStyleElement.h:
        * svg/svgtags.in:

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

        Reviewed by Darin

        https://bugs.webkit.org/show_bug.cgi?id=22194 and <rdar://problem/6388378> -
        Dialog when going back to a page from whence you submitted a form

        http://trac.webkit.org/changeset/37317 changed the manner in which headers are added to
        http requests, which caused the networking layer to have an incomplete set of headers
        just before consulting the Policy Delegate.  This caused a cache miss and incorrectly made
        us believe we'd be resubmitting the form.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadItem):  Being careful to maintain the new behavior required by
          the Origin header mechanism as discussed in bug 22194, restore the previous behavior of
          setting all the headers before the networking layer is asked about the cache lookup.

2008-12-10  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Timothy Hatcher.

        Add back ability to end all profiling via console by invoking profileEnd
        with no arguments.

        * page/Console.cpp:
        (WebCore::Console::profileEnd): Removed title null-checking and
            subsequent early exit.

2008-12-10  Pierre-Olivier Latour  <pol@apple.com>

        Reviewed by Darin Adler.

        KeyframeAnimation::animate() needs to compute the elapsed animation time
        properly taking into account its paused state.

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

        Test: animations/animation-drt-api-multiple-keyframes.html

        * page/animation/KeyframeAnimation.cpp:
        (WebCore::KeyframeAnimation::animate):

2008-12-10  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein

        Part of
        https://bugs.webkit.org/show_bug.cgi?id=22570

        Rename methods on RenderLayer for clarity:
            clearClipRects -> clearClipRectsIncludingDescendants
            clearClipRect  -> clearClipRects

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::destroy):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateLayerPosition):
        (WebCore::RenderLayer::removeOnlyThisLayer):
        (WebCore::RenderLayer::insertOnlyThisLayer):
        (WebCore::RenderLayer::clearClipRectsIncludingDescendants):
        (WebCore::RenderLayer::clearClipRects):
        * rendering/RenderLayer.h:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::styleWillChange):
        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::destroy):

2008-12-10  Kevin Ollivier  <kevino@theolliviers.com>

        wx build fix after the script call stack/frame additions.

        * WebCoreSources.bkl:

2008-12-10   Srinivasa Rao M. Hamse  <msrinirao@gmail.com>

        Reviewed by Holger Freyther.

        F1-F12 key mappings for WebKit Gtk Port

        * platform/gtk/KeyEventGtk.cpp:
        (WebCore::windowsKeyCodeForKeyEvent):

2008-12-10  Enrico Ros  <enrico.ros@m31.com>

        Reviewed by Simon Hausmann.

        Fix the Qt build when SVG is disabled. A broken dependancy caused
        unnecessary rebuilds even with no changes.

        * WebCore.pro: fix a broken build dependancy

2008-12-10  Hironori Bono  <hbono@chromium.org>

        Reviewed by Alexey Proskuryakov.

        Bug 21820: Unable to enter the Tamil UNICODE Characters via Thamizha Phonetic IME
        https://bugs.webkit.org/show_bug.cgi?id=21820

        <rdar://problem/5683248> Typing backspace to delete a diacritical mark also deletes the character before (Arabic)
        <rdar://problem/5702038> Backspace removes Thai Character in wrong sequence

        Tests: editing/deleting/delete-ligature-001.html
               editing/deleting/delete-ligature-002.html
               editing/deleting/delete-ligature-003.html

        * editing/TypingCommand.cpp:
        (WebCore::TypingCommand::deleteKeyPressed): Delete only the last character
        of a ligature which consists of multiple Unicode characters when deleting it with
        a backspace key.

2008-12-10  David Levin  <levin@chromium.org>

        Reviewed by Alexey Proskuryakov.

        https://bugs.webkit.org/show_bug.cgi?id=22177
        Fix the windows build by removing calls to notifyFormStateChanged
        where they didn't appear in the original reviewed patch.

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::type):
        (WebCore::HTMLInputElement::attach):

2008-12-09  Adam Barth  <abarth@webkit.org>

        Reviewed by Sam Weinig.

        Add ScriptController::updateSecurityOrigin to notify the bindings
        that a document's securityOrigin has been updated.  This is used by
        V8 to update its security context.

        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::updateSecurityOrigin):
        * bindings/js/ScriptController.h:
        * dom/Document.cpp:
        (WebCore::Document::setDomain):

2008-12-09  Eric Seidel  <eric@webkit.org>

        No review, build fix only.

        Fix a few config issues to let the Chromium Windows WebCore build get further.

        * WebCore.scons:

2008-12-09  Brett Wilson  <brettw@chromium.org>

        Reviewed by Dave Hyatt.

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

        Add a callback on ChromeClient that the state of form elements on
        the page has changed. This is to allow clients implementing session
        saving to know when the current state is dirty.

        * html/HTMLInputElement.cpp:
        (WebCore::notifyFormStateChanged):
        (WebCore::HTMLInputElement::setInputType):
        (WebCore::HTMLInputElement::type):
        (WebCore::HTMLInputElement::attach):
        (WebCore::HTMLInputElement::setValue):
        (WebCore::HTMLInputElement::setValueFromRenderer):
        (WebCore::HTMLInputElement::setFileListFromRenderer):
        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::setSelectedIndex):
        * html/HTMLTextAreaElement.cpp:
        (WebCore::notifyFormStateChanged):
        (WebCore::HTMLTextAreaElement::HTMLTextAreaElement):
        (WebCore::HTMLTextAreaElement::updateValue):
        (WebCore::HTMLTextAreaElement::setValue):
        * loader/EmptyClients.h:
        (WebCore::EmptyChromeClient::formStateDidChange):
        * page/ChromeClient.h:

2008-12-09  Sam Weinig  <sam@webkit.org>

        Reviewed by Darin Adler.

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

        Fix intermittent crash in buildbot. The CSSCursorImageValues and
        SVGCursorElements held onto raw SVGElement pointers without any
        guarantee that the element is still around.

        We did not fix the design that resulted in this issue, we just fixed
        the pointer lifetimes.

        * css/CSSCursorImageValue.cpp:
        (WebCore::CSSCursorImageValue::~CSSCursorImageValue): Zero out the back pointers.
        (WebCore::CSSCursorImageValue::updateIfSVGCursorIsUsed): Set up a back pointer.
        (WebCore::CSSCursorImageValue::removeReferencedElement): Added. Used when the element
        is destroyed.
        * css/CSSCursorImageValue.h: Added removeReferencedElement.

        * svg/SVGCursorElement.cpp:
        (WebCore::SVGCursorElement::~SVGCursorElement): Zero out the back pointers.
        (WebCore::SVGCursorElement::addClient): Set up a back pointer.
        (WebCore::SVGCursorElement::removeClient): Zero out the back pointer.

        * svg/SVGElement.cpp:
        (WebCore::SVGElement::SVGElement): Initialize back pointers to zero.
        (WebCore::SVGElement::~SVGElement): Call both the element and cursor image value
        to remove the element from their sets.
        * svg/SVGElement.h:
        (WebCore::SVGElement::setCursorElement): Added.
        (WebCore::SVGElement::setCursorImageValue): Added.

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

        Add code that will create custom CSS scrollbars from the <body>, the document element (<html>) and the owning
        frame/iframe.  If any of them set a custom style, it will be used.  The scrollbars do not update dynamically
        yet as you switch from page to page (until they are destroyed and recreated).

        Reviewed by Adele

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

2008-12-09  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Dave Hyatt.

        https://bugs.webkit.org/show_bug.cgi?id=22689
        Match Firefox button metrics on Windows.

        * rendering/RenderButton.cpp:
        (WebCore::RenderButton::addChild):
        (WebCore::RenderButton::styleDidChange):
        (WebCore::RenderButton::setupInnerStyle):
        * rendering/RenderButton.h:
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::adjustButtonInnerStyle):
        * rendering/RenderTheme.h:
        * rendering/RenderThemeWin.cpp:
        (WebCore::RenderThemeWin::adjustSliderThumbSize):
        (WebCore::RenderThemeWin::adjustButtonInnerStyle):
        * rendering/RenderThemeWin.h:

2008-12-09  Darin Fisher  <darin@chromium.org>

        Fixes bustages.

        https://bugs.webkit.org/show_bug.cgi?id=22631
        Adding missing files from previous commit.

        * bindings/js/ScriptCallFrame.cpp: Added.
        (WebCore::ScriptCallFrame::ScriptCallFrame):
        (WebCore::ScriptCallFrame::~ScriptCallFrame):
        (WebCore::ScriptCallFrame::argumentAt):
        * bindings/js/ScriptCallFrame.h: Added.
        (WebCore::ScriptCallFrame::functionName):
        (WebCore::ScriptCallFrame::sourceURL):
        (WebCore::ScriptCallFrame::lineNumber):
        (WebCore::ScriptCallFrame::argumentCount):
        * bindings/js/ScriptCallStack.cpp: Added.
        (WebCore::ScriptCallStack::ScriptCallStack):
        (WebCore::ScriptCallStack::~ScriptCallStack):
        (WebCore::ScriptCallStack::at):
        (WebCore::ScriptCallStack::size):
        (WebCore::ScriptCallStack::initialize):
        * bindings/js/ScriptCallStack.h: Added.
        (WebCore::ScriptCallStack::state):

2008-12-09  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Timothy Hatcher.

        https://bugs.webkit.org/show_bug.cgi?id=22631
        Streamline Console.cpp, abstract out the use of JSC::ExecState and
        JSC::ArgList by introducing ScriptCallFrame and ScriptCallStack
        abstractions.

        * GNUmakefile.am: Added ScriptCallFrame and ScriptCallStack to build
        * WebCore.pro:  Added ScriptCallFrame and ScriptCallStack to build
        * WebCore.vcproj/WebCore.vcproj: Added ScriptCallFrame and
        ScriptCallStack to project
        * WebCore.xcodeproj/project.pbxproj: Added ScriptCallFrame and
        ScriptCallStack to project
        * bindings/js/JSConsoleCustom.cpp: Remove custom bindings.
        * bindings/js/ScriptCallFrame.cpp: Added.
        (WebCore::ScriptCallFrame::ScriptCallFrame):
        (WebCore::ScriptCallFrame::~ScriptCallFrame):
        (WebCore::ScriptCallFrame::argumentAt):
        * bindings/js/ScriptCallFrame.h: Added.
        (WebCore::ScriptCallFrame::functionName):
        (WebCore::ScriptCallFrame::sourceURL):
        (WebCore::ScriptCallFrame::lineNumber):
        (WebCore::ScriptCallFrame::argumentCount):
        * bindings/js/ScriptCallStack.cpp: Added.
        (WebCore::ScriptCallStack::ScriptCallStack):
        (WebCore::ScriptCallStack::~ScriptCallStack):
        (WebCore::ScriptCallStack::at):
        (WebCore::ScriptCallStack::size):
        (WebCore::ScriptCallStack::initialize):
        * bindings/js/ScriptCallStack.h: Added.
        (WebCore::ScriptCallStack::ScriptCallStack):
        (WebCore::ScriptCallStack::~ScriptCallStack):
        (WebCore::ScriptCallStack::state):
        (WebCore::ScriptCallStack::at):
        (WebCore::ScriptCallStack::size):
        (WebCore::ScriptCallStack::initialize):
        * bindings/js/ScriptString.h: Added missing PlatformString include.
        (WebCore::ScriptString::ScriptString): Added default constructor.
        (WebCore::ScriptString::operator==): Added equality operator.
        (WebCore::ScriptString::operator!=):
        * bindings/js/ScriptValue.cpp: Added isNull and isUndefined.
        (WebCore::ScriptValue::isNull):
        (WebCore::ScriptValue::isUndefined):
        * bindings/js/ScriptValue.h: Added isNull and isUndefined
        * bindings/scripts/CodeGeneratorJS.pm: Add handling for
        CustomArgumentHandling attribute.
        * inspector/InspectorController.cpp: Refactored to use
        ScriptCallFrame and ScriptCallStack.
        (WebCore::ConsoleMessage::ConsoleMessage):
        (WebCore::InspectorController::addMessageToConsole):
        (WebCore::InspectorController::startGroup):
        (WebCore::InspectorController::addScriptConsoleMessage):
        (WebCore::InspectorController::count):
        (WebCore::InspectorController::startTiming):
        (WebCore::InspectorController::stopTiming):
        * inspector/InspectorController.h: Refactored to use ScriptCallFrame and
        ScriptCallStack.
        * inspector/front-end/Console.js: Modified to use argument value itself
        rather than f.name for stack trace.
        * page/Console.cpp: Refactored to use ScriptCallFrame and
        ScriptCallStack.
        (WebCore::getFirstArgumentAsString):
        (WebCore::Console::addMessage):
        (WebCore::Console::debug):
        (WebCore::Console::error):
        (WebCore::Console::info):
        (WebCore::Console::log):
        (WebCore::Console::dir):
        (WebCore::Console::dirxml):
        (WebCore::Console::trace):
        (WebCore::Console::assertCondition):
        (WebCore::Console::count):
        (WebCore::Console::profile):
        (WebCore::Console::profileEnd):
        (WebCore::Console::time):
        (WebCore::Console::timeEnd):
        (WebCore::Console::group):
        (WebCore::Console::warn):
        * page/Console.h:
        * page/Console.idl: Removed Custom attributes, added
        CustomArgumentHandling attributes, and tweaked argument defs.

2008-12-09  Darin Adler  <darin@apple.com>

        Try to fix non-Mac builds.

        * GNUmakefile.am: Added NavigatorBase.
        * WebCore.pro: Ditto.
        * WebCore.scons: Ditto.
        * WebCore.vcproj/WebCore.vcproj: Ditto.
        * WebCoreSources.bkl: Ditto.

        Unrelated tweak sitting in my tree.

        * bindings/objc/DOMAbstractView.mm: Remove pointless override of finalize method.

2008-12-09  Darin Adler  <darin@apple.com>

        Try to fix Tiger build.

        * platform/network/mac/NetworkStateNotifierMac.cpp: Declare CFRunLoopGetMain.

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

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=22719
        Implement Navigator object in Workers

        Test: fast/workers/worker-navigator.html

        * DerivedSources.make:
        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        Added WorkerNavigator sources.

        * bindings/js/JSWorkerContext.cpp: (WebCore::jsWorkerContextNavigator):
        Worker.navigator returns a WoerkerNavigator object (it is named just Navigator in the spec,
        but it is not the same interface that is available on Windows).

        * dom/Worker.cpp:
        (WebCore::Worker::notifyFinished):
        * dom/WorkerContext.cpp:
        (WebCore::WorkerContext::WorkerContext):
        (WebCore::WorkerContext::navigator):
        * dom/WorkerContext.h:
        (WebCore::WorkerContext::create):
        * dom/WorkerThread.cpp:
        (WebCore::WorkerThread::create):
        (WebCore::WorkerThread::WorkerThread):
        (WebCore::WorkerThread::workerThread):
        * dom/WorkerThread.h:
        Pass a pre-computed user agent string into worker, because it cannot call a client method
        directly, and pre-computing is easier than sending a synchronous message to the main thread.

        * page/Navigator.cpp:
        * page/Navigator.h:
        * page/NavigatorBase.cpp: Added.
        * page/NavigatorBase.h: Added.
        Factor out common (and uncommon, but very similar) functionality into a base class.

        * page/WorkerNavigator.cpp: Added.
        * page/WorkerNavigator.h: Added.
        * page/WorkerNavigator.idl: Added.
        Per Web Workers and HTML5, implement a small subset of what we currently have in Window.Navigator.

        * platform/network/NetworkStateNotifier.cpp: (WebCore::networkStateNotifier):
        Make networkStateNotifier() static constructor thread safe. The object is created on the
        thread it is first called from, while callbacks are registered on the main thread. Calls to
        onLine() from other threads are safe, because it is just loading a boolean.

        * platform/network/mac/NetworkStateNotifierMac.cpp: (WebCore::NetworkStateNotifier::NetworkStateNotifier):
        Schedule notifications on main event loop, not the current one.

2008-12-09  Nikolas Zimmermann  <nikolas.zimmermann@torchmobile.com>

        Rubber-stamped by Alexey Proskuryakov.

        Forgot to update Qt/WML build - add some new files to the build.

        * WebCore.pro:

2008-12-09  Nikolas Zimmermann  <nikolas.zimmermann@torchmobile.com>

        Reviewed by Alexey Proskuryakov.

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

        Implement the GET method for WMLGoElement, and some test covering it's behaviour.
        Update all build systems supporting WML that haven't been updated since a while.

        Add WMLPostField stub implementation, needed for implementing POST method.

        Tests: wml/go-task-get-method-external-deck-with-href.html
               wml/go-task-get-method-external-deck.html
               wml/go-task-get-method-same-deck.html

        * GNUmakefile.am:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/Document.cpp:
        (WebCore::Document::resetWMLPageState):
        * wml/WMLCardElement.cpp:
        * wml/WMLCardElement.h:
        * wml/WMLEventHandlingElement.cpp:
        (WebCore::WMLCardElement::registerDoElement):
        * wml/WMLEventHandlingElement.h:
        * wml/WMLGoElement.cpp:
        (WebCore::WMLGoElement::WMLGoElement):
        (WebCore::WMLGoElement::registerPostfieldElement):
        (WebCore::WMLGoElement::parseMappedAttribute):
        (WebCore::WMLGoElement::executeTask):
        (WebCore::WMLGoElement::parseContentType):
        (WebCore::WMLGoElement::preparePOSTRequest):
        (WebCore::WMLGoElement::prepareGETRequest):
        * wml/WMLGoElement.h:
        * wml/WMLPostfieldElement.cpp: Added.
        (WebCore::WMLPostfieldElement::WMLPostfieldElement):
        (WebCore::WMLPostfieldElement::parseMappedAttribute):
        (WebCore::WMLPostfieldElement::insertedIntoDocument):
        * wml/WMLPostfieldElement.h: Added.
        (WebCore::WMLPostfieldElement::name):
        (WebCore::WMLPostfieldElement::value):
        * wml/WMLTagNames.in:

2008-12-08  Peter Kasting  <pkasting@google.com>

        Reviewed by Anders Carlsson.

        https://bugs.webkit.org/show_bug.cgi?id=16814
        Allow ports to disable ActiveX->NPAPI conversion for Media Player.
        Improve handling of miscellaneous ActiveX objects.

        * rendering/RenderPartObject.cpp:
        (WebCore::mapClassIdToServiceType):
        (WebCore::shouldUseChildEmbedOfObject):
        (WebCore::RenderPartObject::updateWidget):

2008-12-08  Darin Adler  <darin@apple.com>

        Reviewed by John Sullivan.

        - fix https://bugs.webkit.org/show_bug.cgi?id=22409
          REGRESSION: cmd-shift-left/right don't switch tabs, instead select text

        Tests: editing/execCommand/enabling-and-selection-2.html
               editing/execCommand/enabling-and-selection.html

        * editing/EditorCommand.cpp: Updated table to use these functions by their new names.
        (WebCore::enabledVisibleSelection): Renamed this to reflect its new algorithm.
        An invisible selection with a position that selects no characters doesn't count
        as a visible selection.
        (WebCore::enabledVisibleSelectionAndMark): Ditto.

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

        Remove duplicate entries from WebCore project.

        Reviewed by Eric Seidel.

        Bug 22555: Sort "children" sections in Xcode project files.
        <https://bugs.webkit.org/show_bug.cgi?id=22555>

        Recipe for removing duplicates:
        $ ./WebKitTools/Scripts/sort-Xcode-project-file project.pbxproj
        $ uniq < project.pbxproj | diff -u project.pbxproj - | patch -p0 project.pbxproj

        * WebCore.xcodeproj/project.pbxproj: Removed duplicates.

2008-12-08  Julien Chaffraix  <jchaffraix@webkit.org>

        Reviewed by Darin Adler.

        Bug 22665: Remove setCreatedByParser(bool) from the few elements that use it
        https://bugs.webkit.org/show_bug.cgi?id=22665

        Remove setCreatedByParser from the script elements (HTML and SVG).

        * dom/XMLTokenizer.cpp:
        (WebCore::XMLTokenizer::eventuallyMarkAsParserCreated): Removed
        call to setCreatedByParser for the 2 elements.

        * dom/make_names.pl: Modified to call the constructor with
        the createByParser parameter if 'constructorNeedsCreatedByParser'
        is set.

        * html/HTMLElementFactory.cpp:
        (WebCore::scriptConstructor):
        * html/HTMLScriptElement.cpp:
        (WebCore::HTMLScriptElement::HTMLScriptElement):
        * html/HTMLScriptElement.h:
        * html/HTMLTagNames.in: Added constructorNeedsCreatedByParser
        to script.
        * svg/SVGScriptElement.cpp:
        (WebCore::SVGScriptElement::SVGScriptElement):
        * svg/SVGScriptElement.h:
        * svg/svgtags.in: Added constructorNeedsCreatedByParser
        to script.

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

        Bug 22555: Sort "children" sections in Xcode project files

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

        Reviewed by Eric Seidel.

        * WebCore.xcodeproj/project.pbxproj: Sorted.
        * manual-tests/NPN_Invoke/NPN_Invoke.xcodeproj/project.pbxproj: Sorted.

2008-12-08  Tony Chang  <tony@chromium.org>

        Reviewed by Eric Seidel.

        Add a bool to GraphicsContext so that shadows can ignore
        transformations.  This is needed by HTML canvas element
        where the spec says shadows are applied w/o transformations.
        https://bugs.webkit.org/show_bug.cgi?id=22580

        No functional changes, thus no tests.

        * html/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::setShadow):
        (WebCore::CanvasRenderingContext2D::applyShadow):
        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::createImageBuffer):
        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::setShadowsIgnoreTransforms):
        * platform/graphics/GraphicsContext.h:
        * platform/graphics/GraphicsContextPrivate.h:
        (WebCore::GraphicsContextState::GraphicsContextState):
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::setPlatformShadow):

2008-12-08  Julien Chaffraix  <jchaffraix@webkit.org>

        Reviewed by Darin Adler.

        Bug 17897: Not Rendering Images Imported from XHTML Document
        <rdar://problem/5827614>

        When we were loading document with XMLHttpRequest that contained images, the images
        would not be fetched as they would not be displayed. However if we inserted such
        an image element into a rendered document, we would not fetch the image and thus never
        display it.

        Now we check if the image has been loaded when we insert an HTMLImageElement into a
        document.
        To enable this, the image loader has an error flag. To avoid doing several attempts
        when we know that the image is in error, we store the failed URL.
        However Firefox and Opera ignore errors when the 'src' attribute changes and thus
        we also have an updateFromElementIgnoringPreviousError to match the other browser.

        Tests: http/tests/misc/image-blocked-src-change.html
               http/tests/misc/image-blocked-src-no-change.html
               http/tests/xmlhttprequest/xmlhttprequest-image-not-loaded-svg.svg
               http/tests/xmlhttprequest/xmlhttprequest-image-not-loaded.html

        * html/HTMLEmbedElement.cpp:
        (WebCore::HTMLEmbedElement::parseMappedAttribute): Changed to call updateFromElementIgnoringPreviousError.
        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::parseMappedAttribute): Ditto.
        (WebCore::HTMLImageElement::insertedIntoDocument): Call updateFromElement if we do not have
        an image.

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::parseMappedAttribute): Changed to call updateFromElementIgnoringPreviousError.
        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::parseMappedAttribute): Ditto.
        * html/HTMLVideoElement.cpp:
        (WebCore::HTMLVideoElement::parseMappedAttribute): Ditto.
        * loader/ImageLoader.cpp:
        (WebCore::ImageLoader::setImage): Added an assertion.
        (WebCore::ImageLoader::updateFromElement): Added a check for load error (to avoid displaying
        multiple errors in the console for a single image load).

        (WebCore::ImageLoader::updateFromElementIgnoringPreviousError): This method clears previous error
        before calling updateFromElement.

        (WebCore::ImageLoader::notifyFinished): Added an assertion.
        * loader/ImageLoader.h:
        * svg/SVGImageElement.cpp:
        (WebCore::SVGImageElement::svgAttributeChanged): Changed to call updateFromElementIgnoringPreviousError.

2008-12-08  David Hyatt  <hyatt@apple.com>

        Make scrollbar creation virtual on ScrollView so that FrameView can have the capability to create
        custom CSS scrollbars.

        Reviewed by Eric Seidel

        * page/FrameView.cpp:
        (WebCore::FrameView::createScrollbar):
        * page/FrameView.h:
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::setHasHorizontalScrollbar):
        (WebCore::ScrollView::setHasVerticalScrollbar):
        (WebCore::ScrollView::createScrollbar):
        * platform/ScrollView.h:

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

        Reviewed by John Sullivan.

        - WebCore part of tracking the global history item for a WebView

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::checkLoadCompleteForThisFrame): Set the page's
        global history item to the current back/forward list item, respecting
        private browsing mode.
        (WebCore::FrameLoader::continueLoadAfterNavigationPolicy): Ditto in this
        case.
        (WebCore::FrameLoader::goToItem): Ditto in this case.
        (WebCore::FrameLoader::updateHistoryForStandardLoad): If this load
        creates a new global history item, set the page's global history item
        to it.
        (WebCore::FrameLoader::updateHistoryForRedirectWithLockedHistory):
        Ditto.
        * page/Page.cpp:
        (WebCore::Page::setGlobalHistoryItem): Added this setter.
        * page/Page.h: Added a m_globalHistoryItem data member.
        (WebCore::Page::globalHistoryItem): Added this getter.

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

        Reviewed by Dave Kilzer.

        A few stylistic fixes suggested by Dave Kilzer.

        * css/CSSPrimitiveValue.cpp:
        (WebCore::CSSPrimitiveValue::createIdentifier):
        (WebCore::CSSPrimitiveValue::create):

2008-12-08  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=22737
        Try debug version when locating CFNetwork

        * platform/network/cf/ResourceRequestCFNet.cpp:
        (WebCore::findCFNetworkModule):
        (WebCore::findCFURLRequestSetContentDispositionEncodingFallbackArrayFunction):
        (WebCore::findCFURLRequestCopyContentDispositionEncodingFallbackArrayFunction):
        * platform/network/win/CookieJarCFNetWin.cpp:
        (WebCore::findCFNetworkModule):
        (WebCore::findIsHTTPOnlyFunction):

2008-12-08  Aaron Boodman  <aa@chromium.org>

        Reviewed by Stephanie Lewis.

        https://bugs.webkit.org/show_bug.cgi?id=22301
        Make dispatchDidFinishLoading() always fire before didFinishLoadForFrame().

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

2008-12-08  Trenton Schulz <trenton.schulz@nokia.com>

        Rubber-stamped by Tor Arne Vestbø.

        Fix build warning on Mac

        * platform/text/mac/StringImplMac.mm:

2008-12-08  Simon Hausmann  <simon.hausmann@nokia.com>

        Fix the Qt build.

        * bridge/qt/qt_runtime.cpp:
        (JSC::Bindings::convertQVariantToValue): Pass JSGlobalData to RegExp
          constructor.

2008-12-08  Oliver Hunt  <oliver@apple.com>

        Reviewed by Alexey Proskuryakov.

        Bug 22398: r39059: Crash when clearing webkitTransitionDuration in webkitTransitionEnd event handler
        <rdar://problem/6426245> REGRESSION(r39059): Reproducible crash when clearing webkitTransitionDuration in webkitTransitionEnd event handler (22398)

        This regression was caused by r39059 replacing the protector on the active
        animation with a protector on just the composition.  It turns out that both
        protectors are necessary.

        Test: transitions/transition-duration-cleared-in-transitionend-crash.html

        * page/animation/AnimationBase.cpp:
        (WebCore::AnimationBase::animationTimerCallbackFired):

2008-12-08  Dmitry Titov  <dimich@chromium.org>

        Reviewed by Alexey Proskuryakov.

        https://bugs.webkit.org/show_bug.cgi?id=22732
        Remove unused files PausedTimeouts.h,.cpp
        The change that deprecated this code was https://bugs.webkit.org/show_bug.cgi?id=22620

        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.scons:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
          These are build files which had PausedTimeouts referenced.

        * bindings/js/PausedTimeouts.cpp: Removed.
        * bindings/js/PausedTimeouts.h: Removed.
        * bindings/js/ScriptController.cpp: Removed '#include'
        * page/Chrome.cpp: Removed '#include' and unused variable.

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

        Reviewed by Dan Bernstein

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

        Fix issues which break reading inline style for -webkit-transition
        and -webkit-transform-origin.

        Test: fast/css/transform-inline-style.html

        * css/CSSMutableStyleDeclaration.cpp:
        (WebCore::CSSMutableStyleDeclaration::getPropertyValue): Add cases
        for CSSPropertyWebkitTransformOrigin and CSSPropertyWebkitTransition
        so that these shorthand properties are returned correctly.
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseAnimationProperty): Create CSSPrimitiveValues
        with the correct CSSValueAll and CSSValueNone identifiers, not the
        RenderStyle-level cAnimateAll, cAnimateNone.
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::mapAnimationProperty): Special-case CSSValueAll
        and CSSValueNone values to set cAnimateAll and cAnimateNone transition properties.

2008-12-07  Antti Koivisto  <antti@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=22717
        Make CSS values use less memory

        Share CSSPrimitiveValue objects for commonly used values including
        - idents
        - colors
        - small integers

        This reduces the amount CSSPrimitiveValue instances by > 80%.

        * css/CSSPrimitiveValue.cpp:
        (WebCore::CSSPrimitiveValue::createIdentifier):
        (WebCore::CSSPrimitiveValue::createColor):
        (WebCore::CSSPrimitiveValue::create):
        * css/CSSPrimitiveValue.h:
        (WebCore::CSSPrimitiveValue::create):

2008-12-07  Antti Koivisto  <antti@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=22717
        Make CSS values use less memory

        Get CSSValues off from the common StyleBase base class. They don't
        need a parent pointer or anything else there and there is no real
        reason to have them in same data structures with other CSSOM objects.

        Disabled (instead of refactoring around the lack of common base) the ability
        to have style declaration blocks as CSS variable values. They don't exist in
        the spec so I wasn't sure if they have future or not. It would not be hard to
        get them back. CSS variables are in any case an experimental feature and
        not enabled by default.

        * css/CSSInitialValue.h:
        (WebCore::CSSInitialValue::createExplicit):
        (WebCore::CSSInitialValue::createImplicit):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::addVariableDeclarationBlock):
        * css/CSSParser.h:
        * css/CSSValue.h:
        (WebCore::CSSValue::~CSSValue):
        (WebCore::CSSValue::parserValue):
        * css/CSSVariablesDeclaration.cpp:
        (WebCore::CSSVariablesDeclaration::CSSVariablesDeclaration):
        (WebCore::CSSVariablesDeclaration::getVariableValue):
        (WebCore::CSSVariablesDeclaration::removeVariable):
        (WebCore::CSSVariablesDeclaration::addParsedVariable):
        (WebCore::CSSVariablesDeclaration::getParsedVariable):
        (WebCore::CSSVariablesDeclaration::getParsedVariableDeclarationBlock):
        * css/CSSVariablesDeclaration.h:
        (WebCore::CSSVariablesDeclaration::create):
        * css/StyleBase.h:

2008-12-07  Dirk Schulze  <krit@webkit.org>

        Reviewed by Oliver Hunt.

        Add gradient and pattern support for strokeRect on canvas/Cg.

        Canvas strokeRect() doesn't support gradients
        https://bugs.webkit.org/show_bug.cgi?id=19790

        Test: fast/canvas/canvas-strokeRect.html

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

2008-12-06  Dirk Schulze  <krit@webkit.org>

        Reviewed by Oliver Hunt.

        Add support for setTransform() in canvas.

        <canvas> lacks transform() and setTransform()
        https://bugs.webkit.org/show_bug.cgi?id=16604

        Test: fast/canvas/canvas-setTransform.html

        * html/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::State::State):
        (WebCore::CanvasRenderingContext2D::setStrokeStyle):
        (WebCore::CanvasRenderingContext2D::setFillStyle):
        (WebCore::CanvasRenderingContext2D::scale):
        (WebCore::CanvasRenderingContext2D::rotate):
        (WebCore::CanvasRenderingContext2D::translate):
        (WebCore::CanvasRenderingContext2D::transform):
        (WebCore::CanvasRenderingContext2D::setTransform):
        (WebCore::CanvasRenderingContext2D::beginPath):
        (WebCore::CanvasRenderingContext2D::closePath):
        (WebCore::CanvasRenderingContext2D::moveTo):
        (WebCore::CanvasRenderingContext2D::lineTo):
        (WebCore::CanvasRenderingContext2D::quadraticCurveTo):
        (WebCore::CanvasRenderingContext2D::bezierCurveTo):
        (WebCore::CanvasRenderingContext2D::arcTo):
        (WebCore::CanvasRenderingContext2D::arc):
        (WebCore::CanvasRenderingContext2D::rect):
        (WebCore::CanvasRenderingContext2D::fill):
        (WebCore::CanvasRenderingContext2D::stroke):
        (WebCore::CanvasRenderingContext2D::clip):
        (WebCore::CanvasRenderingContext2D::isPointInPath):
        (WebCore::CanvasRenderingContext2D::clearRect):
        (WebCore::CanvasRenderingContext2D::fillRect):
        (WebCore::CanvasRenderingContext2D::strokeRect):
        (WebCore::CanvasRenderingContext2D::drawImage):
        (WebCore::CanvasRenderingContext2D::drawImageFromRect):
        (WebCore::CanvasRenderingContext2D::willDraw):
        (WebCore::CanvasRenderingContext2D::drawTextInternal):
        * html/CanvasRenderingContext2D.h:
        * html/CanvasRenderingContext2D.idl:
        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::baseTransform):
        * html/HTMLCanvasElement.h:
        * platform/graphics/ImageBuffer.h:
        (WebCore::ImageBuffer::baseTransform):

2008-12-06  Antti Koivisto  <antti@apple.com>

        Reviewed by Darin Adler.

        Also copy m_implicit field. Darin wanted this change commited separately.

        * css/CSSProperty.h:
        (WebCore::CSSProperty::operator=):

2008-12-06  Antti Koivisto  <antti@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=22379
        Make CSSOM use less memory

        Use vector instead of a double linked list for properties in CSSMutableStyleDeclaration.

        Taught setter functions to use existing slots to avoid memory moves, plus some
        other optimizations.

        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSMutableStyleDeclaration.cpp:
        (WebCore::CSSMutableStyleDeclaration::CSSMutableStyleDeclaration):
        (WebCore::CSSMutableStyleDeclaration::operator=):
        (WebCore::CSSMutableStyleDeclaration::getPropertyCSSValue):
        (WebCore::CSSMutableStyleDeclaration::removeShorthandProperty):
        (WebCore::CSSMutableStyleDeclaration::removeProperty):
        (WebCore::CSSMutableStyleDeclaration::getPropertyPriority):
        (WebCore::CSSMutableStyleDeclaration::getPropertyShorthand):
        (WebCore::CSSMutableStyleDeclaration::isPropertyImplicit):
        (WebCore::CSSMutableStyleDeclaration::setProperty):
        (WebCore::CSSMutableStyleDeclaration::setPropertyInternal):
        (WebCore::CSSMutableStyleDeclaration::setStringProperty):
        (WebCore::CSSMutableStyleDeclaration::setImageProperty):
        (WebCore::CSSMutableStyleDeclaration::parseDeclaration):
        (WebCore::CSSMutableStyleDeclaration::addParsedProperties):
        (WebCore::CSSMutableStyleDeclaration::addParsedProperty):
        (WebCore::CSSMutableStyleDeclaration::setLengthProperty):
        (WebCore::CSSMutableStyleDeclaration::length):
        (WebCore::CSSMutableStyleDeclaration::item):
        (WebCore::CSSMutableStyleDeclaration::cssText):
        (WebCore::CSSMutableStyleDeclaration::setCssText):
        (WebCore::CSSMutableStyleDeclaration::merge):
        (WebCore::CSSMutableStyleDeclaration::removePropertiesInSet):
        (WebCore::CSSMutableStyleDeclaration::copy):
        (WebCore::CSSMutableStyleDeclaration::findPropertyWithId):
        * css/CSSMutableStyleDeclaration.h:
        (WebCore::CSSMutableStyleDeclarationConstIterator::operator*):
        (WebCore::CSSMutableStyleDeclarationConstIterator::operator->):
        (WebCore::CSSMutableStyleDeclarationConstIterator::operator!=):
        (WebCore::CSSMutableStyleDeclarationConstIterator::operator==):
        (WebCore::CSSMutableStyleDeclaration::create):
        (WebCore::CSSMutableStyleDeclaration::begin):
        (WebCore::CSSMutableStyleDeclaration::end):
        (WebCore::CSSMutableStyleDeclarationConstIterator::CSSMutableStyleDeclarationConstIterator):
        (WebCore::CSSMutableStyleDeclarationConstIterator::~CSSMutableStyleDeclarationConstIterator):
        (WebCore::CSSMutableStyleDeclarationConstIterator::operator=):
        (WebCore::CSSMutableStyleDeclarationConstIterator::operator++):
        (WebCore::CSSMutableStyleDeclarationConstIterator::operator--):
        * css/CSSProperty.h:
        (WTF::):
        * css/CSSStyleDeclaration.cpp:
        (WebCore::CSSStyleDeclaration::diff):
        (WebCore::CSSStyleDeclaration::copyPropertiesInSet):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::resolveVariablesForDeclaration):
        (WebCore::CSSStyleSelector::keyframeStylesForAnimation):
        (WebCore::CSSStyleSelector::applyDeclarations):
        * dom/EventTarget.h:
        * editing/ApplyStyleCommand.cpp:
        (WebCore::StyleChange::init):
        (WebCore::ApplyStyleCommand::isHTMLStyleNode):
        (WebCore::ApplyStyleCommand::removeHTMLFontStyle):
        (WebCore::ApplyStyleCommand::removeCSSStyle):
        * editing/Editor.cpp:
        (WebCore::Editor::selectionStartHasStyle):
        (WebCore::updateState):
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::handleStyleSpans):
        * editing/markup.cpp:
        (WebCore::appendStartMarkup):

2008-12-06  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Antti Koivisto, Dan Bernstein

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

        Fix logic related to repainting when transform changes:
        If an object has a layer, and the transform changes, then we need
        to do a repaintIncludingDescendants(), not just a repaint.

        Test: fast/repaint/transform-repaint-descendants.html

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

2008-12-06  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein

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

        When painting the selection on a replaced element, paint
        using local coordinates so that the selection is correctly
        painted for transformed elements.

        Test: fast/replaced/selection-rect-transform.html

        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::paint):

2008-12-06  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dave Hyatt

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

        Fix caret rendering to behave correctly with transforms:
        * Rename caretRect() methods to localCaretRect() and
          absoluteCaretBounds() as appropriate
        * Fix localCaretRect() methods to return a rect in the
          appropriate coordinates.
        * Pass tx, ty down through the paintCaret() methods, after fixing them
          up to account for differences between contents coords, and renderer-local
          coords (via RenderBlock::offsetForContents()).
        * Remove m_caretPositionOnLayout from SelectionController, and instead
          call invalidateSelection() from RenderLayer::scrollToOffset(), because
          we can no longer assume simple x/y offsets from scrolling with transforms.
        * Move the logic to compute which RenderObject actually paints the caret into
          SelectionController::caretRenderer(), rather than having it in RenderBlock.
        * SelectionController now computes and caches a local caret rect. For invalidation,
          it computes the absolute bounds of that (possibly transformed) local rect.
          The local rect is computed in the coordinate system of the RenderObject that
          will paint the caret (this may require offsetting from the actual renderer
          at the start of the selection).
        * Fix LayoutState(RenderObject* root) to take transforms into account
        * Make offsetFromContainer() a virtual method on RenderObject, and implement
          the RenderObject version. It's used to map from selection start renderer
          to caret renderer.

        Test: fast/transforms/transformed-caret.html

        * WebCore.base.exp:
        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::mergeParagraphs):
        * editing/SelectionController.cpp:
        (WebCore::SelectionController::SelectionController):
        (WebCore::absoluteCaretY):
        (WebCore::SelectionController::modify):
        (WebCore::SelectionController::xPosForVerticalArrowNavigation):
        (WebCore::SelectionController::layout):
        (WebCore::SelectionController::caretRenderer):
        (WebCore::SelectionController::localCaretRect):
        (WebCore::SelectionController::absoluteCaretBounds):
        (WebCore::SelectionController::caretRepaintRect):
        (WebCore::SelectionController::recomputeCaretRect):
        (WebCore::SelectionController::invalidateCaretRect):
        (WebCore::SelectionController::paintCaret):
        (WebCore::SelectionController::caretRendersInsideNode):
        * editing/SelectionController.h:
        * editing/VisiblePosition.cpp:
        (WebCore::VisiblePosition::localCaretRect):
        (WebCore::VisiblePosition::absoluteCaretBounds):
        (WebCore::VisiblePosition::xOffsetForVerticalNavigation):
        * editing/VisiblePosition.h:
        * editing/mac/SelectionControllerMac.mm:
        (WebCore::SelectionController::notifyAccessibilityForSelectionChange):
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::isContentEditable):
        * page/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::boundsForVisiblePositionRange):
        * page/Frame.cpp:
        (WebCore::Frame::firstRectForRange):
        (WebCore::Frame::selectionLayoutChanged):
        (WebCore::Frame::paintCaret):
        (WebCore::Frame::paintDragCaret):
        (WebCore::Frame::revealSelection):
        (WebCore::Frame::revealCaret):
        * page/Frame.h:
        * rendering/LayoutState.cpp:
        (WebCore::LayoutState::LayoutState):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::paintCaret):
        (WebCore::RenderBlock::paintObject):
        (WebCore::RenderBlock::positionForCoordinates):
        (WebCore::RenderBlock::offsetForContents):
        * rendering/RenderBlock.h:
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::localCaretRect):
        * rendering/RenderBox.h:
        * rendering/RenderFlow.cpp:
        (WebCore::RenderFlow::localCaretRect):
        * rendering/RenderFlow.h:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::scrollToOffset):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::localCaretRect):
        * rendering/RenderObject.h:
        * rendering/RenderSVGInlineText.cpp:
        (WebCore::RenderSVGInlineText::localCaretRect):
        * rendering/RenderSVGInlineText.h:
        * rendering/RenderText.cpp:
        (WebCore::RenderText::RenderText):
        (WebCore::RenderText::localCaretRect):
        * rendering/RenderText.h:

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

        Bug 22711: Current svn (build 39065) fails to compile

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

        BUILD FIX for r39065: Forgot parentheses after "document".

        Bug 22666: Clean up data structures used when collecting URLs of subresources for webarchives
        <https://bugs.webkit.org/show_bug.cgi?id=22666>

        * svg/SVGFEImageElement.cpp:
        (WebCore::SVGFEImageElement::addSubresourceAttributeURLs): Changed
        document to document().

2008-12-06  Dmitry Titov  <dimich@chromium.org>

        Reviewed by Alexey Proskuryakov.

        https://bugs.webkit.org/show_bug.cgi?id=22710
        Memory leak due to circular reference Document->DOMTimer->ScheduledAction->[JS objects]->Document

        * bindings/js/DOMTimer.cpp:
        (WebCore::DOMTimer::stop): Delete ScheduledAction, which contains a protected object.

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

        Bug 22666: Clean up data structures used when collecting URLs of subresources for webarchives

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

        Reviewed by Darin Adler.

        When creating a webarchive from WebCore::LegacyWebArchive::create(),
        HashSet<String>, Vector<KURL> and Vector<String> were all used to
        store a list of URLs for resources found in the document.  Instead
        use a single ListHashSet<KURL> to store the list and resolve the
        relative URLs as they're added.  We use a new inline method called
        WebCore::addSubresourceURL() to add KURL objects to the ListHashSet
        to prevent "null" KURL objects from crashing in the KURL hashing
        function.

        * WebCore.base.exp: Changed export of
        WebCore::Node::getSubresourceURLs() to take a ListHashSet<KURL>
        argument instead of a Vector<KURL>.

        * WebCore.xcodeproj/project.pbxproj: Marked KURLHash.h as a private
        header for use in WebKit.

        * css/CSSStyleSheet.cpp:
        (WebCore::CSSStyleSheet::addSubresourceStyleURLs): Renamed from
        addSubresourceURLStrings().  Changed to use ListHashSet<KURL>
        instead of HashSet<String>.  Cleaned up code.
        * css/CSSStyleSheet.h:
        (WebCore::CSSStyleSheet::addSubresourceStyleURLs): Ditto.
        * css/StyleSheet.h:
        (WebCore::StyleSheet::addSubresourceStyleURLs): Ditto.

        * dom/Node.cpp:
        (WebCore::Node::getSubresourceURLs): Changed to use
        ListHashSet<KURL> instead of Vector<KURL>.  Cleaned up code.
        * dom/Node.h:
        (WebCore::Node::getSubresourceURLs): Ditto.
        (WebCore::Node::addSubresourceAttributeURLs): Renamed from
        getSubresourceAttributeStrings().  Changed to use ListHashSet<KURL>
        instead of Vector<String>.
        (WebCore::addSubresourceURL): Added.  Safely adds new KURL objects
        to a ListHashSet<KURL> object.  A "null" KURL object will cause the
        hash function to crash since it contains a null StringImpl.  Used in
        Node::addSubresourceAttributeURLs() and addSubresourceStyleURLs() in
        the style subsystem.

        * dom/ProcessingInstruction.cpp:
        (WebCore::ProcessingInstruction::addSubresourceAttributeURLs):
        Renamed from getSubresourceAttributeStrings().  Changed to use
        ListHashSet<KURL> instead of Vector<String>.  Use
        WebCore::addSubresourceURL() to add new KURL objects.
        * dom/ProcessingInstruction.h: Ditto.
        * html/HTMLBodyElement.cpp:
        (WebCore::HTMLBodyElement::addSubresourceAttributeURLs): Ditto.
        * html/HTMLBodyElement.h: Ditto.
        * html/HTMLEmbedElement.cpp:
        (WebCore::HTMLEmbedElement::addSubresourceAttributeURLs): Ditto.
        * html/HTMLEmbedElement.h: Ditto.
        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::addSubresourceAttributeURLs): Ditto.
        * html/HTMLImageElement.h: Ditto.
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::addSubresourceAttributeURLs): Ditto.
        * html/HTMLInputElement.h: Ditto.
        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::addSubresourceAttributeURLs): Ditto.
        * html/HTMLLinkElement.h: Ditto.
        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::addSubresourceAttributeURLs): Ditto.
        * html/HTMLObjectElement.h: Ditto.
        * html/HTMLParamElement.cpp:
        (WebCore::HTMLParamElement::addSubresourceAttributeURLs): Ditto.
        * html/HTMLParamElement.h: Ditto.
        * html/HTMLScriptElement.cpp:
        (WebCore::HTMLScriptElement::addSubresourceAttributeURLs): Ditto.
        * html/HTMLScriptElement.h: Ditto.
        * html/HTMLStyleElement.cpp:
        (WebCore::HTMLStyleElement::addSubresourceAttributeURLs): Ditto.
        * html/HTMLStyleElement.h: Ditto.
        * html/HTMLTableCellElement.cpp:
        (WebCore::HTMLTableCellElement::addSubresourceAttributeURLs): Ditto.
        * html/HTMLTableCellElement.h: Ditto.
        * html/HTMLTableElement.cpp:
        (WebCore::HTMLTableElement::addSubresourceAttributeURLs): Ditto.
        * html/HTMLTableElement.h: Ditto.

        * loader/archive/cf/LegacyWebArchive.cpp:
        (WebCore::LegacyWebArchive::create): Changed from using
        HashSet<String> to ListHashSet<KURL> for tracking unique
        subresources.  Changed from using Vector<KURL> to ListHashSet<KURL>
        when calling WebCore::Node::getSubresourceURLs().  Cleaned up code.

        * svg/SVGCursorElement.cpp:
        (WebCore::SVGCursorElement::addSubresourceAttributeURLs): Renamed
        from getSubresourceAttributeStrings().  Changed to use
        ListHashSet<KURL> instead of Vector<String>.  Use
        WebCore::addSubresourceURL() to add new KURL objects.
        * svg/SVGCursorElement.h: Ditto.
        * svg/SVGFEImageElement.cpp:
        (WebCore::SVGFEImageElement::addSubresourceAttributeURLs): Ditto.
        * svg/SVGFEImageElement.h: Ditto.
        * svg/SVGImageElement.cpp:
        (WebCore::SVGImageElement::addSubresourceAttributeURLs): Ditto.
        * svg/SVGImageElement.h: Ditto.
        * svg/SVGScriptElement.cpp:
        (WebCore::SVGScriptElement::addSubresourceAttributeURLs): Ditto.
        * svg/SVGScriptElement.h: Ditto.

2008-12-05  Brett Wilson  <brettw@chromium.org>

        Reviewed by Darin Adler.

        Make the page group use the proper link hashing functions rather than
        calling the string hash functions directly. Add Chromium-specfic ifdefs
        in the visited link computation functions to allow integration.

        * page/PageGroup.cpp:
        (WebCore::PageGroup::isLinkVisited):
        (WebCore::PageGroup::addVisitedLink):
        * platform/LinkHash.cpp:
        (WebCore::visitedLinkHash):
        * platform/LinkHash.h:

2008-12-05  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Dave Hyatt.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=22635
        For iteration and end events, previous fixes to prevent the deletion of
        Animation objects (ref counting and hanging onto a ref during event callbacks)
        was sufficient to prevent dangling pointers. But start events are sent in
        the styleAvailable() call, which iterates over CompositeAnimation objects,
        which are not ref counted. So that object can get destroyed in the event
        handler while still active. So I added refcounting for CompositeAnimations.

        Additionally, when am iterating over the CompositingAnimation list, it can
        be deleted, which mutates the list. So I now make one pass over the list
        building a vector of CompositeAnimation objects that need to be called and
        then iterate over that vector to make the actual calls.

        Finally, to make sure the lifetime of the CompositeAnimation exceeds that of
        the Animation objects it owns, I now keep a ref to the CompositeAnimation
        in the timer callback for the iteration and end events. That means I no
        longer need to keep a ref to the Animation objects themselves in that timer
        callback, since the CompositeAnimation already has one.

        Tests: animations/animation-iteration-event-destroy-renderer.html
               animations/animation-start-event-destroy-renderer.html

        * page/animation/AnimationBase.cpp:
        (WebCore::AnimationBase::updateStateMachine):
        (WebCore::AnimationBase::animationTimerCallbackFired):
        * page/animation/AnimationController.cpp:
        (WebCore::AnimationControllerPrivate::~AnimationControllerPrivate):
        (WebCore::AnimationControllerPrivate::accessCompositeAnimation):
        (WebCore::AnimationControllerPrivate::clear):
        (WebCore::AnimationControllerPrivate::styleAvailable):
        (WebCore::AnimationControllerPrivate::updateAnimationTimer):
        (WebCore::AnimationControllerPrivate::animationTimerFired):
        (WebCore::AnimationControllerPrivate::isAnimatingPropertyOnRenderer):
        (WebCore::AnimationControllerPrivate::suspendAnimations):
        (WebCore::AnimationControllerPrivate::resumeAnimations):
        (WebCore::AnimationControllerPrivate::pauseAnimationAtTime):
        (WebCore::AnimationControllerPrivate::pauseTransitionAtTime):
        (WebCore::AnimationController::updateAnimations):
        (WebCore::AnimationController::setAnimationStartTime):
        (WebCore::AnimationController::setTransitionStartTime):
        * page/animation/CompositeAnimation.cpp:
        (WebCore::CompositeAnimationPrivate::animationController):
        (WebCore::CompositeAnimationPrivate::isWaitingForStyleAvailable):
        (WebCore::CompositeAnimationPrivate::~CompositeAnimationPrivate):
        (WebCore::CompositeAnimationPrivate::clearRenderer):
        (WebCore::CompositeAnimation::clearRenderer):
        (WebCore::CompositeAnimation::animationController):
        (WebCore::CompositeAnimation::isWaitingForStyleAvailable):
        * page/animation/CompositeAnimation.h:
        (WebCore::CompositeAnimation::create):

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

        Bug 22609: Provide a build-time choice when generating hash tables for properties of built-in DOM objects

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

        Reviewed by Darin Adler.

        Initial patch by Yosen Lin.  Adapted for ToT WebKit by David Kilzer.

        Added back the code that generates a "compact" hash (instead of a
        perfect hash) as a build-time option using the
        ENABLE(PERFECT_HASH_SIZE) macro as defined in Lookup.h.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateImplementation): Compute the number of elements that will
        be stored in each hash table and pass it to GenerateHashTable().
        (GenerateHashTable): Added new second parameter representing the
        number of elements to store in the compact hash table.  Added back
        code to compute compact hash tables.  Generate both hash table sizes
        and emit conditionalized code based on ENABLE(PERFECT_HASH_SIZE).

2008-12-05  Brett Wilson  <brettw@chromium.org>

        Fix build bustage from previous patch.

        * css/CSSSelector.h:

2008-12-05  Brett Wilson  <brettw@chromium.org>

        Reviewed by Eric Seidel.

        Add a missing include for OwnPtr to make CSSSelector compile without
        precompiled headers.

        * css/CSSSelector.h:

2008-12-05  Finnur Thorarinsson  <finnur.webkit@gmail.com>

        Reviewed by Darin Adler.

        Bug 22579: Providing a function to ScrollbarClient.h which allows us to get at the tickmarks
        without relying on high-level WebCore types, as requested by Dave Hyatt.

        No functional changes, thus no test cases.

        * page/FrameView.cpp:
        (WebCore::FrameView::getTickmarks):
        * page/FrameView.h:
        * platform/ScrollbarClient.h:

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

        Reviewed by David Hyatt.

        Make sure Window event listeners also tell the
        Document about the event type, so noisy events
        will be dispatched even if nothing in the document
        is listening.
        https://bugs.webkit.org/show_bug.cgi?id=20572

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

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

        Windows build fix after r39026

        * platform/network/cf/ResourceRequestCFNet.cpp:
        (WebCore::ResourceRequest::doUpdatePlatformRequest):
        (WebCore::ResourceRequest::doUpdateResourceRequest):
        Add some missing .get()s.

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

        Tiger build fix.

        * platform/network/mac/ResourceRequestMac.mm: Define NSUInteger.

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

        Reviewed by Darin Adler.

        <rdar://problem/6405599> Tiger Mail crashes when using "Mail Contents of This Page"
        in Safari before opening a mail message in Mail

        * platform/mac/WebCoreObjCExtras.mm:
        (WebCoreObjCFinalizeOnMainThread):
        Don't call initializeThreading: we now expect the caller to do it, to simplify keeping
        Tiger and post-Tiger behavior in line.

        * bindings/objc/DOMRGBColor.mm:
        (+[DOMRGBColor initialize]):
        * bindings/objc/WebScriptObject.mm:
        (+[WebScriptObject initialize]):
        * page/mac/AccessibilityObjectWrapper.mm:
        (+[AccessibilityObjectWrapper initialize]):
        * platform/mac/SharedBufferMac.mm:
        (+[WebCoreSharedBufferData initialize]):
        Call JSC::initializeThreading();

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

        Reviewed by Darin Adler.

        <rdar://problem/4072827> Downloaded non-ASCII file name becomes garbled

        * platform/network/ResourceRequestBase.cpp:
        (WebCore::ResourceRequestBase::setResponseContentDispositionEncodingFallbackArray):
        * platform/network/ResourceRequestBase.h:
        * platform/network/cf/ResourceRequestCFNet.cpp:
        (WebCore::findCFURLRequestSetContentDispositionEncodingFallbackArrayFunction):
        (WebCore::findCFURLRequestCopyContentDispositionEncodingFallbackArrayFunction):
        (WebCore::setContentDispositionEncodingFallbackArray):
        (WebCore::copyContentDispositionEncodingFallbackArray):
        (WebCore::ResourceRequest::doUpdatePlatformRequest):
        (WebCore::ResourceRequest::doUpdateResourceRequest):
        * platform/network/mac/ResourceRequestMac.mm:
        (WebCore::ResourceRequest::doUpdateResourceRequest):
        (WebCore::ResourceRequest::doUpdatePlatformRequest):
        Added a way to specify encoding fallback list for Content-Disposition header.

        * loader/FrameLoader.cpp: (WebCore::FrameLoader::addExtraFieldsToRequest): Generate and
        pass a list of encodings to try when decoding Content-Disposition header, as described
        in comments.

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

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=22672
        ASSERT(m_table) when xhr.onabort creates another xhr or calls setTimeout

        Test: http/tests/xmlhttprequest/send-on-abort.html

        * dom/ScriptExecutionContext.cpp:
        (WebCore::ScriptExecutionContext::canSuspendActiveDOMObjects):
        (WebCore::ScriptExecutionContext::suspendActiveDOMObjects):
        (WebCore::ScriptExecutionContext::resumeActiveDOMObjects):
        (WebCore::ScriptExecutionContext::stopActiveDOMObjects):
        Add a comment explaining that ActiveDOMObject methods shouldn't execute arbitrary JS.

        * xml/XMLHttpRequest.cpp: (WebCore::XMLHttpRequest::stop): Don't dispatch events. This
        reverts a recent change that made the behavior slightly closer to Firefox - but the
        compatibility effect should be very minor if any, and Firefox itself behaves inconsistently.

2008-12-05  Tobias König <tobias.koenig@nokia.com>

        Reviewed by Simon Hausmann.

        Record required package dependencies for the Qt build for a correct
        pkg-config file.

        * WebCore.pro:

2008-12-05  Tor Arne Vestbø  <tavestbo@trolltech.com>

        Rubber-stamped by Simon Hausmann.

        [Qt/Mac] Blacklist QuickTime plugin until we support the QuickDraw drawing model

        * plugins/mac/PluginPackageMac.cpp:
        (WebCore::PluginPackage::fetchInfo):
        (WebCore::PluginPackage::isPluginBlacklisted):

2008-12-05  Jungshik Shin  <jshin@chromium.org>

        Reviewed by Alexey Proskuryakov.

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

        Revises charset alias map for TextCodecICU.
        - Uses windows-949 and windows-874 instead of windows-949-2000 and windows-874-2000
        - Replaces 'windows874' in a couple of place with 'windows-874' (for the canonical name)
        - Maps 'dos-874' to 'windows-874'. Currently, it's aliases to 'cp874', which is in turn
          mapped to 'TIS-620'. 'TIS-620' is manually aliased to 'windows-874'. We'd better directly
          alias 'dos-874' to 'windows-874'.
        - Replaces 'EUC-CN' with 'GBK' when it's used as the canonical name.
          Similar to the above case, we're getting rid of indirection that eventually leads to 'GBK' by
          directly going to 'GBK'.
        - Adds 'x-uhc' as an alias for 'windows-949'. It's used in some web pages.

        Tests: fast/encoding/char-decoding-mac.html
               fast/encoding/char-decoding.html

        * platform/text/TextCodecICU.cpp:
        (WebCore::TextCodecICU::registerExtendedEncodingNames):

2008-12-04  Kevin Watters  <kevinwatters@gmail.com>

        Reviewed by Kevin Ollivier.

        Add a MIME mapping for the .htm extension to wx and GTK ports.

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

        * platform/gtk/MIMETypeRegistryGtk.cpp:
        (WebCore::):
        * platform/wx/MimeTypeRegistryWx.cpp:
        (WebCore::):

2008-12-04  Kevin Watters  <kevinwatters@gmail.com>

        Reviewed by Kevin Ollivier.

        Implement basic text paste support in wx and add notImplemented stubs
        to catch other methods.

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

        * platform/wx/PasteboardWx.cpp:
        (WebCore::Pasteboard::canSmartReplace):
        (WebCore::Pasteboard::plainText):
        (WebCore::Pasteboard::documentFragment):
        (WebCore::Pasteboard::writeImage):

2008-12-04  Kevin Ollivier  <kevino@theolliviers.com>

        wx build fix for !USE(WXGC) build config.

        * platform/graphics/wx/PathWx.cpp:
        (WebCore::Path::contains):
        (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):
        (WebCore::Path::isEmpty):

2008-12-04  Kevin Watters  <kevinwatters@gmail.com>

        Reviewed by Kevin Ollivier.

        Turn off styled controls until we can implement them properly.

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

        * platform/wx/RenderThemeWx.cpp:
        (WebCore::RenderThemeWx::isControlStyled):

2008-12-04  Kevin Watters  <kevinwatters@gmail.com>

        Reviewed by Kevin Ollivier.

        wx implementations for Path API.

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

        * platform/graphics/wx/PathWx.cpp:
        (WebCore::Path::~Path):
        (WebCore::Path::contains):
        (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::isEmpty):

2008-12-04  Julien Chaffraix  <jchaffraix@webkit.org>

        Reviewed by Eric Seidel.

        Bug 22564: Make HTML elements' constructors take a QualifiedName
        https://bugs.webkit.org/show_bug.cgi?id=22564

        Updated the remaining constructors.

        * bindings/js/JSImageConstructor.cpp:
        (WebCore::constructImage):
        * dom/Document.cpp:
        (WebCore::Document::getCSSCanvasElement):
        * editing/DeleteButton.cpp:
        (WebCore::DeleteButton::DeleteButton):
        * html/HTMLAppletElement.cpp:
        (WebCore::HTMLAppletElement::HTMLAppletElement):
        * html/HTMLAppletElement.h:
        * html/HTMLAreaElement.cpp:
        (WebCore::HTMLAreaElement::HTMLAreaElement):
        * html/HTMLAreaElement.h:
        * html/HTMLBaseFontElement.cpp:
        (WebCore::HTMLBaseFontElement::HTMLBaseFontElement):
        * html/HTMLBaseFontElement.h:
        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::HTMLCanvasElement):
        * html/HTMLCanvasElement.h:
        * html/HTMLElementFactory.cpp:
        (WebCore::hrConstructor):
        (WebCore::paragraphConstructor):
        (WebCore::basefontConstructor):
        (WebCore::fontConstructor):
        (WebCore::anchorConstructor):
        (WebCore::imageConstructor):
        (WebCore::mapConstructor):
        (WebCore::areaConstructor):
        (WebCore::canvasConstructor):
        (WebCore::appletConstructor):
        (WebCore::embedConstructor):
        (WebCore::objectConstructor):
        (WebCore::paramConstructor):
        (WebCore::scriptConstructor):
        (WebCore::tableConstructor):
        (WebCore::tableCaptionConstructor):
        (WebCore::tableRowConstructor):
        * html/HTMLEmbedElement.cpp:
        (WebCore::HTMLEmbedElement::HTMLEmbedElement):
        * html/HTMLEmbedElement.h:
        * html/HTMLFontElement.cpp:
        (WebCore::HTMLFontElement::HTMLFontElement):
        * html/HTMLFontElement.h:
        * html/HTMLHRElement.cpp:
        (WebCore::HTMLHRElement::HTMLHRElement):
        * html/HTMLHRElement.h:
        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::HTMLImageElement):
        * html/HTMLImageElement.h:
        * html/HTMLMapElement.cpp:
        (WebCore::HTMLMapElement::HTMLMapElement):
        * html/HTMLMapElement.h:
        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::HTMLObjectElement):
        * html/HTMLObjectElement.h:
        * html/HTMLParagraphElement.cpp:
        (WebCore::HTMLParagraphElement::HTMLParagraphElement):
        * html/HTMLParagraphElement.h:
        * html/HTMLParamElement.cpp:
        (WebCore::HTMLParamElement::HTMLParamElement):
        * html/HTMLParamElement.h:
        * html/HTMLParser.cpp:
        (WebCore::HTMLParser::handleError):
        (WebCore::HTMLParser::mapCreateErrorCheck):
        (WebCore::HTMLParser::handleIsindex):
        * html/HTMLScriptElement.cpp:
        (WebCore::HTMLScriptElement::HTMLScriptElement):
        * html/HTMLScriptElement.h:
        * html/HTMLTableCaptionElement.cpp:
        (WebCore::HTMLTableCaptionElement::HTMLTableCaptionElement):
        * html/HTMLTableCaptionElement.h:
        * html/HTMLTableElement.cpp:
        (WebCore::HTMLTableElement::HTMLTableElement):
        (WebCore::HTMLTableElement::createCaption):
        (WebCore::HTMLTableElement::insertRow):
        * html/HTMLTableElement.h:
        * html/HTMLTableRowElement.cpp:
        (WebCore::HTMLTableRowElement::HTMLTableRowElement):
        * html/HTMLTableRowElement.h:
        * html/HTMLTableSectionElement.cpp:
        (WebCore::HTMLTableSectionElement::insertRow):
        * html/HTMLViewSourceDocument.cpp:
        (WebCore::HTMLViewSourceDocument::createContainingTable):
        (WebCore::HTMLViewSourceDocument::addLine):
        * loader/ImageDocument.cpp:
        (WebCore::ImageDocumentElement::ImageDocumentElement):

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

        No review, build fix only.

        Add file missing from last commit.

        * bindings/js/ScriptState.h: Added.

2008-12-04  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Geoff Garen.

        Implement ScriptState abstraction (initially, a simple typedef)
        as means of carrying exception information across bindings boundaries
        and in a script engine-independent way.

        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSDOMBinding.cpp:
        (WebCore::scriptStateFromNode):
        * bindings/js/JSDOMBinding.h:
        * bindings/js/JSNodeFilterCondition.h:
        * bindings/js/ScriptState.h: Added.
        * dom/NodeFilter.cpp:
        (WebCore::NodeFilter::acceptNode):
        * dom/NodeFilter.h:
        (WebCore::NodeFilter::acceptNode):
        * dom/NodeFilterCondition.cpp:
        (WebCore::NodeFilterCondition::acceptNode):
        * dom/NodeFilterCondition.h:
        * dom/NodeIterator.cpp:
        (WebCore::NodeIterator::nextNode):
        (WebCore::NodeIterator::previousNode):
        * dom/NodeIterator.h:
        (WebCore::NodeIterator::nextNode):
        (WebCore::NodeIterator::previousNode):
        * dom/Traversal.cpp:
        (WebCore::Traversal::acceptNode):
        * dom/Traversal.h:
        * dom/TreeWalker.cpp:
        (WebCore::TreeWalker::parentNode):
        (WebCore::TreeWalker::firstChild):
        (WebCore::TreeWalker::lastChild):
        (WebCore::TreeWalker::previousSibling):
        (WebCore::TreeWalker::nextSibling):
        (WebCore::TreeWalker::previousNode):
        (WebCore::TreeWalker::nextNode):
        * dom/TreeWalker.h:
        (WebCore::TreeWalker::parentNode):
        (WebCore::TreeWalker::firstChild):
        (WebCore::TreeWalker::lastChild):
        (WebCore::TreeWalker::previousSibling):
        (WebCore::TreeWalker::nextSibling):
        (WebCore::TreeWalker::previousNode):
        (WebCore::TreeWalker::nextNode):

2008-12-04  Pierre-Olivier Latour  <pol@apple.com>

        Reviewed by Dan Bernstein.

        Fixed pauseTransitionAtTimeOnElementWithId() in DRT asserting when passed invalid property name
        and potential similar issue with pauseAnimationAtTimeOnElementWithId().

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

        * page/animation/CompositeAnimation.cpp:
        (WebCore::CompositeAnimationPrivate::pauseAnimationAtTime):
        (WebCore::CompositeAnimationPrivate::pauseTransitionAtTime):

2008-12-04  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Darin Adler.

        Remove unused Completion.h include.

        * html/CanvasRenderingContext2D.cpp: Removed Completion.h include.

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

        Fix a bug in ScrollView's refactoring.  An isVisible check should have been isSelfVisible.

        Reviewed by Darin Adler

        * platform/ScrollView.cpp:
        (WebCore::ScrollView::setParentVisible):

2008-12-04  Friedemann Kleint  <friedemann.kleint@nokia.com>

        Reviewed by Tor Arne Vestbø.

        Fix small translation glitch in the Qt file chooser.

        * platform/qt/FileChooserQt.cpp:
        (WebCore::FileChooser::basenameForWidth):

2008-12-04  Tor Arne Vestbø  <tavestbo@trolltech.com>

        Rubber-stamped by Simon Hausmann.

        Blacklist Silverlight plugin on Qt/Mac until supported

        Currently the plugin crashes with a corrupted stack trace, possibly
        related to https://bugs.webkit.org/show_bug.cgi?id=20635

        * plugins/mac/PluginPackageMac.cpp:
        (WebCore::PluginPackage::fetchInfo):
        (WebCore::PluginPackage::isPluginBlacklisted):

2008-12-03  Dmitry Titov  <dimich@chromium.org>

        Reviewed by Alexey Proskuryakov.

        Fix non-Mac build.

        * page/Chrome.cpp: (WebCore::PageGroupLoadDeferrer::~PageGroupLoadDeferrer):

2008-12-03  David Levin  <levin@chromium.org>

        Reviewed by Alexey Proskuryakov.

        Remove uses of document() in XMLHttpRequest where simple.
        https://bugs.webkit.org/show_bug.cgi?id=22619

        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::responseXML):
        Return NULL in the worker case which is according to spec (and avoids using document()).

        (WebCore::XMLHttpRequest::callReadyStateChangeListener):
        (WebCore::XMLHttpRequest::initSend):
        Use scriptExecutionContext() instead of document().

2008-12-03  David Levin  <levin@chromium.org>

        Reviewed by Alexey Proskuryakov.

        Make ScriptExecutionContextTaskWorkerTask::performTask a pure virtual function.
        https://bugs.webkit.org/show_bug.cgi?id=22642

        * dom/Document.cpp:
        (WebCore::ScriptExecutionContextTaskTimer::ScriptExecutionContextTaskTimer):
        (WebCore::ScriptExecutionContextTaskTimer::fired):
        (WebCore::PerformTaskContext::PerformTaskContext):
        (WebCore::performTask):
        (WebCore::Document::postTask):
        * dom/Document.h:
        * dom/ScriptExecutionContext.cpp:
        * dom/ScriptExecutionContext.h:
        * dom/WorkerContext.cpp:
        (WebCore::ScriptExecutionContextTaskWorkerTask::create):
        (WebCore::ScriptExecutionContextTaskWorkerTask::ScriptExecutionContextTaskWorkerTask):
        (WebCore::ScriptExecutionContextTaskWorkerTask::performTask):
        (WebCore::WorkerContext::postTask):
        * dom/WorkerContext.h:

2008-12-03  Dmitry Titov  <dimich@chromium.org>

        Reviewed by Alexey Proskuryakov.

        Using ActiveDOMObject as base class for DOMTimer.
        https://bugs.webkit.org/show_bug.cgi?id=22620

        Using ActiveDOMObject simplifies the code because ActiveDOMObject
        is wired for stop/pause/resume on loading/unloading/caching the page etc
        so the timer-specific code that does the same can be removed.
        In addition, timers can be now paused/resumed 'in place' which
        makes it unnecessary to 'serialize' them into special PausedTimeouts
        instance, so pause/resumeTimeouts implementation in JSDOMWindowBase can also be removed.
        Also, moving TimeoutMap from JSDOMWindowBase to Document matches lifetime
        of timeouts and makes it possible to not roundtrip them via PausedTimeouts
        every time when JSDOMWindow wrapper is destroyed while the page is in the b/f cache.

        Timeouts are now paused with other ActiveDOMObjects:
        - before creating CachedPage in FrameLoader::commitProvisionalLoad()
        - in JavaScriptDebugServer::setJavaScriptPaused
        - during modal UI operations in Chrome::*
        this is equivalent to previous usage of JSDOMWindowBase::pauseTimeouts()

        Timeouts are stopped to prevent future firing from:
        - FrameLoader::clear()
        - FrameLoader::frameDetached()
        this is equivalent to previous usage of JSDOMWindowBase::clearAllTimeouts()

        This is also one of the steps to having timers in Workers. See the plan of
        the next steps in the bug above.

        * bindings/js/DOMTimer.cpp:
        (WebCore::DOMTimer::DOMTimer):
        (WebCore::DOMTimer::fired):
        (WebCore::DOMTimer::hasPendingActivity):
        (WebCore::DOMTimer::contextDestroyed):
        (WebCore::DOMTimer::stop):
        (WebCore::DOMTimer::suspend):
        (WebCore::DOMTimer::resume):
        (WebCore::DOMTimer::canSuspend): Implemented ActiveDOMObject methods.

        * bindings/js/DOMTimer.h:
        * bindings/js/JSDOMBinding.cpp: ActiveDOMObject can have no JS wrapper
        (WebCore::markActiveObjectsForContext):

        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::~JSDOMWindowBase):
        (WebCore::JSDOMWindowBase::clear):
        (WebCore::JSDOMWindowBase::installTimeout):
        (WebCore::JSDOMWindowBase::removeTimeout):
        (WebCore::JSDOMWindowBase::timerFired):
        (WebCore::JSDOMWindowBase::disconnectFrame):
        * bindings/js/JSDOMWindowBase.h:
        * bindings/js/ScriptController.cpp:
        * bindings/js/ScriptController.h:

        * dom/Document.cpp: Document now holds a hash map id->timeout
        (WebCore::Document::addTimeout):
        (WebCore::Document::removeTimeout):
        (WebCore::Document::findTimeout):
        * dom/Document.h:
        * history/CachedPage.cpp:
        (WebCore::CachedPage::CachedPage):
        (WebCore::CachedPage::restore):
        (WebCore::CachedPage::clear):
        * history/CachedPage.h:
        * inspector/JavaScriptDebugServer.cpp:
        (WebCore::JavaScriptDebugServer::~JavaScriptDebugServer):
        (WebCore::JavaScriptDebugServer::setJavaScriptPaused):
        * inspector/JavaScriptDebugServer.h:

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::commitProvisionalLoad):
        removed clearAllTimeouts since all ActiveDOMObjects will be stopped in FrameLoader::clear();
        I don't see how the old comment can be correct - the code in the same method proceeds to invoke 'onunload'
        and then calls into client which can be external code and can cause any active object created in onunload
        to fire. We can stop them all before firing onunload but it does not make a lot of sense.
        I have a test to go with the next patch which verifies that timers set in onunload do not fire.

        (WebCore::FrameLoader::open):
        * page/Chrome.cpp:
        (WebCore::PageGroupLoadDeferrer::PageGroupLoadDeferrer):
        (WebCore::PageGroupLoadDeferrer::~PageGroupLoadDeferrer):

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

        Reviewed by Beth Dakin.

        <rdar://problem/6018653> Extra blank line when pasting paragraph in plain text

        In SnowLeopard, Mail occasionally adds an empty, unstyled paragraph at the
        end of pasted content so that users don't get stuck with non-standard pargraph
        spacing.  This content threw off our handling of interchange newlines.  Any interchange
        newline, regardless of it's position in the incoming fragment was considered to be
        "at the start" of the fragment, and would result in us inserting in a newline before
        inserted content.  This patch makes the checks for interchange newlines more strict,
        and treats interchange newlines found elsewhere as normal <br>s.

        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplacementFragment::ReplacementFragment):
        (WebCore::ReplacementFragment::removeInterchangeNodes):
        * editing/VisiblePosition.cpp:
        (WebCore::VisiblePosition::init):
        (WebCore::VisiblePosition::canonicalPosition):
        * editing/VisiblePosition.h:

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

        Rubber-stamped by David Hyatt.

        Bring the WebCore chromium build a couple steps closer to building.

        * WebCore.scons:

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

        wx build fix.

        * WebCoreSources.bkl:

2008-12-03  Nikolas Zimmermann  <nikolas.zimmermann@torchmobile.com>

        Reviewed by George Staikos.

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

        Implement WML variable substitution & validation.
        Created a framework for scriptable WML layout tests, that are able to test variable substiution & validation.

        Tests: wml/variable-reference-invalid-character.html
               wml/variable-reference-valid.html

        * wml/WMLVariables.cpp:
        (WebCore::isValidFirstVariableNameCharacter):
        (WebCore::isValidVariableNameCharacter):
        (WebCore::isValidVariableEscapingModeString):
        (WebCore::isValidVariableName):
        (WebCore::containsVariableReference):
        (WebCore::substituteVariableReferences):
        * wml/WMLVariables.h:

2008-12-03  Nikolas Zimmermann  <nikolas.zimmermann@torchmobile.com>

        Reviewed by Cameron Zwarich.

        Further preparations for WML layout tests.
        - Enable variable substitution in Text.cpp - if the parent is a WMLElement derived class.
        - Dump WMLMessageSource messages to the console, just like it's done for JSMessageSource
        - Add helper method in Document.idl, to reset the WML page state to a well-known default state.
          (will be used in the upcoming LayoutTests/wml testcases)

         * dom/Document.cpp:
        (WebCore::Document::resetWMLPageState):
        * dom/Document.h:
        * dom/Document.idl:
        * dom/Text.cpp:
        (WebCore::Text::insertedIntoDocument):
        * dom/Text.h:
        * page/Console.cpp:
        (WebCore::Console::addMessage):
        * wml/WMLPageState.h: Readd heper function
        (WebCore::WMLPageState::hasVariables):

2008-12-03  Antti Koivisto  <antti@apple.com>

        Reviewed by Sam Weinig.

        Don't leak selectors in case selector list parsing failed.

        * css/CSSGrammar.y:
        * css/CSSParser.cpp:
        (WebCore::CSSParser::~CSSParser):

2008-12-03  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Dave Hyatt.

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

        This is a regression (causes a crash of LayoutTests/animations/transform-animation-event-destroy-element.html).
        This patch fixes the testcase.

        This is another case of animations getting destroyed in the end animation callback and causing dangling
        pointers on return. This one involves iterating over the CompositeAnimation, which has been destroyed.
        So I now check for a null m_object pointer (which is nullified when the CompositeAnimation is destroyed)
        and skip that call.

        * page/animation/AnimationBase.cpp:
        (WebCore::AnimationBase::updateStateMachine):

2008-12-03  Antti Koivisto  <antti@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=22379
        Make CSSOM use less memory

        Reduce size of the CSSSelector by one more pointer by using an array
        instead of a linked list to store them.

        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSGrammar.y:
        * css/CSSParser.cpp:
        (WebCore::CSSParser::CSSParser):
        (WebCore::CSSParser::parseSelector):
        (WebCore::CSSParser::createStyleRule):
        * css/CSSParser.h:
        (WebCore::CSSParser::reusableSelectorVector):
        * css/CSSSelector.h:
        (WebCore::CSSSelector::CSSSelector):
        (WebCore::CSSSelector::~CSSSelector):
        (WebCore::CSSSelector::isLastInSelectorList):
        (WebCore::CSSSelector::setLastInSelectorList):
        * css/CSSStyleRule.cpp:
        (WebCore::CSSStyleRule::CSSStyleRule):
        (WebCore::CSSStyleRule::~CSSStyleRule):
        (WebCore::CSSStyleRule::selectorText):
        * css/CSSStyleRule.h:
        (WebCore::CSSStyleRule::adoptSelectorVector):
        (WebCore::CSSStyleRule::selectorList):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSRuleSet::addRulesFromSheet):
        * dom/Node.cpp:
        (WebCore::forEachSelector):
        (WebCore::selectorNeedsNamespaceResolution):
        (WebCore::Node::querySelector):
        (WebCore::Node::querySelectorAll):
        * dom/SelectorNodeList.cpp:
        (WebCore::createSelectorNodeList):
        * dom/SelectorNodeList.h:

2008-12-03  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=22630
        Assertion failure in XMLHttpRequest::contextDestroyed

        Test: http/tests/xmlhttprequest/close-window.html

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::clear):
        (WebCore::FrameLoader::commitProvisionalLoad):
        Move stopping active objects to clear(), so that closing a window is also covered.

        * xml/XMLHttpRequest.cpp: (WebCore::XMLHttpRequest::abort): Protect the object in abort(),
        because internalAbort() deref()'s.

2008-12-03  Dean Jackson  <dino@apple.com>

        Reviewed by Dan Bernstein.

        Implement CSS 3 <angle> turn unit and support it
        in rotations.
        https://bugs.webkit.org/show_bug.cgi?id=22497

        * css/CSSGrammar.y:
        * css/CSSParser.cpp:
        (WebCore::CSSParser::validUnit):
        (WebCore::unitFromString):
        (WebCore::CSSParser::lex):
        * css/CSSPrimitiveValue.cpp:
        (WebCore::CSSPrimitiveValue::cssText):
        (WebCore::CSSPrimitiveValue::parserValue):
        * css/CSSPrimitiveValue.h:
        (WebCore::CSSPrimitiveValue::):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::createTransformOperations):
        * css/tokenizer.flex:

2008-12-03  Dirk Schulze  <krit@webkit.org>

        Reviewed by Nikolas Zimmermann.

        Make use of the gradient code in GraphicsContext and get rid of most of the
        platform dependent code.

        SVG should use the new Gradient support on GraphicsContext
        https://bugs.webkit.org/show_bug.cgi?id=20543

        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/FloatSize.h:
        (WebCore::FloatSize::shrunkTo):
        * svg/SVGLinearGradientElement.cpp:
        (WebCore::SVGLinearGradientElement::buildGradient):
        * svg/SVGRadialGradientElement.cpp:
        (WebCore::SVGRadialGradientElement::buildGradient):
        * svg/graphics/SVGPaintServer.h:
        * svg/graphics/SVGPaintServerGradient.cpp:
        (WebCore::SVGPaintServerGradient::SVGPaintServerGradient):
        (WebCore::SVGPaintServerGradient::~SVGPaintServerGradient):
        (WebCore::SVGPaintServerGradient::gradient):
        (WebCore::SVGPaintServerGradient::setGradient):
        (WebCore::findTextRootObject):
        (WebCore::createMaskAndSwapContextForTextGradient):
        (WebCore::clipToTextMask):
        (WebCore::SVGPaintServerGradient::setup):
        (WebCore::SVGPaintServerGradient::renderPath):
        (WebCore::SVGPaintServerGradient::teardown):
        * svg/graphics/SVGPaintServerGradient.h:
        (WebCore::SVGPaintServerGradient::setGradientStops):
        (WebCore::SVGPaintServerGradient::gradientStops):
        * svg/graphics/SVGPaintServerLinearGradient.h:
        * svg/graphics/SVGPaintServerRadialGradient.h:
        * svg/graphics/cairo/SVGPaintServerGradientCairo.cpp: Removed.
        * svg/graphics/cg/SVGPaintServerCg.cpp:
        * svg/graphics/cg/SVGPaintServerGradientCg.cpp: Removed.
        * svg/graphics/qt/SVGPaintServerGradientQt.cpp: Removed.
        * svg/graphics/qt/SVGPaintServerLinearGradientQt.cpp: Removed.
        * svg/graphics/qt/SVGPaintServerRadialGradientQt.cpp: Removed.

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

        Reviewed by Mark Rowe.

        Fix formatting.

        * css/CSSSelector.h:
        (WebCore::CSSSelector::createRareData):

2008-12-03  Nikolas Zimmermann  <nikolas.zimmermann@torchmobile.com>

        Reviewed by Adam Roben.

        As Adam Roben noticed, synchronize MessageSource enum with Console.js, and add a comment.

        * inspector/front-end/Console.js:
        * page/Console.h:

2008-12-03  Nikolas Zimmermann  <nikolas.zimmermann@torchmobile.com>

        Reviewed by Alexey Proskuryakov.

        Next steps to make LayoutTests work:
        Never access the main frame from WMLRefreshElement/WMLCardElement, but
        the current documents frame (WML layout tests will run in an <iframe>)

        Prepare WMLErrorHandling for the case that no tokenizer is available anymore
        -> report errors through Console::addMessage(), so they get logged in the
           expected layout test results.

        * wml/WMLCardElement.cpp:
        (WebCore::WMLCardElement::setActiveCardInDocument):
        * wml/WMLErrorHandling.cpp:
        (WebCore::reportWMLError):
        (WebCore::errorMessageForErrorCode):
        * wml/WMLErrorHandling.h:
        * wml/WMLRefreshElement.cpp:
        (WebCore::WMLRefreshElement::executeTask):
        * page/Console.cpp: Handle WMLMessageSource.
        (WebCore::printMessageSourceAndLevelPrefix):
        * page/Console.h: Add WMLMessageSource.
        (WebCore::):

2008-12-03  Tor Arne Vestbø  <tavestbo@trolltech.com>

        Reviewed by Simon Hausmann.

        Allow passing jsNull and jsUndefined to Qt plugins

        Currently limited to functions with QString and QVariant arguments,
        and properties of these types. Both jsNull and jsUndefined ends up
        as default-constructed QStrings and QVariants, which means you can
        check for isEmpty() and isValid() in the native plugin code.

        Based on patches by Jade Han <jade.han@nokia.com>

        * bridge/qt/qt_runtime.cpp:
        (JSC::Bindings::convertValueToQVariant):
        (JSC::Bindings::findMethodIndex):

2008-12-03  Trenton Schulz  <trenton.schulz@nokia.com>

        Reviewed by Simon Hausmann.

        Fix the build with Qt for Mac OS X.

        * platform/PurgeableBuffer.h: Use the dummy wrappers for now.

2008-12-03  Nikolas Zimmermann  <nikolas.zimmermann@torchmobile.com>

        Reviewed by Alexey Proskuryakov.

        Fix error handling in WMLSetvarElement. If an invalid variable reference is contained
        in the 'name' attribute of <setvar>, a 'WMLErrorInvalidVariableName' error should be
        reported, instead of 'WMLErrorInvalidVariableReference'.

        * wml/WMLElement.cpp:
        (WebCore::WMLElement::parseValueSubstitutingVariableReferences):
        (WebCore::WMLElement::parseValueForbiddingVariableReferences):
        * wml/WMLElement.h:
        * wml/WMLSetvarElement.cpp:
        (WebCore::WMLSetvarElement::parseMappedAttribute):
        * wml/WMLSetvarElement.h:
        (WebCore::WMLSetvarElement::name):
        (WebCore::WMLSetvarElement::value):

2008-12-03  Nikolas Zimmermann  <nikolas.zimmermann@torchmobile.com>

        Reviewed by Alexey Proskuryakov.

        Preparations to get WML layout tests going.
        Make WMLPageState an OwnPtr to Page, and let Page create it on demand.

        * page/Page.cpp:
        (WebCore::Page::Page):
        (WebCore::Page::wmlPageState):
        * page/Page.h:
        * wml/WMLDocument.cpp:
        (WebCore::WMLDocument::WMLDocument):
        (WebCore::WMLDocument::finishedParsing):
        (WebCore::wmlPageStateForDocument):
        * wml/WMLPageState.h: Don't inherit from RefCounted anymore.
        (WebCore::WMLPageState::hasVariables): Remove helper function.

2008-12-03  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Mark Rowe.

        https://bugs.webkit.org/show_bug.cgi?id=22627
        fast/workers/worker-terminate.html fails randomly

        The problem is that worker termination uses script timeouts, so an InterruptedExecutionError
        is raised, and it sometimes reaches the main thread.

        * dom/WorkerMessagingProxy.cpp:
        (WebCore::WorkerExceptionTask::create):
        (WebCore::WorkerExceptionTask::WorkerExceptionTask):
        (WebCore::WorkerExceptionTask::performTask):
        (WebCore::WorkerMessagingProxy::postWorkerException):
        * dom/WorkerMessagingProxy.h:
        Ignore exceptions that happen in terminated workers.

2008-12-03  Nikolas Zimmermann  <nikolas.zimmermann@torchmobile.com>

        Reviewed by Alexey Proskuryakov.

        Remove some unncessary includes.

        * wml/WMLAccessElement.cpp:
        * wml/WMLDocument.h:
        * wml/WMLRefreshElement.cpp:

2008-12-03  Alexey Proskuryakov  <ap@webkit.org>

        Rubber-stamped by Cameron Zwarich and Adam Roben.

        Fix a typo: m_executionForbidded.

        * bindings/js/WorkerScriptController.cpp:
        (WebCore::WorkerScriptController::WorkerScriptController):
        (WebCore::WorkerScriptController::evaluate):
        (WebCore::WorkerScriptController::forbidExecution):
        * bindings/js/WorkerScriptController.h:

2008-12-03  Dean McNamee  <deanm@chromium.org>

        Bug 22623: Uninitialized memory access in cache parsing code
        <https://bugs.webkit.org/show_bug.cgi?id=22623>

        Reviewed by David Kilzer.

        Initialize m_haveParsedCacheControlHeader and m_haveParsedPragmaHeader.

        * platform/network/ResourceResponseBase.h:
        (WebCore::ResourceResponseBase::ResourceResponseBase):

2008-12-03  Antti Koivisto  <antti@apple.com>

        Probable build fix.

        * WebCoreSources.bkl:

2008-12-03  Antti Koivisto  <antti@apple.com>

        Forgot to commit these.

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

2008-12-03  Antti Koivisto  <antti@apple.com>

        Reviewed by Dan Bernstein and Mark Rowe.

        https://bugs.webkit.org/show_bug.cgi?id=22379
        Make CSSOM use less memory

        Reduce size of the CSSSelector by 3/8 by moving rarely used fields to a rare data
        struct. Browsing around with some instrumentation showed that ~0.1% of all selectors
        encountered had rare data.

        This also eliminates the CSSNthSelector subclass which will make possible to store
        CSSSelectors in an array instead of a linked list for futher memory savings.

        * css/CSSGrammar.y:
        * css/CSSNthSelector.cpp: Removed.
        * css/CSSNthSelector.h: Removed.
        * css/CSSParser.cpp:
        (WebCore::CSSParser::createFloatingSelector):
        * css/CSSParser.h:
        * css/CSSSelector.cpp:
        (WebCore::CSSSelector::specificity):
        (WebCore::CSSSelector::operator==):
        (WebCore::CSSSelector::selectorText):
        (WebCore::CSSSelector::setTagHistory):
        (WebCore::CSSSelector::attribute):
        (WebCore::CSSSelector::setAttribute):
        (WebCore::CSSSelector::setArgument):
        (WebCore::CSSSelector::setSimpleSelector):
        (WebCore::CSSSelector::parseNth):
        (WebCore::CSSSelector::matchNth):
        (WebCore::CSSSelector::RareData::parseNth):
        (WebCore::CSSSelector::RareData::matchNth):
        * css/CSSSelector.h:
        (WebCore::CSSSelector::CSSSelector):
        (WebCore::CSSSelector::~CSSSelector):
        (WebCore::CSSSelector::tagHistory):
        (WebCore::CSSSelector::hasAttribute):
        (WebCore::CSSSelector::argument):
        (WebCore::CSSSelector::simpleSelector):
        (WebCore::CSSSelector::RareData::RareData):
        (WebCore::CSSSelector::createRareData):
        (WebCore::CSSSelector::):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::SelectorChecker::checkSelector):
        (WebCore::CSSStyleSelector::SelectorChecker::checkOneSelector):

2008-12-03  Jian Li  <jianli@chromium.org>

        Reviewed by Alexey Proskuryakov.

        Remove unneeded included file in WorkerThread.cpp.
        https://bugs.webkit.org/show_bug.cgi?id=22613

        * dom/WorkerThread.cpp: No need to include JSWorkerContext.h.

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

        Reviewed by Maciej Stachowiak.

        https://bugs.webkit.org/show_bug.cgi?id=22543
        Consolidate ActiveDOMObject page cache interaction

        Test: http/tests/xmlhttprequest/abort-on-leaving-page.html

        * dom/ActiveDOMObject.cpp:
        (WebCore::ActiveDOMObject::canSuspend):
        (WebCore::ActiveDOMObject::suspend):
        (WebCore::ActiveDOMObject::resume):
        * dom/ActiveDOMObject.h:
        * dom/ScriptExecutionContext.cpp:
        (WebCore::ScriptExecutionContext::canSuspendActiveDOMObjects):
        (WebCore::ScriptExecutionContext::suspendActiveDOMObjects):
        (WebCore::ScriptExecutionContext::resumeActiveDOMObjects):
        * dom/ScriptExecutionContext.h:
        Added methods for suspending and resuming active objects.

        * dom/Worker.cpp:
        (WebCore::Worker::canSuspend):
        (WebCore::Worker::stop):
        * dom/Worker.h:
        Workers cannot be suspended yet. This is a change in behavior, as workers used to keep
        running until their owner was destroyed.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::stopLoading): No longer call stopActiveDOMObjects() here, because
        their activity is not necessarily loading.
        (WebCore::FrameLoader::canCachePage): Can only cache if all active objects can be suspended.
        Previously, stopLoading() cancelled outstanding XMLHttpRequests, which made the page
        uncacheable due to no-null main document error.
        (WebCore::FrameLoader::commitProvisionalLoad): Suspend or stop active objects, depending on
        whether the document will be cached.
        (WebCore::FrameLoader::frameDetached): Stop active objects to let them clean up before their
        context is destroyed.

        * xml/XMLHttpRequest.h: added canSuspend().
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::canSuspend): Only XHRs that are not loading can be suspended.
        (WebCore::XMLHttpRequest::stop): Call abort() instead of internalAbort() to dispatch events
        for Firefox compatibility. This is a change in behavior that helps test that requests do
        get aborted.
        (WebCore::XMLHttpRequest::contextDestroyed): The request must have been stopped by now, so
        assert that.

2008-12-02  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Beth Dakin.

        Bug 22606: Can <th> serves as the AXTitleUIElement for <td>?

        Test: accessibility/th-as-title-ui.html

        * page/AccessibilityObject.h:
        (WebCore::AccessibilityObject::isGroup):
        * page/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::isGroup):
        * page/AccessibilityRenderObject.h:
        * page/AccessibilityTableCell.cpp:
        (WebCore::AccessibilityTableCell::rowIndexRange):
        (WebCore::AccessibilityTableCell::columnIndexRange):
        (WebCore::AccessibilityTableCell::titleUIElement):
        * page/AccessibilityTableCell.h:
        * page/mac/AccessibilityObjectWrapper.mm:
        (-[AccessibilityObjectWrapper accessibilityAttributeNames]):

2008-12-02  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dave Hyatt

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

        Override absoluteClippedOverflowRect() in RenderReplaced to return a rect
        that is large enough to encompass the selection, so that the repainting of
        selected replaced elements works correctly.

        Test: fast/repaint/selected-replaced.html

        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::selectionRect):
        (WebCore::RenderReplaced::localSelectionRect):
        (WebCore::RenderReplaced::absoluteClippedOverflowRect):
        * rendering/RenderReplaced.h:

2008-12-02  Gregory Hughes  <ghughes@apple.com>

        Reviewed by Beth Dakin.

        Bug 22513: ZOOM: text selection does not send correct zoom bounds

        When zoomed, text selection must send the zoom bounds in flipped
        screen coordinates.

        * editing/mac/SelectionControllerMac.mm:
        (WebCore::SelectionController::notifyAccessibilityForSelectionChange):
        * page/mac/WebCoreViewFactory.h:

2008-12-02  Dean Jackson  <dino@apple.com>

        Reviewed by Sam Weinig.

        Remove support for 'now' from CSS (was
        erroneously added to transition and animation delay)
        https://bugs.webkit.org/show_bug.cgi?id=22571

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseAnimationDelay):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::mapAnimationDelay):
        * css/CSSValueKeywords.in:

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

        Build fix, no review.

        Fix the Mac and gtk builds:
        Don't use a float to hold a double.
        Remove a now duplicate symbol.

        * page/Frame.cpp:
        (WebCore::Frame::selectionLayoutChanged):
        * platform/gtk/TemporaryLinkStubs.cpp:

2008-12-02  Chris Fleizach  <cfleizach@apple.com>

        Bug 22596: Some elements don't report AXBlockQuoteLevel
        https://bugs.webkit.org/show_bug.cgi?id=22596

        Reviewed by John Sullivan.

        * page/mac/AccessibilityObjectWrapper.mm:
        (blockquoteLevel):
        (AXAttributeStringSetBlockquoteLevel):
        (-[AccessibilityObjectWrapper accessibilityAttributeNames]):
        (-[AccessibilityObjectWrapper accessibilityAttributeValue:]):

2008-12-02  Dean McNamee  <deanm@chromium.org>

        Reviewed by Eric Seidel.

        Correctly handle a theme returning a non-blinking interval.  We should
        not set any timers when the interval is 0 (non-blinking), otherwise we
        repeatedly set and destroy a blinking timer, causing a paint and timer
        storm.  This is applicable to GTK and Windows, where a user can set a
        non-blinking caret in their system preferences.

        Renamed caretBlinkFrequency to the more accurate caretBlinkInterval.

        * page/Frame.cpp:
        (WebCore::Frame::selectionLayoutChanged):
        * platform/Theme.h:
        (WebCore::Theme::caretBlinkInterval):
        * platform/gtk/RenderThemeGtk.cpp:
        (WebCore::RenderThemeGtk::caretBlinkInterval):
        * platform/gtk/RenderThemeGtk.h:
        * rendering/RenderTheme.h:
        (WebCore::RenderTheme::caretBlinkInterval):

2008-12-02  David Levin  <levin@chromium.org>

        Reviewed by Eric Seidel.

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

        startsWith uses find which searches through the whole string if no match is found.
        Using reverseFind with an index of 0 has the benefit of only searching for the match
        at the beginning of the string.  This may only be a small benefit in the overall program,
        but it may help in some cases when the string is big.

        No observable change in behavior, so no test.

        * platform/text/StringImpl.h:
        (WebCore::StringImpl::startsWith):

2008-10-29  Eric Seidel  <eric@webkit.org>

        Reviewed by Darin Adler.

        Wrap a JSC-only hack in a USE(JSC) block to fix the v8 build.
        https://bugs.webkit.org/show_bug.cgi?id=21951

        * svg/SVGElementInstance.cpp:
        (WebCore::SVGElementInstance::forgetWrapper):

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

        Reviewed by Darin Adler.

        Add an ASSERT to try and catch the root cause of:
        https://bugs.webkit.org/show_bug.cgi?id=22168
        http://code.google.com/p/chromium/issues/detail?id=4122

        * editing/TextIterator.cpp:
        (WebCore::TextIterator::emitText):

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

        Reviewed by Adam Roben.

        Remove some CG-specific code from the Windows Cairo build.
        https://bugs.webkit.org/show_bug.cgi?id=22586

        No new test cases since this update should create no user-visible
        changes, and should be fully covered by the existing regression
        tests.

        * WebCore.vcproj/WebCore.vcproj: Remove FontDatabase from
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::focusRingColor): Add stub method
        * platform/win/TemporaryLinkStubs.cpp:
        (WebCore::populateFontDatabase): Add stub method.

2008-12-01 Laszlo Gombos <laszlo.1.gombos@nokia.com>

        Reviewed by Tor Arne Vestbø.

        MinGW compilation fix for PluginPackageWin.cpp

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

        * plugins/win/PluginPackageWin.cpp:
        (WebCore::PluginPackage::fetchInfo):

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

        Build fix for Windows projects with NOMINMAX defined globally

        * platform/win/COMPtr.h: Don't redefine NOMINMAX if it's already
        defined.

2008-12-02  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Tor Arne Vestbø.

        Build JavaScriptCore into libQtWebKit.so through a direct build
        instead of a static library. When linking a static library into
        a shared library qmake generates an incorrect .prl file, which
        causes all sorts of different build problems when linking against
        QtWebKit. Fixing this in qmake requires bigger changes that are
        currently not possible, so we need to work around this limitation
        for now. The advantages of the separate build did not outweight the
        build problems it caused.

        * WebCore.pro: include JavaScriptCore.pri, re-enable prl support
        and rename the lut generator to domlut to avoid a conflict with
        JavaScriptCore.pri's lut generator.

2008-12-02  David Levin  <levin@chromium.org>

        Reviewed by Alexey Proskuryakov.

        https://bugs.webkit.org/show_bug.cgi?id=22588
        Move securityOrigin() from Document and WorkerContext into ScriptExecutionContext.

        No observable change in behavior, so no test.

        * dom/Document.cpp:
        (WebCore::Document::open):
        (WebCore::Document::domain):
        (WebCore::Document::setDomain):
        (WebCore::Document::initSecurityContext):
        (WebCore::Document::setSecurityOrigin):
        * dom/Document.h:
        * dom/ScriptExecutionContext.cpp:
        (WebCore::ScriptExecutionContext::setSecurityOrigin):
        * dom/ScriptExecutionContext.h:
        (WebCore::ScriptExecutionContext::securityOrigin):
        * dom/WorkerContext.cpp:
        (WebCore::WorkerContext::WorkerContext):
        * dom/WorkerContext.h:
        These changes are for the move of securityOrigin().

        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::createRequest):
        (WebCore::XMLHttpRequest::makeSimpleCrossSiteAccessRequest):
        (WebCore::XMLHttpRequest::makeCrossSiteAccessRequestWithPreflight):
        (WebCore::XMLHttpRequest::handleAsynchronousPreflightResult):
        (WebCore::XMLHttpRequest::setRequestHeader):
        (WebCore::XMLHttpRequest::getAllResponseHeaders):
        (WebCore::XMLHttpRequest::getResponseHeader):
        (WebCore::XMLHttpRequest::processSyncLoadResults):
        (WebCore::XMLHttpRequest::willSendRequest):
        (WebCore::XMLHttpRequest::accessControlCheck):
        (WebCore::XMLHttpRequest::didReceiveResponsePreflight):
        Change XMLHttpRequest to use ScriptExecutionContext instead of Document to access securityOrigin().

2008-12-02  André Pönitz  <apoenitz@trolltech.com>

        Reviewed by Simon Hausmann.

        Disable the creation of debug information for the Qt build when done
        inside Qt. With 670 mb it was slowing down gdb start significantly
        for third-party applications that usually don't need it.

        * WebCore.pro:

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

        Reviewed by Dan Bernstein.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=13736 REGRESSION
        (r19811): Using the down arrow in a textarea gets "stuck" at the
        end of a wrapped line
        And corresponding: <rdar://problem/5347931>

        The basic problem here is that Position::getInlineBoxAndOffset()
        failed to look beyond a single renderer. This patch looks for a
        better match beyond the first renderer when the affinity is
        downstream and we failed to find a "perfect" match.
        * dom/Position.cpp:
        (WebCore::isNonTextLeafChild):
        (WebCore::searchAheadForBetterMatch):
        (WebCore::Position::getInlineBoxAndOffset):

        This is a fix I made based on code inspection. It looks like the
        old code here and skipped over the parent as a possible match.
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::nextInPreOrderAfterChildren):

2008-12-01  Brent Fulgham  <bfulgham@gmail.com>

        Reviewed by Adam Roben.

        Add WML related files to Visual Studio projects.
        https://bugs.webkit.org/show_bug.cgi?id=22561

        * WebCore.vcproj/WebCore.vcproj:
          1. Add files from the wml directory to the set of windows files.
          2. Extend include paths with new wml directory.
          3. Add new autogenerated WML files to DerivedSources.
          4. Alphabetize preprocesor includes (holdover from earlier debugging).

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

        Revise node/selection image fix.
        Moved updateLayout call so selection rect is fetched after the layout.

        Reviewed by Adam Roben.

        * page/win/FrameCGWin.cpp:
        (WebCore::imageFromRect):
        (WebCore::imageFromSelection):
        (WebCore::Frame::nodeImage):

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

        Support needed to implement renderedImage for Windows.
        https://bugs.webkit.org/show_bug.cgi?25648

        Reviewed by Adam Roben.

        * page/Frame.h:
        * page/win/FrameCGWin.cpp:
        (WebCore::imageFromRect):
        (WebCore::imageFromSelection):
        (WebCore::Frame::nodeImage):
        * page/win/FrameCairoWin.cpp:
        (WebCore::imageFromNode):

2008-12-01  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein

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

        Fix the painting of the caps lock indicator for transformed text inputs,
        by replacing a call to absoluteContentBox() with code that computes the
        painting rect for the input contents.

        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::paint):

2008-12-01  Nikolas Zimmermann  <nikolas.zimmermann@torchmobile.com>

        Reviewed by George Staikos.

        Add two new helper functions to WMLElement, parseValueSubstitutingVariableReferences/parseValueForbiddingVariableReferences.

        Convert all elements to parse their attribute values using these new helper functions. This simplifies the
        actual attribute parsing code in all WMLElement derived classes, as most WML attribute values either report
        an error if there's a variable reference used in the attribute value, or if it's invalid.

        Split the WMLErrorInvalidVariableReference error which covered both 'invalid syntax' / 'wrong location'
        in two seperated error codes: WMLErrorInvalidVariableReference / WMLErrorInvalidVariableReferenceLocation.

        * wml/WMLAccessElement.cpp:
        (WebCore::WMLAccessElement::parseMappedAttribute):
        * wml/WMLDoElement.cpp:
        (WebCore::WMLDoElement::defaultEventHandler):
        (WebCore::WMLDoElement::parseMappedAttribute):
        * wml/WMLElement.cpp:
        (WebCore::WMLElement::parseValueSubstitutingVariableReferences):
        (WebCore::WMLElement::parseValueForbiddingVariableReferences):
        * wml/WMLElement.h:
        * wml/WMLErrorHandling.cpp:
        (WebCore::reportWMLError):
        * wml/WMLErrorHandling.h:
        (WebCore::):
        * wml/WMLOnEventElement.cpp:
        (WebCore::WMLOnEventElement::parseMappedAttribute):
        * wml/WMLPrevElement.cpp:
        (WebCore::WMLPrevElement::executeTask):
        * wml/WMLSetvarElement.cpp:
        (WebCore::WMLSetvarElement::parseMappedAttribute):
        * wml/WMLTimerElement.cpp:
        (WebCore::WMLTimerElement::parseMappedAttribute):

2008-12-01  Nikolas Zimmermann  <nikolas.zimmermann@torchmobile.com>

        Reviewed by George Staikos.

        Fix switching active cards within a document. No way to test, until <go> support is implemented.

        * wml/WMLCardElement.cpp:
        (WebCore::WMLCardElement::showCard):
        (WebCore::WMLCardElement::hideCard):
        (WebCore::WMLCardElement::setActiveCardInDocument):
        * wml/WMLCardElement.h:

2008-12-01  David Kilzer  <ddkilzer@apple.com>

        Fix logic error in LegacyWebArchive::create() from r38884.

        * loader/archive/cf/LegacyWebArchive.cpp:
        (WebCore::LegacyWebArchive::create): Only continue if the
        subresource is actually added.

2008-12-01  David Kilzer  <ddkilzer@apple.com>

        Bug 22466: REGRESSION (35867): Many resources missing when saving webarchive of webkit.org

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

        Reviewed by Brady Eidson.

        Test: http/tests/webarchive/test-preload-resources.html

        * loader/archive/cf/LegacyWebArchive.cpp:
        (WebCore::LegacyWebArchive::create): Check the WebCore cache for
        resources if DocumentLoader::subresource() doesn't return them.
        Note that the DocumentLoader::subresource() method returned
        preloaded resources before r35867, but this caused a regression in
        Mail.

2008-12-01  Julien Chaffraix  <jchaffraix@webkit.org>

        Reviewed by Eric Seidel.

        Bug 22564: Make HTML elements' constructors take a QualifiedName
        https://bugs.webkit.org/show_bug.cgi?id=22564

        - Modified the remaining HTML elements' constructors to take a QualifiedName.

        - Added an assertion that the QualifiedName given corresponds to the element constructed.

        * bindings/js/JSAudioConstructor.cpp:
        (WebCore::constructAudio):
        * html/HTMLAudioElement.cpp:
        (WebCore::HTMLAudioElement::HTMLAudioElement):
        * html/HTMLAudioElement.h:
        * html/HTMLBRElement.cpp:
        (WebCore::HTMLBRElement::HTMLBRElement):
        * html/HTMLBRElement.h:
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::setInnerText):
        * html/HTMLElementFactory.cpp:
        (WebCore::brConstructor):
        (WebCore::quoteConstructor):
        (WebCore::marqueeConstructor):
        (WebCore::audioConstructor):
        (WebCore::videoConstructor):
        (WebCore::sourceConstructor):
        * html/HTMLMarqueeElement.cpp:
        (WebCore::HTMLMarqueeElement::HTMLMarqueeElement):
        * html/HTMLMarqueeElement.h:
        * html/HTMLQuoteElement.cpp:
        (WebCore::HTMLQuoteElement::HTMLQuoteElement):
        * html/HTMLQuoteElement.h:
        * html/HTMLSourceElement.cpp:
        (WebCore::HTMLSourceElement::HTMLSourceElement):
        * html/HTMLSourceElement.h:
        * html/HTMLVideoElement.cpp:
        (WebCore::HTMLVideoElement::HTMLVideoElement):
        * html/HTMLVideoElement.h:
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::updateFromElement):

2008-12-01  Julien Chaffraix  <jchaffraix@webkit.org>

        Reviewed by Antti Koivisto.

        Bug 22441: Bridge the gap between the generated ElementFactory and HTMLElementFactory
        https://bugs.webkit.org/show_bug.cgi?id=22441

        Add an assertion to the modified HTML elements' constructor
        to check that the QualifiedName parameter is the one that
        matches the Element's.

        * html/HTMLBaseElement.cpp:
        (WebCore::HTMLBaseElement::HTMLBaseElement):
        * html/HTMLBlockquoteElement.cpp:
        (WebCore::HTMLBlockquoteElement::HTMLBlockquoteElement):
        * html/HTMLBodyElement.cpp:
        (WebCore::HTMLBodyElement::HTMLBodyElement):
        * html/HTMLButtonElement.cpp:
        (WebCore::HTMLButtonElement::HTMLButtonElement):
        * html/HTMLDListElement.cpp:
        (WebCore::HTMLDListElement::HTMLDListElement):
        * html/HTMLDirectoryElement.cpp:
        (WebCore::HTMLDirectoryElement::HTMLDirectoryElement):
        * html/HTMLDivElement.cpp:
        (WebCore::HTMLDivElement::HTMLDivElement):
        * html/HTMLFieldSetElement.cpp:
        (WebCore::HTMLFieldSetElement::HTMLFieldSetElement):
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::HTMLFormElement):
        * html/HTMLFrameElement.cpp:
        (WebCore::HTMLFrameElement::HTMLFrameElement):
        * html/HTMLFrameSetElement.cpp:
        (WebCore::HTMLFrameSetElement::HTMLFrameSetElement):
        * html/HTMLHeadElement.cpp:
        (WebCore::HTMLHeadElement::HTMLHeadElement):
        * html/HTMLHtmlElement.cpp:
        (WebCore::HTMLHtmlElement::HTMLHtmlElement):
        * html/HTMLIFrameElement.cpp:
        (WebCore::HTMLIFrameElement::HTMLIFrameElement):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::HTMLInputElement):
        * html/HTMLIsIndexElement.cpp:
        (WebCore::HTMLIsIndexElement::HTMLIsIndexElement):
        * html/HTMLKeygenElement.cpp:
        (WebCore::HTMLKeygenElement::HTMLKeygenElement):
        * html/HTMLLIElement.cpp:
        (WebCore::HTMLLIElement::HTMLLIElement):
        * html/HTMLLabelElement.cpp:
        (WebCore::HTMLLabelElement::HTMLLabelElement):
        * html/HTMLLegendElement.cpp:
        (WebCore::HTMLLegendElement::HTMLLegendElement):
        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::HTMLLinkElement):
        * html/HTMLMenuElement.cpp:
        (WebCore::HTMLMenuElement::HTMLMenuElement):
        * html/HTMLMetaElement.cpp:
        (WebCore::HTMLMetaElement::HTMLMetaElement):
        * html/HTMLOListElement.cpp:
        (WebCore::HTMLOListElement::HTMLOListElement):
        * html/HTMLOptGroupElement.cpp:
        (WebCore::HTMLOptGroupElement::HTMLOptGroupElement):
        * html/HTMLOptionElement.cpp:
        (WebCore::HTMLOptionElement::HTMLOptionElement):
        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::HTMLSelectElement):
        * html/HTMLStyleElement.cpp:
        (WebCore::HTMLStyleElement::HTMLStyleElement):
        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::HTMLTextAreaElement):
        * html/HTMLTitleElement.cpp:
        (WebCore::HTMLTitleElement::HTMLTitleElement):
        * html/HTMLUListElement.cpp:
        (WebCore::HTMLUListElement::HTMLUListElement):

2008-12-01  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Darin Adler.

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

        Fixed another case of crashing because the animation object is getting deleted when
        it's in the middle of a callback. I actually moved where I am retaining the pointer
        up out of the lower level AnimationBase code and into the timer callback that calls
        them. So now the pointer is valid throughout the entire sequence of callback code.

        The testcase for https://bugs.webkit.org/show_bug.cgi?id=22052 also exhibits a
        crash which this patch fixes.

        * page/animation/AnimationBase.cpp:
        (WebCore::AnimationBase::updateStateMachine):
        (WebCore::AnimationBase::animationTimerCallbackFired):
        * page/animation/CompositeAnimation.cpp:
        (WebCore::CompositeAnimationPrivate::setAnimationStartTime):
        (WebCore::CompositeAnimationPrivate::setTransitionStartTime):
        (WebCore::CompositeAnimationPrivate::styleAvailable):
        * page/animation/ImplicitAnimation.cpp:
        (WebCore::ImplicitAnimation::sendTransitionEvent):
        * page/animation/KeyframeAnimation.cpp:
        (WebCore::KeyframeAnimation::sendAnimationEvent):
        (WebCore::KeyframeAnimation::resumeOverriddenAnimations):

2008-12-01  Tor Arne Vestbø  <tavestbo@trolltech.com>

        Reviewed by Simon Hausmann.

        [Qt/Mac] Initialize NPAPI plugins before getting their entry points

        The old behavior (calling NP_GetEntryPoints before NP_Initialize) was
        copied from Windows, but caused Silverlight on Mac to crash when loaded.

        Apparently the call order of NP_Initialize and NP_GetEntryPoints is
        reversed on Mac. See https://bugzilla.mozilla.org/show_bug.cgi?id=344425

        Reported-by: Peter Johnson <peter@zattoo.com>

        * plugins/mac/PluginPackageMac.cpp:
        (WebCore::PluginPackage::load):

2008-11-30  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by John Sullivan.

        https://bugs.webkit.org/show_bug.cgi?id=22510
        Crash at WebCore::AccessibilityRenderObject::activeDescendant() on Google Reader with ARIA (22510)

        A nil pointer needed to be checked

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

2008-11-30  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=22530
        Assertion failures seen on buildbot due to uninitialized WorkerThread::m_threadID

        * dom/WorkerThread.cpp:
        (WebCore::WorkerThread::start): Protect worker startup with a mutex to ensure that this
        function runs to completion before the thread begins execution.
        (WebCore::WorkerThread::workerThread): Updated comments.
        (WebCore::WorkerThread::stop): Ditto.
        * dom/WorkerThread.h: Renamed m_workerContextMutex to m_threadCreationMutex, because it now
        protects startup as a whole.

        * storage/DatabaseThread.cpp:
        * storage/DatabaseThread.h:
        * storage/LocalStorageThread.cpp:
        * storage/LocalStorageThread.h:
        Fixed the same m_threadID problem.

2008-11-29  Brent Fulgham  <bfulgham@gmail.com>

        Reviewed by Alexey Proskuryakov.

        Remove Visual Studio project dependencies on non-redistributable
        components in the Debug_Cairo and Release_Cairo build targets.
        See https://bugs.webkit.org/show_bug.cgi?id=22527

        * WebCore.vcproj/WebCore.vcproj:

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

        Rubber-stamped by Alexey Proskuryakov.

        Fix some sorting

        * WebCore.xcodeproj/project.pbxproj:

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

        Reviewed by Alexey Proskuryakov.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=21063
        NULL pointer crash in dispatchEvent(null);

        Test: fast/events/dispatchEvent-crash.html

        * dom/MessagePort.cpp:
        (WebCore::MessagePort::dispatchEvent):
        * dom/Worker.cpp:
        (WebCore::Worker::dispatchEvent):
        * dom/WorkerContext.cpp:
        (WebCore::WorkerContext::dispatchEvent):
        * loader/appcache/DOMApplicationCache.cpp:
        (WebCore::DOMApplicationCache::dispatchEvent):
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::dispatchEvent):
        * xml/XMLHttpRequestUpload.cpp:
        (WebCore::XMLHttpRequestUpload::dispatchEvent):

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

        Reviewed by Alexey Proskuryakov.

        - fix https://bugs.webkit.org/show_bug.cgi?id=22454
          <rdar://problem/6405550> REGRESSION (3.2-TOT): Crash below FontFallbackList::fontDataAt on jacobian.org

        Test: http/tests/misc/font-face-in-multiple-segmented-faces.html

        The crash happened because style recalculation was invoked by
        CSSFontSelector after one CSSSegmentedFontFace had pruned its tables but
        before another CSSSegmentedFontFace using the same CSSFontFace had done
        so. The fix is to let all CSSSegmentedFontFaces using the CSSFontFace
        prune their tables before telling the CSSFontSelector to recalc style.

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

2008-11-29  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=14968
        document.open() erroneously returns void instead of the new Document

        Test: fast/dom/HTMLDocument/document-open-return-value.html

        * bindings/js/JSHTMLDocumentCustom.cpp: (WebCore::JSHTMLDocument::open):
        Return the document on which this method was invoked, per HTML5.

2008-11-28  Nikolas Zimmermann  <nikolas.zimmermann@torchmobile.com>

        Reviewed by Cameron Zwarich.

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

        Add <timer> element support. It provides a way to execute a task with a delay.
        The user is notified by firing the task associated with the <card>'s ontimer attribute.
        Only one timer element is allowed per <card> (fix wrong error message in reportWMLError)

        * WebCore.xcodeproj/project.pbxproj:
        * wml/WMLCardElement.cpp:
        (WebCore::WMLCardElement::WMLCardElement):
        (WebCore::WMLCardElement::setIntrinsicEventTimer):
        (WebCore::WMLCardElement::handleIntrinsicEventIfNeeded):
        * wml/WMLCardElement.h:
        * wml/WMLDoElement.cpp:
        (WebCore::WMLDoElement::defaultEventHandler):
        * wml/WMLErrorHandling.cpp:
        (WebCore::reportWMLError):
        * wml/WMLPageState.h:
        (WebCore::WMLPageState::getVariable):
        * wml/WMLPrevElement.cpp:
        (WebCore::WMLPrevElement::executeTask):
        * wml/WMLRefreshElement.cpp:
        (WebCore::WMLRefreshElement::executeTask):
        * wml/WMLTagNames.in:
        * wml/WMLTimerElement.cpp: Added.
        (WebCore::WMLTimerElement::WMLTimerElement):
        (WebCore::WMLTimerElement::parseMappedAttribute):
        (WebCore::WMLTimerElement::insertedIntoDocument):
        (WebCore::WMLTimerElement::timerFired):
        (WebCore::WMLTimerElement::start):
        (WebCore::WMLTimerElement::stop):
        (WebCore::WMLTimerElement::storeIntervalToPageState):
        * wml/WMLTimerElement.h: Added.

2008-11-28  Nikolas Zimmermann  <nikolas.zimmermann@torchmobile.com>

        Reviewed by Holger Freyther.

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

        Add <do> element support. It provides a way to bind a task element to a <template>/<card> element.
        Changes numerous of layout tests which contain <do> elements, as they render as buttons now.

        * WebCore.xcodeproj/project.pbxproj:
        * rendering/RenderButton.cpp:
        (WebCore::RenderButton::updateFromElement):
        * wml/WMLCardElement.cpp:
        (WebCore::WMLCardElement::registerDoElement):
        * wml/WMLCardElement.h:
        * wml/WMLDoElement.cpp: Added.
        (WebCore::WMLDoElement::WMLDoElement):
        (WebCore::WMLDoElement::defaultEventHandler):
        (WebCore::WMLDoElement::parseMappedAttribute):
        (WebCore::WMLDoElement::insertedIntoDocument):
        (WebCore::WMLDoElement::createRenderer):
        (WebCore::WMLDoElement::recalcStyle):
        * wml/WMLDoElement.h: Added.
        (WebCore::WMLDoElement::registerTask):
        (WebCore::WMLDoElement::isActive):
        (WebCore::WMLDoElement::label):
        (WebCore::WMLDoElement::name):
        (WebCore::WMLDoElement::setActive):
        (WebCore::WMLDoElement::setNoop):
        * wml/WMLNoopElement.cpp:
        (WebCore::WMLNoopElement::insertedIntoDocument):
        * wml/WMLTagNames.in:
        * wml/WMLTaskElement.cpp:
        (WebCore::WMLTaskElement::insertedIntoDocument):

2008-11-28  Nikolas Zimmermann  <nikolas.zimmermann@torchmobile.com>

        Reviewed by Sam Weinig.

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

        Add onenterforward/onenterbackward/ontimer support for <card> elements.

        No testing possible at the moment because WMLGoElement is not yet implemented.
        After that we can add tests covering the <card> event handling.

        * wml/WMLCardElement.cpp:
        (WebCore::WMLCardElement::WMLCardElement):
        (WebCore::WMLCardElement::handleIntrinsicEventIfNeeded):
        (WebCore::WMLCardElement::parseMappedAttribute):
        (WebCore::WMLCardElement::setActiveCardInDocument):
        * wml/WMLCardElement.h:
        (WebCore::WMLCardElement::isNewContext):
        (WebCore::WMLCardElement::isOrdered):
        * wml/WMLDocument.cpp:
        (WebCore::WMLDocument::finishedParsing):
        * wml/WMLIntrinsicEvent.cpp:
        (WebCore::WMLIntrinsicEvent::WMLIntrinsicEvent):
        * wml/WMLIntrinsicEvent.h:
        (WebCore::WMLIntrinsicEvent::create):

2008-11-27  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Tor Arne Vestbø.

        Regression seen on QtWebKit - causes a build failure on Win using MinGW

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

        * WebCore.pro:

2008-11-28  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Tor Arne Vestbø.

        Fix compilation and linking on Windows CE.

        Use WIN_OS instead of WIN and therefore exclude determineModuleVersionFromDescription()
        from the Windows'ish build.

        Link against the newly required mmtimer.

        * WebCore.pro:
        * plugins/PluginPackage.cpp:

2008-11-28  David Levin  <levin@chromium.org>

        Reviewed by Alexey Proskuryakov.

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

        Made static initializations in XMLHttpRequest.cpp thread-safe in preparation for usage
        of XMLHttpRequest by Workers (on threads).

        No observable change in behavior, so no test.

        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequestStaticData::XMLHttpRequestStaticData):
        (WebCore::PreflightResultCacheItem::allowsCrossSiteMethod):
        (WebCore::PreflightResultCacheItem::allowsCrossSiteHeaders):
        (WebCore::PreflightResultCacheItem::allowsRequest):
        (WebCore::createXMLHttpRequestStaticData):
        (WebCore::initializeXMLHttpRequestStaticData):
        (WebCore::XMLHttpRequest::XMLHttpRequest):
        (WebCore::XMLHttpRequest::isSafeRequestHeader):
        (WebCore::XMLHttpRequest::isOnAccessControlResponseHeaderWhitelist):
        * xml/XMLHttpRequest.h:

2008-11-27  Cameron Zwarich  <zwarich@apple.com>

        Not reviewed.

        r38825, was committed without checking whether anything in WebCore
        uses JSFunction::m_body. Use the appropriate getters and setters
        instead.

        * inspector/JavaScriptDebugServer.cpp:
        (WebCore::JavaScriptDebugServer::recompileAllJSFunctions):

2008-11-27  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=22529
        Crashes seen on buildbots due to trying to stop a worker thread twice

        * dom/WorkerMessagingProxy.cpp: (WebCore::WorkerMessagingProxy::workerObjectDestroyed):
        Don't try to stop the thread if it's already stopping.

2008-11-27  Kent Hansen  <khansen@trolltech.com>

        Reviewed by Simon Hausmann.

        Make JavaScript bindings for Qt plugin widgets work again
        this was a regression; need to handle non-NPAPI plugins as in 4.4.

        * bindings/js/ScriptControllerQt.cpp:
        (WebCore::ScriptController::createScriptInstanceForWidget):

2008-11-26  Nikolas Zimmermann  <nikolas.zimmermann@torchmobile.com>

        Reviewed by George Staikos.

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

        Catch WML errors (invalid variable name/reference, multiple access elements, etc)
        while parsing the document, and stop parsing immediately and wrap the document
        fragment in a XHTML error document, just like it's done from XML parsing errors.

        Until now all card elements were hidden by default (no renderer created), and
        WMLDocument::finishedParsing() took care of showing the right card (either the first,
        or any named card in the document, specified by document URL reference). Change this
        behaviour to support displaying partially parsed WML document fragments: Mark the first
        WMLCardElement inserted into the document as visible. If the document parsing finishes
        without problems, WMLDocument::finishedParsing() will be called, which takes care of
        showing the desired card (common case: first card in the document, which is already
        visible, so nothing actually has to be done). If an error occours, the document is
        correctly rendered until the error happened - wrapped in a XHTML document.

        Fixes: fast/wml/err-event-binding-conflict.wml
               fast/wml/err-invalid-variable-name.wml
               fast/wml/err-multi-access.wml
               fast/wml/err-unallowed-task-in-anchor.wml

        * WebCore.xcodeproj/project.pbxproj:
        * wml/WMLAccessElement.cpp:
        (WebCore::WMLAccessElement::parseMappedAttribute):
        (WebCore::WMLAccessElement::insertedIntoDocument):
        * wml/WMLAccessElement.h:
        * wml/WMLCardElement.cpp:
        (WebCore::WMLCardElement::insertedIntoDocument):
        (WebCore::WMLCardElement::setActiveCardInDocument):
        * wml/WMLCardElement.h:
        * wml/WMLDocument.cpp:
        (WebCore::WMLDocument::finishedParsing):
        * wml/WMLErrorHandling.cpp: Added.
        (WebCore::reportWMLError):
        * wml/WMLErrorHandling.h: Added.
        (WebCore::):
        * wml/WMLIntrinsicEventHandler.cpp:
        (WebCore::WMLIntrinsicEventHandler::registerIntrinsicEvent):
        * wml/WMLIntrinsicEventHandler.h:
        * wml/WMLNoopElement.cpp:
        (WebCore::WMLNoopElement::insertedIntoDocument):
        * wml/WMLOnEventElement.cpp:
        (WebCore::WMLOnEventElement::parseMappedAttribute):
        (WebCore::WMLOnEventElement::registerTask):
        * wml/WMLPageState.cpp:
        (WebCore::WMLPageState::setNeedCheckDeckAccess):
        * wml/WMLPageState.h:
        * wml/WMLSetvarElement.cpp:
        (WebCore::WMLSetvarElement::parseMappedAttribute):

2008-11-26  Glenn Wilson  <gwilson@chromium.org>

        Reviewed by Dan Bernstein.

        Fixed bug http://bugs.webkit.org/show_bug.cgi?id=21953

        This fixes the crash when the small-caps font variant is used
        on a lower-case glyph that does not have a corresponding
        upper-case glyph defined in the set of available fonts.

        This changes Font.cpp to check if the font being used exists before trying to apply the small-caps variant.

        Test: fast/css/small-caps-crash.html

        * platform/graphics/Font.cpp:
        (WebCore::Font::glyphDataForCharacter):

2008-11-26  Tony Chang  <tony@chromium.org>

        Reviewed by Oliver Hunt.

        Add a new platform specific method cleanupAfterSystemDrag
        that platforms can ue to clean up drag state after a
        system drag.  Use this method on PLAFORM(MAC).
        https://bugs.webkit.org/show_bug.cgi?id=21956

        * ChangeLog:
        * page/DragController.cpp:
        (WebCore::DragController::doSystemDrag):
        * page/DragController.h:
        * page/gtk/DragControllerGtk.cpp:
        (WebCore::DragController::cleanupAfterSystemDrag):
        * page/mac/DragControllerMac.mm:
        (WebCore::DragController::cleanupAfterSystemDrag):
        * page/qt/DragControllerQt.cpp:
        (WebCore::DragController::cleanupAfterSystemDrag):
        * page/win/DragControllerWin.cpp:
        (WebCore::DragController::cleanupAfterSystemDrag):
        * page/wx/DragControllerWx.cpp:
      (WebCore::DragController::cleanupAfterSystemDrag):

2008-11-26  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Oliver Hunt.

        Fix path to string logic, correctly taking closed (sub-)paths into account.
        Code was just broken on cg, observed by Dirk Schulze.

        QPainterPath doesn't seem to expose any functionality to detect closed sub paths,
        using the elementAt() function. There might be a workaround - Dirk will investigate.

        * platform/graphics/cg/PathCG.cpp:
        (WebCore::CGPathToCFStringApplierFunction):
        * platform/graphics/cairo/PathCairo.cpp:
        (WebCore::Path::debugString):

2008-11-26  Darin Fisher  <darin@chromium.org>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=22519
        Remove unnecessary include.

        * dom/XMLTokenizer.cpp:

2008-11-26  Nikolas Zimmermann  <nikolas.zimmermann@torchmobile.com>

        Reviewed by Oliver Hunt.

        Add <noop> element support, completing the task element support.

        * WebCore.xcodeproj/project.pbxproj:
        * wml/WMLNoopElement.cpp: Added.
        (WebCore::WMLNoopElement::WMLNoopElement):
        (WebCore::WMLNoopElement::insertedIntoDocument):
        * wml/WMLNoopElement.h: Added.
        * wml/WMLTagNames.in: Reorganize file a bit.

2008-11-26  Julien Chaffraix  <jchaffraix@webkit.org>

        Reviewed by Eric Seidel.

        Bug 22441: Bridge the gap between the generated ElementFactory and HTMLElementFactory
        https://bugs.webkit.org/show_bug.cgi?id=22441

        Make more HTML elements' constructors take a QualifiedName.

        * editing/DeleteButtonController.cpp:
        (WebCore::DeleteButtonController::createDeletionUI):
        * html/HTMLBlockquoteElement.cpp:
        (WebCore::HTMLBlockquoteElement::HTMLBlockquoteElement):
        * html/HTMLBlockquoteElement.h:
        * html/HTMLButtonElement.cpp:
        (WebCore::HTMLButtonElement::HTMLButtonElement):
        * html/HTMLButtonElement.h:
        * html/HTMLDListElement.cpp:
        (WebCore::HTMLDListElement::HTMLDListElement):
        * html/HTMLDListElement.h:
        * html/HTMLDirectoryElement.cpp:
        (WebCore::HTMLDirectoryElement::HTMLDirectoryElement):
        * html/HTMLDirectoryElement.h:
        * html/HTMLDivElement.cpp:
        (WebCore::HTMLDivElement::HTMLDivElement):
        * html/HTMLDivElement.h:
        * html/HTMLElementFactory.cpp:
        (WebCore::styleConstructor):
        (WebCore::titleConstructor):
        (WebCore::frameConstructor):
        (WebCore::framesetConstructor):
        (WebCore::iframeConstructor):
        (WebCore::formConstructor):
        (WebCore::buttonConstructor):
        (WebCore::inputConstructor):
        (WebCore::isindexConstructor):
        (WebCore::fieldsetConstructor):
        (WebCore::keygenConstructor):
        (WebCore::labelConstructor):
        (WebCore::legendConstructor):
        (WebCore::optgroupConstructor):
        (WebCore::optionConstructor):
        (WebCore::selectConstructor):
        (WebCore::textareaConstructor):
        (WebCore::dlConstructor):
        (WebCore::ulConstructor):
        (WebCore::olConstructor):
        (WebCore::dirConstructor):
        (WebCore::menuConstructor):
        (WebCore::liConstructor):
        (WebCore::blockquoteConstructor):
        (WebCore::divConstructor):
        (WebCore::headingConstructor):
        * html/HTMLFieldSetElement.cpp:
        (WebCore::HTMLFieldSetElement::HTMLFieldSetElement):
        * html/HTMLFieldSetElement.h:
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::HTMLFormElement):
        * html/HTMLFormElement.h:
        * html/HTMLFrameElement.cpp:
        (WebCore::HTMLFrameElement::HTMLFrameElement):
        * html/HTMLFrameElement.h:
        * html/HTMLFrameSetElement.cpp:
        (WebCore::HTMLFrameSetElement::HTMLFrameSetElement):
        * html/HTMLFrameSetElement.h:
        * html/HTMLIFrameElement.cpp:
        (WebCore::HTMLIFrameElement::HTMLIFrameElement):
        * html/HTMLIFrameElement.h:
        * html/HTMLInputElement.cpp:
        * html/HTMLInputElement.h:
        * html/HTMLIsIndexElement.cpp:
        (WebCore::HTMLIsIndexElement::HTMLIsIndexElement):
        * html/HTMLIsIndexElement.h:
        * html/HTMLKeygenElement.cpp:
        (WebCore::HTMLKeygenElement::HTMLKeygenElement):
        * html/HTMLKeygenElement.h:
        * html/HTMLLIElement.cpp:
        (WebCore::HTMLLIElement::HTMLLIElement):
        * html/HTMLLIElement.h:
        * html/HTMLLabelElement.cpp:
        (WebCore::HTMLLabelElement::HTMLLabelElement):
        * html/HTMLLabelElement.h:
        * html/HTMLLegendElement.cpp:
        (WebCore::HTMLLegendElement::HTMLLegendElement):
        * html/HTMLLegendElement.h:
        * html/HTMLMenuElement.cpp:
        (WebCore::HTMLMenuElement::HTMLMenuElement):
        * html/HTMLMenuElement.h:
        * html/HTMLOListElement.cpp:
        (WebCore::HTMLOListElement::HTMLOListElement):
        * html/HTMLOListElement.h:
        * html/HTMLOptGroupElement.cpp:
        (WebCore::HTMLOptGroupElement::HTMLOptGroupElement):
        * html/HTMLOptGroupElement.h:
        * html/HTMLOptionElement.cpp:
        (WebCore::HTMLOptionElement::HTMLOptionElement):
        * html/HTMLOptionElement.h:
        * html/HTMLParser.cpp:
        (WebCore::HTMLParser::formCreateErrorCheck):
        (WebCore::HTMLParser::handleIsindex):
        * html/HTMLSelectElement.cpp:
        * html/HTMLSelectElement.h:
        * html/HTMLStyleElement.cpp:
        (WebCore::HTMLStyleElement::HTMLStyleElement):
        * html/HTMLStyleElement.h:
        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::HTMLTextAreaElement):
        * html/HTMLTextAreaElement.h:
        * html/HTMLTitleElement.cpp:
        (WebCore::HTMLTitleElement::HTMLTitleElement):
        * html/HTMLTitleElement.h:
        * html/HTMLUListElement.cpp:
        (WebCore::HTMLUListElement::HTMLUListElement):
        * html/HTMLUListElement.h:
        * html/HTMLViewSourceDocument.cpp:
        (WebCore::HTMLViewSourceDocument::createContainingTable):
        * rendering/MediaControlElements.cpp:
        (WebCore::MediaControlShadowRootElement::MediaControlShadowRootElement):
        (WebCore::MediaControlInputElement::MediaControlInputElement):
        * rendering/RenderFileUploadControl.cpp:
        (WebCore::HTMLFileUploadInnerButtonElement::HTMLFileUploadInnerButtonElement):
        * rendering/RenderMedia.cpp:
        (WebCore::RenderMedia::createPanel):
        (WebCore::RenderMedia::createTimeDisplay):
        * rendering/RenderSlider.cpp:
        (WebCore::HTMLSliderThumbElement::HTMLSliderThumbElement):
        * rendering/TextControlInnerElements.cpp:
        (WebCore::TextControlInnerElement::TextControlInnerElement):

2008-11-26  Nikolas Zimmermann  <nikolas.zimmermann@torchmobile.com>

        Reviewed by Sam Weinig.

        Fix obvious problem in WMLPageState constructor, m_page was not set to the passed Page pointer.

        * wml/WMLPageState.cpp:
        (WebCore::WMLPageState::WMLPageState):

2008-11-26  Matt Perry  <mpcomplete@gmail.com>

        Fix Qt bustage.

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

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

2008-11-26  Matt Perry  <mpcomplete@gmail.com>

        Reviewed by Maciej Stachowiak.

        Fix https://bugs.webkit.org/show_bug.cgi?id=22051
        Renderthemes should be able to supply additional CSS rules to the core
        ones.

        * DerivedSources.make:
        * css/CSSStyleSelector.cpp:
        (WebCore::parseUASheet):
        (WebCore::loadFullDefaultStyle):
        (WebCore::loadSimpleDefaultStyle):
        * css/themeWin.css: Added.
        * css/themeWinQuirks.css: Added.
        * platform/qt/RenderThemeQt.cpp:
        (WebCore::RenderThemeQt::extraDefaultStyleSheet):
        * platform/qt/RenderThemeQt.h:
        * rendering/RenderTheme.cpp:
        * rendering/RenderTheme.h:
        (WebCore::RenderTheme::extraDefaultStyleSheet):
        (WebCore::RenderTheme::extraQuirksStyleSheet):
        * rendering/RenderThemeWin.cpp:
        (WebCore::RenderThemeWin::extraDefaultStyleSheet):
        (WebCore::RenderThemeWin::extraQuirksStyleSheet):
        * rendering/RenderThemeWin.h:

2008-11-26  David Kilzer  <ddkilzer@apple.com>

        Make CSSStyleSheet::addSubresourceURLStrings() iterative

        Part of the fix for Bug 11850: Webarchive fails to save images referenced in CSS
        <https://bugs.webkit.org/show_bug.cgi?id=11850>

        Reviewed by Brady Eidson.

        * css/CSSStyleSheet.cpp:
        (WebCore::CSSStyleSheet::addSubresourceURLStrings): Switch algorithm
        from recursive to iterative for gathering the list of all CSS
        stylesheets referenced in @import statements.

2008-11-26  Dirk Schulze  <krit@webkit.org>

        Reviewed by Simon Hausmann.

        Transformations to the context shouldn't transform the currentPath.
        Fixed this on Qt.

        [QT] GraphicsContext's currenPath can be transformed
        https://bugs.webkit.org/show_bug.cgi?id=22163

        * platform/graphics/GraphicsContextPrivate.h:
        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::GraphicsContext::restorePlatformState):
        (WebCore::GraphicsContext::fillPath):
        (WebCore::GraphicsContext::strokePath):
        (WebCore::GraphicsContext::fillRect):
        (WebCore::GraphicsContext::translate):
        (WebCore::GraphicsContext::rotate):
        (WebCore::GraphicsContext::scale):
        (WebCore::GraphicsContext::concatCTM):

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

        Gtk build script minor fixes. Not reviewed.

        * GNUmakefile.am:
          - Add ScriptInstance.h (introduced in r38774) to
        the build.
          - Move WML and GEOLOCATION conditionals before the SVG
        conditional to be consistent with the style of the script.
          - Move GeolocationGtk sources to webcoregtk_sources.

2008-11-26  Dmitry Titov  <dimich@chromium.org>

        Reviewed by Darin Adler and Eric Seidel.

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

        Move the class DOMWindowTimer from JSDOMWindowBase into its own file in
        preparation to making it work for Workers. For now, just move the code and couple
        of global variables.

        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::installTimeout):
        (WebCore::JSDOMWindowBase::pauseTimeouts):
        (WebCore::JSDOMWindowBase::resumeTimeouts):
        (WebCore::JSDOMWindowBase::timerFired):
        * bindings/js/JSDOMWindowBase.h:
        * bindings/js/DOMTimer.cpp: Added.
        (WebCore::DOMTimer::DOMTimer):
        (WebCore::DOMTimer::~DOMTimer):
        (WebCore::DOMTimer::fired):
        * bindings/js/DOMTimer.h: Added.
        (WebCore::DOMTimer::timeoutId):
        (WebCore::DOMTimer::nestingLevel):
        (WebCore::DOMTimer::setNestingLevel):
        (WebCore::DOMTimer::action):
        (WebCore::DOMTimer::takeAction):

2008-11-25  Darin Fisher  <darin@chromium.org>

        Fix bustage.

        https://bugs.webkit.org/show_bug.cgi?id=22493
        Need to expose bridge/*.h to the WebKit build.

        * WebCore.vcproj/WebCore.vcproj:

2008-11-25  Nikolas Zimmermann  <nikolas.zimmermann@torchmobile.com>

        Not reviewed. Fix build, by removing some wrong last-minute changes.

        * wml/WMLIntrinsicEvent.cpp:
        (WebCore::createTaskElement):
        * wml/WMLOnEventElement.cpp:
        (WebCore::WMLOnEventElement::registerTask):

2008-11-25  Darin Fisher  <darin@chromium.org>

        Reviewed by Geoffrey Garen.

        https://bugs.webkit.org/show_bug.cgi?id=22493
        Abstract away JSC:: usage in WebCore/html

        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSPluginElementFunctions.cpp:
        (WebCore::pluginInstance):
        * bindings/js/ScriptController.h:
        * bindings/js/ScriptControllerMac.mm:
        (WebCore::ScriptController::createScriptInstanceForWidget):
        * bindings/js/ScriptInstance.h: Added.
        * html/HTMLPlugInElement.cpp:
        (WebCore::HTMLPlugInElement::~HTMLPlugInElement):
        (WebCore::HTMLPlugInElement::getInstance):
        * html/HTMLPlugInElement.h:

2008-11-24  Nikolas Zimmermann  <nikolas.zimmermann@torchmobile.com>

        Reviewed by Sam Weinig.

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

        A WMLTaskElement checks wheter it's parent is an <anchor>/<do>/<onevent> element, and calls registerTask(this) on the parent.
        Add a isWMLTaskElement() function to WMLElement, making it possible to cast to WMLTaskElement directly.

        Add WMLEventHandlingElement class, inheriting from WMLElement, to serve as common base WMLTemplate/Option/CardElement,
        centralizing the eventHandler() / createEventHandlerIfNeeded() implementation. Add a isWMLEventHandlingElement()
        function to WMLElement, so WMLOnEventElement can create event handlers, without knowing wheter it's a
        <template>/<option> or <card> element.

        Add complete <onevent> support.

        * WebCore.xcodeproj/project.pbxproj:
        * wml/WMLCardElement.cpp:
        (WebCore::WMLCardElement::WMLCardElement):
        (WebCore::WMLCardElement::setActiveCardInDocument):
        * wml/WMLCardElement.h:
        (WebCore::WMLCardElement::isVisible):
        (WebCore::WMLCardElement::setVisible):
        * wml/WMLElement.h:
        (WebCore::WMLElement::isWMLTaskElement):
        * wml/WMLEventHandlingElement.cpp: Added.
        (WebCore::WMLEventHandlingElement::WMLEventHandlingElement):
        (WebCore::WMLEventHandlingElement::createEventHandlerIfNeeded):
        * wml/WMLEventHandlingElement.h: Added.
        (WebCore::WMLEventHandlingElement::isWMLEventHandlingElement):
        (WebCore::WMLEventHandlingElement::eventHandler):
        * wml/WMLOnEventElement.cpp: Added.
        (WebCore::WMLOnEventElement::WMLOnEventElement):
        (WebCore::WMLOnEventElement::parseMappedAttribute):
        (WebCore::WMLOnEventElement::registerTask):
        * wml/WMLOnEventElement.h: Added.
        * wml/WMLSetvarElement.cpp:
        (WebCore::WMLSetvarElement::parseMappedAttribute):
        (WebCore::WMLSetvarElement::insertedIntoDocument):
        * wml/WMLTagNames.in:
        * wml/WMLTaskElement.cpp:
        (WebCore::WMLTaskElement::insertedIntoDocument):
        * wml/WMLTaskElement.h:
        (WebCore::WMLTaskElement::isWMLTaskElement):

2008-11-25  Pierre-Olivier Latour  <pol@apple.com>

        Reviewed by Mark Rowe.

        createFontCustomPlatformData() crashes if CGFontCreateWithPlatformFont() returns NULL

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

        * platform/graphics/mac/FontCustomPlatformData.cpp:
        (WebCore::createFontCustomPlatformData):

2008-11-25  Julien Chaffraix  <jchaffraix@webkit.org>

        Reviewed by Eric Seidel.

        Bug 22441: Bridge the gap between the generated ElementFactory and HTMLElementFactory
        https://bugs.webkit.org/show_bug.cgi?id=22441

        Element's other than HTML ones take a QualifiedName in their constructors.
        To make HTMLElementFactory closer to the other ElementFactory, we need
        to make them take the same arguments.
        This patch only makes the 5 first one in HTMLElementFactory abide by that. The others
        will go into the next patch.

        * dom/Document.cpp:
        (WebCore::Document::implicitClose):
        * html/HTMLBaseElement.cpp:
        (WebCore::HTMLBaseElement::HTMLBaseElement):
        * html/HTMLBaseElement.h:
        * html/HTMLBodyElement.cpp:
        (WebCore::HTMLBodyElement::HTMLBodyElement):
        * html/HTMLBodyElement.h:
        * html/HTMLElementFactory.cpp:
        (WebCore::htmlConstructor):
        (WebCore::headConstructor):
        (WebCore::bodyConstructor):
        (WebCore::baseConstructor):
        (WebCore::linkConstructor):
        (WebCore::metaConstructor):
        * html/HTMLHeadElement.cpp:
        (WebCore::HTMLHeadElement::HTMLHeadElement):
        * html/HTMLHeadElement.h:
        * html/HTMLHtmlElement.cpp:
        (WebCore::HTMLHtmlElement::HTMLHtmlElement):
        * html/HTMLHtmlElement.h:
        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::HTMLLinkElement):
        * html/HTMLLinkElement.h:
        * html/HTMLMetaElement.cpp:
        (WebCore::HTMLMetaElement::HTMLMetaElement):
        * html/HTMLMetaElement.h:
        * html/HTMLParser.cpp:
        (WebCore::HTMLParser::handleError):
        (WebCore::HTMLParser::headCreateErrorCheck):
        (WebCore::HTMLParser::createHead):
        (WebCore::HTMLParser::finished):
        * html/HTMLViewSourceDocument.cpp:
        (WebCore::HTMLViewSourceDocument::createContainingTable):

2008-11-25  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Dan Bernstein.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=22487
        I was not checking for the case of 0 length keyframe lists and dereffing a null pointer.

        Tests: animations/empty-keyframes.html
               animations/fill-unset-properties.html

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

2008-11-25  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Darin Adler

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

        Fix a crash when an animation or transition end event handler
        removes the element upon which the transition/animation is running,
        by keeping a reference to the AnimationBase object on the stack.

        Tests: animations/transform-animation-event-destroy-element.html
               transitions/transform-transition-event-destroy-element.html

        * page/animation/AnimationBase.cpp:
        (WebCore::AnimationBase::setChanged):
        (WebCore::AnimationBase::updateStateMachine):
        * page/animation/AnimationBase.h:
        (WebCore::AnimationBase::clearRenderer):
        * page/animation/AnimationController.cpp:
        (WebCore::AnimationControllerPrivate::clear):
        * page/animation/CompositeAnimation.cpp:
        (WebCore::CompositeAnimationPrivate::~CompositeAnimationPrivate):
        * page/animation/CompositeAnimation.h:

2008-11-25  Kevin Ollivier  <kevino@theolliviers.com>

        Better wx build fix - support PurgeableBuffer on Mac.

        * platform/PurgeableBuffer.h:
        * webcore-wx.bkl:

2008-11-25  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by David Kilzer.

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

        Add GeoleocationServiceGtk stubs and integrate it into the buildsystem

        Add stubs for a Gtk Implementation.

        * GNUmakefile.am:
        * platform/gtk/GeolocationServiceGtk.cpp: Added.
        (WebCore::GeolocationService::create):
        (WebCore::GeolocationServiceGtk::GeolocationServiceGtk):
        (WebCore::GeolocationServiceGtk::startUpdating):
        (WebCore::GeolocationServiceGtk::stopUpdating):
        (WebCore::GeolocationServiceGtk::suspend):
        (WebCore::GeolocationServiceGtk::resume):
        (WebCore::GeolocationServiceGtk::lastPosition):
        (WebCore::GeolocationServiceGtk::lastError):
        * platform/gtk/GeolocationServiceGtk.h: Added.

2008-11-25  Kevin Ollivier  <kevino@theolliviers.com>

        wx build fix - we don't support PurgeableBuffer on Leopard for now.

        * platform/PurgeableBuffer.h:

2008-11-25  Antti Koivisto  <antti@apple.com>

        Reviewed by Mark Rowe.

        Fix https://bugs.webkit.org/show_bug.cgi?id=22483
        Assertion failure in CachedResource::makePurgeable during layout tests

        Deleting SVG image can re-enter destroyDecodedData.

        * loader/CachedImage.cpp:
        (WebCore::CachedImage::destroyDecodedData):

2008-11-25  David Levin  <levin@chromium.org>

        Reviewed by Alexey Proskuryakov.

        https://bugs.webkit.org/show_bug.cgi?id=22443
        Made the PreflightResultCache thread-safe in preparation for usage of XMLHttpRequest by
        Workers on threads.

        No observable change in behavior, so no test.

        * platform/text/PlatformString.h:
        * platform/text/String.cpp:
        (WebCore::String::substringCopy):
        * platform/text/StringImpl.cpp:
        (WebCore::StringImpl::substringCopy):
        * platform/text/StringImpl.h:
        Added the ability to copy a substring.

        * xml/XMLHttpRequest.cpp:
        (WebCore::PreflightResultCacheItem::PreflightResultCacheItem):
        (WebCore::PreflightResultCache::PreflightResultCache):
        (WebCore::PreflightResultCacheItem::addToAccessControlAllowList):
        (WebCore::PreflightResultCacheItem::parseAccessControlAllowList):
        (WebCore::PreflightResultCacheItem::parseAccessControlMaxAge):
        (WebCore::PreflightResultCacheItem::parse):
        (WebCore::PreflightResultCacheItem::allowsRequest):
        (WebCore::PreflightResultCache::shared):
        (WebCore::PreflightResultCache::appendEntry):
        (WebCore::PreflightResultCache::canSkipPreflight):
        (WebCore::XMLHttpRequest::makeCrossSiteAccessRequestWithPreflight):
        (WebCore::XMLHttpRequest::didReceiveResponsePreflight):
        Made the PreflightResultCache threadsafe.

        (WebCore::PreflightResultCacheItem::allowsCrossSiteMethod):
        (WebCore::PreflightResultCacheItem::allowsCrossSiteHeaders):
        Consolidation of duplicate logic.

2008-11-24  Jungshik Shin  <jshin@chromium.org>

        Reviewed by Darin Adler.

        For Unicode encodings other than UTF-8, use UTF-8 for
        form submission and URL query part encoding.

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

        Tests: http/tests/misc/submit-get-in-utf16be.html
               http/tests/misc/submit-get-in-utf16le.html
               http/tests/misc/submit-get-in-utf32be.html
               http/tests/misc/submit-get-in-utf32le.html
               http/tests/misc/submit-get-in-utf7.html
               http/tests/misc/submit-post-in-utf16be.html
               http/tests/misc/submit-post-in-utf16le.html
               http/tests/misc/submit-post-in-utf32be.html
               http/tests/misc/submit-post-in-utf32le.html
               http/tests/misc/submit-post-in-utf7.html
               http/tests/misc/url-in-utf16be.html
               http/tests/misc/url-in-utf16le.html
               http/tests/misc/url-in-utf32be.html
               http/tests/misc/url-in-utf32le.html
               http/tests/misc/url-in-utf7.html

        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::formData):
        * loader/TextResourceDecoder.cpp:
        (WebCore::TextResourceDecoder::setEncoding):
        * platform/KURL.cpp:
        (WebCore::KURL::KURL):
        * platform/text/TextEncoding.cpp:
        (WebCore::UTF7Encoding):
        (WebCore::TextEncoding::isNonByteBasedEncoding):
        (WebCore::TextEncoding::closestByteBasedEquivalent):
        (WebCore::TextEncoding::encodingForFormSubmission):
        * platform/text/TextEncoding.h:

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

        Reviewed by Darin Adler.

        Bug 22441: Bridge the gap between the generated ElementFactory and HTMLElementFactory
        https://bugs.webkit.org/show_bug.cgi?id=22441

        - Make the generated ElementFactory constructors return PassRefPtr instead of raw pointers.

        - Tweaked the generated files to better match our coding style.

        * dom/make_names.pl:

2008-11-24  Antti Koivisto  <antti@apple.com>

        Reviewed by Darin Adler.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=22073
        REGRESSION(r33544): Palace in the Sky crashes WebKit

        HTMLTokenizer::m_hasScriptsWaitingForStylesheets would still be set while
        there were no scripts left to execute.

        If m_hasScriptsWaitingForStylesheets becomes true during script execution
        bail out from executing more scripts synchronously.

        Test: fast/tokenizer/nested-cached-scripts-and-stylesheet.html

        * html/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::reset):
        (WebCore::HTMLTokenizer::notifyFinished):

2008-11-24  Darin Fisher  <darin@chromium.org>

        Reviewed by Geoffrey Garen.

        https://bugs.webkit.org/show_bug.cgi?id=22465
        Define KURL::copy() and use it in WorkerThread.cpp

        * dom/WorkerThread.cpp:
        (WebCore::WorkerThread::WorkerThread):
        * platform/KURL.cpp:
        (WebCore::KURL::copy):
        * platform/KURL.h:

2008-11-24  Nikolas Zimmermann  <nikolas.zimmermann@torchmobile.com>

        Reviewed by Sam Weinig.

        Name enum values in a style guide compatible way.
        Allow WMLIntrinsicEvent inclusion, without needing other includes.

        * wml/WMLIntrinsicEvent.cpp:
        (WebCore::createTaskElement):
        * wml/WMLIntrinsicEvent.h:
        * wml/WMLIntrinsicEventHandler.cpp:
        * wml/WMLIntrinsicEventHandler.h:
        (WebCore::):

2008-11-24  Nikolas Zimmermann  <nikolas.zimmermann@torchmobile.com>

        Reviewed by Sam Weinig.

        Add wmlPageStateForDocument() helper function and use it in some places.

        * wml/WMLAccessElement.cpp:
        (WebCore::WMLAccessElement::parseMappedAttribute):
        * wml/WMLDocument.cpp:
        (WebCore::WMLDocument::WMLDocument):
        (WebCore::WMLDocument::finishedParsing):
        (WebCore::wmlPageStateForDocument):
        * wml/WMLDocument.h:
        * wml/WMLGoElement.cpp:
        (WebCore::WMLGoElement::executeTask):
        * wml/WMLPrevElement.cpp:
        (WebCore::WMLPrevElement::executeTask):
        * wml/WMLRefreshElement.cpp:
        (WebCore::WMLRefreshElement::executeTask):
        * wml/WMLTaskElement.cpp:
        (WebCore::WMLTaskElement::storeVariableState):
        * wml/WMLTaskElement.h:

2008-11-24  Antti Koivisto  <antti@apple.com>

        Reviewed by Geoff Garen and Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=22214
        Keep dead resources in memory cache in purgeable memory.
        <rdar://problem/6333088>

        OS X 10.5 has purgeable memory kernel facility that allows marking reserved memory
        areas as less important. Under memory pressure system can steal pages that have
        been marked purgeable for (hopefully) better uses. This is ideal for caches.

        Only resources larger than 16KB will be moved to the purgeable memory.

        * WebCore.base.exp:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * loader/Cache.cpp:
        (WebCore::Cache::requestResource):
        (WebCore::Cache::requestUserCSSStyleSheet):
        (WebCore::Cache::resourceForURL):
        (WebCore::Cache::pruneDeadResources):
        (WebCore::Cache::TypeStatistic::addResource):
        (WebCore::Cache::getStatistics):
        (WebCore::Cache::dumpStats):
        * loader/Cache.h:
        (WebCore::Cache::TypeStatistic::TypeStatistic):
        * loader/CachedCSSStyleSheet.cpp:
        (WebCore::CachedCSSStyleSheet::allClientsRemoved):
        (WebCore::CachedCSSStyleSheet::sheetText):
        * loader/CachedCSSStyleSheet.h:
        * loader/CachedImage.cpp:
        (WebCore::CachedImage::addClient):
        (WebCore::CachedImage::image):
        (WebCore::CachedImage::imageSize):
        (WebCore::CachedImage::imageRect):
        (WebCore::CachedImage::destroyDecodedData):
        * loader/CachedResource.cpp:
        (WebCore::CachedResource::addClient):
        (WebCore::CachedResource::makePurgeable):
        (WebCore::CachedResource::isPurgeable):
        (WebCore::CachedResource::wasPurged):
        * loader/CachedResource.h:
        (WebCore::CachedResource::data):
        * loader/CachedScript.cpp:
        (WebCore::CachedScript::allClientsRemoved):
        (WebCore::CachedScript::script):
        (WebCore::CachedScript::destroyDecodedData):
        * platform/PurgeableBuffer.h: Added.
        (WebCore::PurgeableBuffer::create):
        (WebCore::PurgeableBuffer::size):
        (WebCore::PurgeableBuffer::):
        (WebCore::PurgeableBuffer::purgePriority):
        (WebCore::PurgeableBuffer::isPurgeable):
        (WebCore::PurgeableBuffer::~PurgeableBuffer):
        (WebCore::PurgeableBuffer::data):
        (WebCore::PurgeableBuffer::setPurgePriority):
        (WebCore::PurgeableBuffer::wasPurged):
        (WebCore::PurgeableBuffer::makePurgeable):
        * platform/SharedBuffer.cpp:
        (WebCore::SharedBuffer::~SharedBuffer):
        (WebCore::SharedBuffer::adoptPurgeableBuffer):
        (WebCore::SharedBuffer::size):
        (WebCore::SharedBuffer::data):
        (WebCore::SharedBuffer::append):
        (WebCore::SharedBuffer::clear):
        (WebCore::SharedBuffer::releasePurgeableBuffer):
        * platform/SharedBuffer.h:
        (WebCore::SharedBuffer::hasPurgeableBuffer):
        * platform/cf/SharedBufferCF.cpp:
        * platform/mac/PurgeableBufferMac.cpp: Added.
        (WebCore::PurgeableBuffer::PurgeableBuffer):
        (WebCore::PurgeableBuffer::~PurgeableBuffer):
        (WebCore::PurgeableBuffer::create):
        (WebCore::PurgeableBuffer::makePurgeable):
        (WebCore::PurgeableBuffer::wasPurged):
        (WebCore::PurgeableBuffer::setPurgePriority):
        (WebCore::PurgeableBuffer::data):

2008-11-24  Nikolas Zimmermann  <nikolas.zimmermann@torchmobile.com>

        Reviewed by George Staikos & Eric Seidel.

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

        Regenerate WML layout test results after implementing WML specific <card> handling:
        Only the first <card> element should be visible after loading the document, others
        can be shown by using the <go> task element.

        * dom/Document.h: Make 'finishedParsing()' a virtual function.
        * wml/WMLCardElement.cpp:
        (WebCore::WMLCardElement::WMLCardElement):
        (WebCore::WMLCardElement::~WMLCardElement):
        (WebCore::WMLCardElement::createRenderer):
        (WebCore::WMLCardElement::setActiveCardInDocument):
        (WebCore::WMLCardElement::setVisibility):
        * wml/WMLCardElement.h:
        * wml/WMLDocument.cpp:
        (WebCore::WMLDocument::finishedParsing): Execute WML specific logic after tokenzing.
        * wml/WMLDocument.h:

2008-11-24  Glenn Wilson  <gwilson@chromium.org>

        Reviewed by Alexey Proskuryakov.

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

        Added support for clients that wish to disable smart insert/delete
        and enable the "trailing whitespace selection" work-around.

        Tests: editing/selection/doubleclick-whitespace.html

        * editing/Editor.cpp:
        (WebCore::Editor::selectTrailingWhitespaceEnabled):
        * editing/Editor.h:
        * editing/Selection.cpp:
        (WebCore::Selection::includeTrailingWhitespace):
        * editing/Selection.h:
        * loader/EmptyClients.h:
        (WebCore::EmptyEditorClient::selectTrailingWhitespaceEnabled):
        * page/EditorClient.h:
        * page/EventHandler.cpp:
        (WebCore::EventHandler::selectClosestWordFromMouseEvent):

2008-11-24  Nikolas Zimmermann  <nikolas.zimmermann@torchmobile.com>

        Not reviewed. Forgot to include WMLPageState.h in last commit.

        * wml/WMLPageState.h:
        (WebCore::WMLPageState::restrictDeckAccessToDomain):
        (WebCore::WMLPageState::restrictDeckAccessToPath):

2008-11-24  Nikolas Zimmermann  <nikolas.zimmermann@torchmobile.com>

        Reviewed by Oliver Hunt & Eric Seidel.

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

        Implement WMLAccessElement. It just propogates two attributes values to WMLPageState.

        * WebCore.xcodeproj/project.pbxproj:
        * wml/WMLAccessElement.cpp: Added.
        (WebCore::WMLAccessElement::WMLAccessElement):
        (WebCore::WMLAccessElement::parseMappedAttribute):
        * wml/WMLAccessElement.h: Added.
        * wml/WMLTagNames.in:
        * wml/WMLPageState.h: Rename functions.
        (WebCore::WMLPageState::restrictDeckAccessToDomain):
        (WebCore::WMLPageState::restrictDeckAccessToPath):
        * wml/WMLVariables.cpp: Add new helper function.
        (WebCore::valueContainsVariableReference):
        * wml/WMLVariables.h:
        (WebCore::):

2008-11-24  Darin Adler  <darin@apple.com>

        Reviewed by Dan Bernstein.

        - https://bugs.webkit.org/show_bug.cgi?id=22470
          remove unneeded URL argument from FrameLoaderClient::updateGlobalHistory

        * loader/EmptyClients.h:
        (WebCore::EmptyFrameLoaderClient::updateGlobalHistory): Remove argument.
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::updateHistoryForStandardLoad): Don't pass the URL.
        (WebCore::FrameLoader::updateHistoryForRedirectWithLockedHistory): Ditto.
        * loader/FrameLoaderClient.h: Remove argument.

2008-11-24  Finnur Thorarinsson  <finnur.webkit@gmail.com>

        Reviewed by Darin Adler.

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

        Add plumbing for tickmark support for the scrollbars. The painting code
        for the scrollbar just needed to call paintTickmarks at the right time
        and a default no-op implementation is provided, which the ports will
        need to override.

        * platform/ScrollbarThemeComposite.cpp:
        (WebCore::ScrollbarThemeComposite::paint):
        * platform/ScrollbarThemeComposite.h:
        (WebCore::ScrollbarThemeComposite::paintTickmarks):

2008-11-24  Darin Fisher  <darin@chromium.org>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=22448
        Create an abstraction for JSC::SourceCode

        * WebCore.vcproj/WebCore.vcproj:
        * bindings/js/CachedScriptSourceProvider.h:
        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::evaluate):
        * bindings/js/ScriptController.h:
        * bindings/js/ScriptSourceCode.h: Added.
        (WebCore::ScriptSourceCode::ScriptSourceCode):
        (WebCore::ScriptSourceCode::length):
        (WebCore::ScriptSourceCode::jsSourceCode):
        * bindings/js/WorkerScriptController.cpp:
        (WebCore::Workevn ScriptController::evaluate):
        * bindings/js/WorkerScriptController.h:
        * dom/ScriptElement.cpp:
        (WebCore::ScriptElement::insertedIntoDocument):
        (WebCore::ScriptElement::childrenChanged):
        (WebCore::ScriptElementData::evaluateScript):
        (WebCore::ScriptElementData::notifyFinished):
        * dom/ScriptElement.h:
        * dom/WorkerThread.cpp:
        (WebCore::WorkerThread::workerThread):
        * dom/WorkerThread.h:
        * dom/XMLTokenizer.cpp:
        (WebCore::XMLTokenizer::notifyFinished):
        * dom/XMLTokenizerLibxml2.cpp:
        (WebCore::XMLTokenizer::endElementNs):
        * dom/XMLTokenizerQt.cpp:
        (WebCore::XMLTokenizer::parseEndElement):
        * html/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::scriptHandler):
        (WebCore::HTMLTokenizer::scriptExecution):
        (WebCore::HTMLTokenizer::notifyFinished):
        * html/HTMLTokenizer.h:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::executeScript):
        * loader/FrameLoader.h:

2008-11-24  Darin Adler  <darin@apple.com>

        Reviewed by Dan Bernstein.

        - finish https://bugs.webkit.org/show_bug.cgi?id=22295
          track which history items are from page load failures

        * WebCore.base.exp: Exported new function.

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::urlForHistoryReflectsFailure): Added.
        * loader/DocumentLoader.h: Ditto.

2008-11-24  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Beth Dakin.

        Bug 22461: AccessibilityListBox::doAccessibilityHitTest() signature does not match the base class
        https://bugs.webkit.org/show_bug.cgi?id=22461

        Changing AccessibilityListBox to use its parent's signature for hit testing

        * page/AccessibilityListBox.cpp:
        (WebCore::AccessibilityListBox::doAccessibilityHitTest):
        * page/AccessibilityListBox.h:

2008-11-24  Simon Fraser  <simon.fraser@apple.com>

        Fix Windows build: selectionRect() -> selectionBounds().

        * page/win/FrameCGWin.cpp:
        (WebCore::imageFromSelection):

2008-11-24  Glenn Wilson  <gwilson@chromium.org>

        Reviewed by Darin Adler.

        http://bugs.webkit.org/show_bug.cgi?id=18703
        "Changing the 'size' property on a text input does not affect its length"

        Text fields would not repaint themselves after having their "size"
        attributes modified.  This fix tells the object to recalculate its
        width and repaint itself when its "size" attribute is parsed.

        Test: fast/js/text-field-resize.html

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

2008-11-24  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Darin Adler

        Followup from changes for https://bugs.webkit.org/show_bug.cgi?id=22433

        Make RenderView::selectionRect() private to cause compile-time
        errors if someone tries to call it.

        * rendering/RenderView.h:

2008-11-24  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein

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

        Rename RenderView::selectionRect() to selectionBounds(), to remove
        longstanding ambiguity with the base class selectionRect() method.
        Do the same on Frame for consistency with RenderView. Assert
        that RenderView::selectionRect() is never called.

        * WebCore.base.exp:
        * editing/SelectionController.cpp:
        (WebCore::SelectionController::focusedOrActiveStateChanged):
        * page/DragController.cpp:
        (WebCore::dragLocForSelectionDrag):
        * page/Frame.cpp:
        (WebCore::Frame::selectionBounds):
        (WebCore::Frame::revealSelection):
        * page/Frame.h:
        * page/mac/FrameMac.mm:
        (WebCore::Frame::selectionImage):
        * rendering/RenderView.cpp:
        (WebCore::RenderView::selectionRect):
        (WebCore::RenderView::selectionBounds):
        * rendering/RenderView.h:

2008-11-19  Julien Chaffraix  <jchaffraix@webkit.org>

        Reviewed by Darin Adler.

        Bug 22441: Bridge the gap between the generated ElementFactory and HTMLElementFactory
        https://bugs.webkit.org/show_bug.cgi?id=22441

        - Make HTMLElementFactory::createHTMLElement take a QualifiedName instead of
        an AtomicString.

        - Updated the elements' constructors and the callers to reflect the previous change.

        * dom/Document.cpp:
        (WebCore::Document::createElement):
        * html/HTMLDocument.cpp:
        (WebCore::HTMLDocument::createElement):
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::cloneNode):
        * html/HTMLElementFactory.cpp:
        (WebCore::htmlConstructor):
        (WebCore::headConstructor):
        (WebCore::bodyConstructor):
        (WebCore::baseConstructor):
        (WebCore::linkConstructor):
        (WebCore::metaConstructor):
        (WebCore::styleConstructor):
        (WebCore::titleConstructor):
        (WebCore::frameConstructor):
        (WebCore::framesetConstructor):
        (WebCore::iframeConstructor):
        (WebCore::formConstructor):
        (WebCore::buttonConstructor):
        (WebCore::inputConstructor):
        (WebCore::isindexConstructor):
        (WebCore::fieldsetConstructor):
        (WebCore::keygenConstructor):
        (WebCore::labelConstructor):
        (WebCore::legendConstructor):
        (WebCore::optgroupConstructor):
        (WebCore::optionConstructor):
        (WebCore::selectConstructor):
        (WebCore::textareaConstructor):
        (WebCore::dlConstructor):
        (WebCore::ulConstructor):
        (WebCore::olConstructor):
        (WebCore::dirConstructor):
        (WebCore::menuConstructor):
        (WebCore::liConstructor):
        (WebCore::blockquoteConstructor):
        (WebCore::divConstructor):
        (WebCore::headingConstructor):
        (WebCore::hrConstructor):
        (WebCore::paragraphConstructor):
        (WebCore::preConstructor):
        (WebCore::basefontConstructor):
        (WebCore::fontConstructor):
        (WebCore::modConstructor):
        (WebCore::anchorConstructor):
        (WebCore::imageConstructor):
        (WebCore::mapConstructor):
        (WebCore::areaConstructor):
        (WebCore::canvasConstructor):
        (WebCore::appletConstructor):
        (WebCore::embedConstructor):
        (WebCore::objectConstructor):
        (WebCore::paramConstructor):
        (WebCore::scriptConstructor):
        (WebCore::tableConstructor):
        (WebCore::tableCaptionConstructor):
        (WebCore::tableColConstructor):
        (WebCore::tableRowConstructor):
        (WebCore::tableCellConstructor):
        (WebCore::tableSectionConstructor):
        (WebCore::brConstructor):
        (WebCore::quoteConstructor):
        (WebCore::marqueeConstructor):
        (WebCore::audioConstructor):
        (WebCore::videoConstructor):
        (WebCore::sourceConstructor):
        (WebCore::HTMLElementFactory::createHTMLElement):
        * html/HTMLElementFactory.h:
        * html/HTMLParser.cpp:
        (WebCore::HTMLParser::getNode):

2008-11-24  Brent Fulgham  <bfulgham@gmail.com>

        Reviewed by Alexey Proskuryakov.

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

        Correct bad default constructor for Cairo FontPlatformData so that
        the m_scaledFont member is initialized.  Previously this would be
        set to 0xbaadf00d, which would result in infinite loops while
        attempting to deal with the font cache.

        * platform/graphics/win/FontPlatformData.h:
        (WebCore::FontPlatformData::FontPlatformData): Initialize m_scaledFont to 0

2008-11-24  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=22455
        Add support for Worker.terminate()

        Test: fast/workers/worker-terminate.html

        * dom/Worker.idl:
        * dom/Worker.cpp:
        * dom/Worker.h:
        Added terminate().

        * dom/WorkerMessagingProxy.h: (WebCore::WorkerMessagingProxy::askedToTerminate):
        * dom/WorkerMessagingProxy.cpp:
        (WebCore::MessageWorkerTask::performTask): Don't dispatch messages if the worker was asked
        to terminate (this is not mentioned in draft spec, but makes sense anyway).
        (WebCore::WorkerMessagingProxy::WorkerMessagingProxy): The proxy now remembers if it was
        asked to terminate in m_askedToTerminate member variable. Also, changed m_unconfirmedMessageCount
        to only track messages that were posted to worker thread, avoiding a leak if the script
        could not be loaded.
        (WebCore::WorkerMessagingProxy::postMessageToWorkerContext): Return early if terminating.
        (WebCore::WorkerMessagingProxy::workerThreadCreated): Stop the thread if already asked for.
        (WebCore::WorkerMessagingProxy::workerContextDestroyedInternal): Even if worker context
        was destroyed, the worker object may still be alive now, so don't delete self in this case.
        (WebCore::WorkerMessagingProxy::terminate): Stop the thread if it was already created, or
        remember to stop it when it is created.
        (WebCore::WorkerMessagingProxy::reportWorkerThreadActivityInternal): Don't track activity
        if the thread asked to stop anyway.
        (WebCore::WorkerMessagingProxy::workerThreadHasPendingActivity): Ditto.

        * dom/WorkerThread.cpp:
        * dom/WorkerThread.h:
        Fixed a race condition in stop().

2008-11-24  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Mark Rowe.

        https://bugs.webkit.org/show_bug.cgi?id=22439
        Won't load stylesheets with filenames less than 2 characters long in xhtml.

        Test: http/tests/misc/single-character-pi-stylesheet.xhtml

        * dom/ProcessingInstruction.cpp: (WebCore::ProcessingInstruction::checkStyleSheet):
        Fix up the logic.

2008-11-24  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Mark Rowe.

        [Gtk+] Add configure option to enable Web Workers and enable it by default

        Add --enable-workers to the buildsystem (used by build-webkit) add
        the to be build files to the GNUmakefile.am and change build-webkit
        to enable Web Workers by default.

        * GNUmakefile.am:

2008-11-24  Alexey Proskuryakov  <ap@webkit.org>

        Build fix (for Windows Cairo port?)

        * page/DOMWindow.idl: Use ENABLE_CHANNEL_MESSAGING instead of ENABLE(CHANNEL_MESSAGING), as
        the ENABLE macro is not available in idls.

2008-11-22  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=22421
        Added ScriptValue to Visual Studio and XCode projects.

        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:

2008-11-22  Nikolas Zimmermann  <nikolas.zimmermann@torchmobile.com>

        Reviewed by Holger Freyther.

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

        Add WMLInstrinsicEvent/EventHandler implementation. Code not yet used.

        * WebCore.xcodeproj/project.pbxproj:
        * wml/WMLIntrinsicEvent.cpp: Added.
        (WebCore::createTaskElement):
        (WebCore::WMLIntrinsicEvent::WMLIntrinsicEvent):
        * wml/WMLIntrinsicEvent.h: Added.
        (WebCore::WMLIntrinsicEvent::create):
        (WebCore::WMLIntrinsicEvent::createWithTask):
        (WebCore::WMLIntrinsicEvent::taskElement):
        * wml/WMLIntrinsicEventHandler.cpp: Added.
        (WebCore::WMLIntrinsicEventHandler::WMLIntrinsicEventHandler):
        (WebCore::WMLIntrinsicEventHandler::registerIntrinsicEvent):
        (WebCore::WMLIntrinsicEventHandler::triggerIntrinsicEvent):
        (WebCore::WMLIntrinsicEventHandler::hasIntrinsicEvent):
        * wml/WMLIntrinsicEventHandler.h: Added.
        (WebCore::):

2008-11-22  Nikolas Zimmermann  <nikolas.zimmermann@torchmobile.com>

        Reviewed by Holger Freyther.

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

        Add <go> stub implementation. Add complete <prev>/<refresh> and <setvar> implementation.
        Activate code handling <setvar> registration in WMLTaskElement.

        * wml/WMLGoElement.cpp: Added.
        (WebCore::WMLGoElement::WMLGoElement):
        (WebCore::WMLGoElement::~WMLGoElement):
        (WebCore::WMLGoElement::parseMappedAttribute):
        (WebCore::WMLGoElement::executeTask):
        * wml/WMLGoElement.h: Added.
        * wml/WMLPrevElement.cpp: Added.
        (WebCore::WMLPrevElement::WMLPrevElement):
        (WebCore::WMLPrevElement::~WMLPrevElement):
        (WebCore::WMLPrevElement::executeTask):
        * wml/WMLPrevElement.h: Added.
        * wml/WMLRefreshElement.cpp: Added.
        (WebCore::WMLRefreshElement::WMLRefreshElement):
        (WebCore::WMLRefreshElement::~WMLRefreshElement):
        (WebCore::WMLRefreshElement::executeTask):
        * wml/WMLRefreshElement.h: Added.
        * wml/WMLSetvarElement.cpp: Added.
        (WebCore::WMLSetvarElement::WMLSetvarElement):
        (WebCore::WMLSetvarElement::~WMLSetvarElement):
        (WebCore::WMLSetvarElement::parseMappedAttribute):
        (WebCore::WMLSetvarElement::insertedIntoDocument):
        (WebCore::WMLSetvarElement::name):
        (WebCore::WMLSetvarElement::value):
        * wml/WMLSetvarElement.h: Added.
        * wml/WMLTagNames.in:
        * wml/WMLTaskElement.cpp:
        (WebCore::WMLTaskElement::registerVariableSetter):
        (WebCore::WMLTaskElement::storeVariableState):
        * wml/WMLTaskElement.h:
        * WebCore.xcodeproj/project.pbxproj:

2008-11-22  Nikolas Zimmermann  <nikolas.zimmermann@torchmobile.com>

        Not reviewed. Forgot to include WMLPageState.* in the last commit.

        * wml/WMLPageState.cpp:
        (WebCore::WMLPageState::setNeedCheckDeckAccess):
        * wml/WMLPageState.h:
        (WebCore::WMLPageState::storeVariables):

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

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=22397
        Worker threads are not destroyed if running a JS loop

        Since the event loop is not ever entered again in this case, the fix necessarily involves
        some shared data hackery.

        * dom/WorkerThread.cpp: (WebCore::WorkerThread::stop):
        * dom/WorkerThread.h:
        Added a stop() method, which asks the thread to exit as soon as possible. In the future, it
        may need to abort other kinds of synchronous processing, such as importScripts or XHR.

        * bindings/js/WorkerScriptController.cpp:
        (WebCore::WorkerScriptController::WorkerScriptController):
        (WebCore::WorkerScriptController::evaluate):
        (WebCore::WorkerScriptController::forbidExecution):
        * bindings/js/WorkerScriptController.h:
        Added a forbidExecution() method, which interrupts currently running JS, and makes any
        future calls to evaluate() return immediately.

        * dom/WorkerMessagingProxy.cpp: (WebCore::WorkerMessagingProxy::workerObjectDestroyed):
        Call WorkerThread::stop().

2008-11-21  Kevin Watters  <kevinwatters@gmail.com>

        Reviewed by Kevin Ollivier.

        Improve wx image drawing performance considerably when using wxGraphicsContext
        by avoiding unnecessary copies and drawing.

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

        * platform/graphics/wx/ImageWx.cpp:
        (WebCore::BitmapImage::draw):
        (WebCore::BitmapImage::drawPattern):


2008-11-21  Kevin Watters  <kevinwatters@gmail.com>

        Reviewed by Kevin Ollivier.

        Implementation of AffineTransform::mapRect for wx.

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

        * platform/graphics/wx/AffineTransformWx.cpp:
        (WebCore::AffineTransform::mapRect):

2008-11-21  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/5381788> Match NSTextView editing behavior at the end of hyperlink text

        Change link editing behavior to match TextEdit and MS Word when editing before and after
        a link (Pages has two caret positions at link boundaries, Thunderbird and FF behave like we
        used to, so it's difficult to get out of link editing mode):
        When inserting before or after a link, always insert content outside of the link.  This
        makes it impossible to get stuck in link editing mode, while making it slightly more
        difficult to edit link labels.  WebKit editors that care about this can add UI for editing
        link labels, like GMail and GoogleDocs have done.  We never actually had any bugs complaining
        about how it was difficult to edit link labels at the start/end, the code was just introduced
        with another bug fix without much thought.

        Don't remember removed links anymore, no other editor does this and it made it
        difficult/impossible to get out of link editing mode.  This code was added to fix
        <rdar://problem/4069359>, which is fixed instead by removing the styles from an
        enclosing anchor element from those styles that we remember when we delete content.

        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::positionAvoidingSpecialElementBoundary):
        * editing/CompositeEditCommand.h:
        * editing/DeleteSelectionCommand.cpp:
        (WebCore::removeEnclosingAnchorStyle):
        (WebCore::DeleteSelectionCommand::saveTypingStyleState):
        (WebCore::DeleteSelectionCommand::doApply):
        * editing/DeleteSelectionCommand.h:
        * editing/EditCommand.cpp:
        (WebCore::EditCommand::apply):
        * editing/Editor.cpp:
        (WebCore::Editor::appliedEditing):
        * editing/InsertTextCommand.cpp:
        (WebCore::InsertTextCommand::prepareForTextInsertion):
        (WebCore::InsertTextCommand::input):
        * editing/RemoveFormatCommand.cpp:
        (WebCore::RemoveFormatCommand::doApply):
        * editing/SelectionController.cpp:
        (WebCore::SelectionController::setSelection):
        * editing/SelectionController.h:

2008-11-21  Alice Liu  <alice.liu@apple.com>

        Rubber-stamped by Dan Bernstein.

        fixed <rdar://6340771> crashing on print preview

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

2008-11-21  Darin Fisher  <darin@chromium.org>

        Reviewed by Geoffrey Garen.

        https://bugs.webkit.org/show_bug.cgi?id=22390
        Abstract away JSC:: usage in WebCore/xml

        * bindings/js/ScriptString.h: Added.
        (WebCore::ScriptString::ScriptString):
        (WebCore::ScriptString::operator JSC::UString):
        (WebCore::ScriptString::isNull):
        (WebCore::ScriptString::size):
        (WebCore::ScriptString::operator=):
        (WebCore::ScriptString::operator+=):
        * inspector/InspectorController.cpp:
        (WebCore::XMLHttpRequestResource::XMLHttpRequestResource):
        (WebCore::InspectorResource::setXMLHttpRequestProperties):
        (WebCore::InspectorController::resourceRetrievedByXMLHttpRequest):
        * inspector/InspectorController.h:
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::responseText):
        (WebCore::XMLHttpRequest::clearResponse):
        (WebCore::XMLHttpRequest::dropProtection):
        (WebCore::XMLHttpRequest::didFinishLoading):
        (WebCore::XMLHttpRequest::didReceiveData):
        * xml/XMLHttpRequest.h:
        (WebCore::XMLHttpRequest::setLastSendURL):

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

        Reviewed by Geoffrey Garen.

        Destroy script decoded data on a zero-delay timer after
        decoding.  This means we now have no decoded script data
        at the end of Membuster.

        * loader/CachedScript.cpp:
        (WebCore::CachedScript::CachedScript):
        (WebCore::CachedScript::allClientsRemoved):
        (WebCore::CachedScript::script):
        (WebCore::CachedScript::decodedDataDeletionTimerFired):
        * loader/CachedScript.h:

2008-11-21  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Darin Adler

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

        RenderBox::absoluteClippedOverflowRect() needs to inflate the rect by
        maximalOutlineSize(), since a child might have an outline which projects
        outside the parent overflowRect().

        We also need to ensure that maximalOutlineSize() is updated early in styleDidChange,
        so that it is valid for these repaints.

        Test: fast/repaint/outline-child-repaint.html

        * WebCore.xcodeproj/project.pbxproj:
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::styleDidChange):
        (WebCore::RenderBox::absoluteClippedOverflowRect):

2008-11-21  Jan Michael Alonzo  <jmalonzo@webkit.org>

        Gtk, Qt, and Wx build fix.

        Add LinkHash.cpp in the build scripts.
        Add LinkHash.h to Gtk's build script.

        LinkHash.cpp/h was introduced in r38661.

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

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

        Reviewed by Dan Bernstein.

        Third step in https://bugs.webkit.org/show_bug.cgi?id=22394
        Be more eager in destroying script decoded data

        Destroy the decoded data when all clients are removed from a CachedScript.

        * loader/CachedScript.cpp:
        (WebCore::CachedScript::allClientsRemoved):
        * loader/CachedScript.h:
        (WebCore::CachedScript::allClientsRemoved):

2008-11-21  Pierre-Olivier Latour  <pol@apple.com>

        Reviewed by Dan Bernstein.

        WebKit should be using Device RGB colorspace everywhere for
        consistency.

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

        * page/mac/AccessibilityObjectWrapper.mm:
        (CreateCGColorIfDifferent):
        * platform/graphics/mac/ColorMac.h:
        * platform/graphics/mac/ColorMac.mm:
        (WebCore::nsColor):
        (+[WebCoreControlTintObserver controlTintDidChange]):
        * rendering/RenderThemeMac.mm:
        (WebCore::convertNSColorToColor):
        (WebCore::menuBackgroundColor):

2008-11-20  Julien Chaffraix  <jchaffraix@webkit.org>

        Reviewed by Darin Adler.

        Bug 22388: Add JSInterfaceName to the .in files
        https://bugs.webkit.org/show_bug.cgi?id=22388

        Add JSInterfaceName that is similar to interfaceName but
        for the JS wrappers. JSInterfaceName is always equal to interfaceName
        unless explicitly set.

        * dom/make_names.pl:
        * html/HTMLTagNames.in:
        * svg/svgtags.in:

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

        Reviewed by Geoffrey Garen.

        Second step in https://bugs.webkit.org/show_bug.cgi?id=22394
        Be more eager in destroying script decoded data

        Use a new CachedScriptSourceProvider to keep CachedScripts as
        CachedScripts, even down into JSC.  This has the added benefit
        of showing the CachedScripts as live in the Caches window.

        * GNUmakefile.am:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/CachedScriptSourceProvider.h: Added.
        (WebCore::CachedScriptSourceProvider::create):
        (WebCore::CachedScriptSourceProvider::~CachedScriptSourceProvider):
        (WebCore::CachedScriptSourceProvider::getRange):
        (WebCore::CachedScriptSourceProvider::data):
        (WebCore::CachedScriptSourceProvider::length):
        (WebCore::CachedScriptSourceProvider::CachedScriptSourceProvider):
        (WebCore::makeSource):
        * dom/ScriptElement.cpp:
        (WebCore::ScriptElementData::notifyFinished):
        * dom/XMLTokenizer.cpp:
        (WebCore::XMLTokenizer::notifyFinished):
        * html/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::notifyFinished):

2008-11-21  Brett Wilson  <brettw@chromium.org>

        Fix debug-only build bustage due to a typo in an assert, and add new
        files to the Windows build.

        * Info.plist:
        * WebCore.vcproj/WebCore.vcproj:
        * platform/LinkHash.h:
        (WebCore::LinkHashHash::avoidDeletedValue):

2008-11-20  Brett Wilson  <brettw@chromium.org>

        Reviewed by Eric Seidel.

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

        Factor out visited link hashing and types into a new file, LinkHash.
        This also changes the hash type to 64 bits, but does not actually use
        the extra bits yet.

        * WebCore.xcodeproj/project.pbxproj:
        (WebCore::CSSStyleSelector::SelectorChecker::checkPseudoState):
        (WebCore::CSSStyleSelector::SelectorChecker::visitedStateChanged):
        * css/CSSStyleSelector.h:
        (WebCore::CSSStyleSelector::visitedStateChanged):
        * dom/Document.cpp:
        * dom/Document.h:
        * page/Page.cpp:
        (WebCore::Page::visitedStateChanged):
        * page/Page.h:
        * page/PageGroup.cpp:
        (WebCore::PageGroup::isLinkVisited):
        (WebCore::PageGroup::addVisitedLink):
        * page/PageGroup.h:
        * platform/LinkHash.cpp: Added.
        (WebCore::findSlashDotDotSlash):
        (WebCore::findSlashSlash):
        (WebCore::findSlashDotSlash):
        (WebCore::containsColonSlashSlash):
        (WebCore::cleanPath):
        (WebCore::matchLetter):
        (WebCore::needsTrailingSlash):
        (WebCore::visitedLinkHash):
        * platform/LinkHash.h: Added
        (WebCore::LinkHashHash::hash):
        (WebCore::LinkHashHash::equal):
        (WebCore::LinkHashHash::avoidDeletedValue):

2008-11-21  Nikolas Zimmermann  <nikolas.zimmermann@torchmobile.com>

        Reviewed by Alexey Proskuryakov.

        No need to use getElementsByTagNameNS() in WML documents. Revert to using getElementByTagName() again.

        * wml/WMLPElement.cpp:
        (WebCore::WMLPElement::insertedIntoDocument):

2008-11-21  Nikolas Zimmermann  <nikolas.zimmermann@torchmobile.com>

        Reviewed by Alexey Proskuryakov.

        Fix some coding style/formatting issues in WMLAElement.

        * wml/WMLAElement.cpp:
        (WebCore::WMLAElement::parseMappedAttribute):
        (WebCore::WMLAElement::defaultEventHandler):
        * wml/WMLAElement.h:

2008-11-21  Nikolas Zimmermann  <nikolas.zimmermann@torchmobile.com>

        Reviewed by Alexey Proskuryakov.

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

        Implement <anchor> support for WML, add WMLVariables file containing helper functions
        for variable support, and a WMLTaskElement base class for WMLPrev/Go/RefreshElement.

        * css/CSSStyleSelector.cpp:
        (WebCore::linkAttribute):
        * rendering/HitTestResult.cpp:
        (WebCore::HitTestResult::absoluteImageURL):
        (WebCore::HitTestResult::absoluteLinkURL):
        (WebCore::HitTestResult::isLiveLink):
        * wml/WMLAnchorElement.cpp: Added.
        (WebCore::WMLAnchorElement::WMLAnchorElement):
        (WebCore::WMLAnchorElement::~WMLAnchorElement):
        (WebCore::WMLAnchorElement::defaultEventHandler):
        * wml/WMLAnchorElement.h: Added.
        (WebCore::WMLAnchorElement::registerTask):
        * wml/WMLTagNames.in:
        * wml/WMLTaskElement.cpp: Added.
        (WebCore::WMLTaskElement::WMLTaskElement):
        (WebCore::WMLTaskElement::~WMLTaskElement):
        (WebCore::WMLTaskElement::insertedIntoDocument):
        (WebCore::WMLTaskElement::addVariableSetter):
        (WebCore::WMLTaskElement::removeVariableSetter):
        (WebCore::WMLTaskElement::storeVariableState):
        * wml/WMLTaskElement.h: Added.
        * wml/WMLVariables.cpp: Added.
        (WebCore::isValidVariableCharacter):
        (WebCore::isValidVariableReferenceCharacter):
        (WebCore::isValidVariableName):
        (WebCore::substituteVariableReferences):
        * wml/WMLVariables.h: Added.
        (WebCore::):

2008-11-21  Julien Chaffraix  <jchaffraix@pleyo.com>

        Rubber-stamped by Alexey Proskuryakov.

        Build fix when building without WORKERS on non-POSIX, non-WINDOWS
        machine.

        Spotted by Mario Bensi.

        * platform/text/TextCodecICU.cpp:

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

        Reviewed by Geoffrey Garen.

        First step in https://bugs.webkit.org/show_bug.cgi?id=22394
        Be more eager in destroying script decoded data

        Pass data to be used in script execution around as JSC::SourceCode instead
        of a source, url, and starting line.

        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::evaluate):
        * bindings/js/ScriptController.h:
        * bindings/js/StringSourceProvider.h:
        (WebCore::makeSource):
        * bindings/js/WorkerScriptController.cpp:
        (WebCore::WorkerScriptController::evaluate):
        * bindings/js/WorkerScriptController.h:
        * dom/ScriptElement.cpp:
        (WebCore::ScriptElement::insertedIntoDocument):
        (WebCore::ScriptElement::childrenChanged):
        (WebCore::ScriptElementData::evaluateScript):
        (WebCore::ScriptElementData::notifyFinished):
        * dom/ScriptElement.h:
        * dom/WorkerThread.cpp:
        (WebCore::WorkerThread::workerThread):
        * dom/XMLTokenizer.cpp:
        (WebCore::XMLTokenizer::notifyFinished):
        * dom/XMLTokenizerLibxml2.cpp:
        (WebCore::XMLTokenizer::endElementNs):
        * dom/XMLTokenizerQt.cpp:
        (WebCore::XMLTokenizer::parseEndElement):
        * html/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::scriptHandler):
        (WebCore::HTMLTokenizer::scriptExecution):
        (WebCore::HTMLTokenizer::notifyFinished):
        * html/HTMLTokenizer.h:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::executeScript):
        * loader/FrameLoader.h:

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

        Reviewed by Geoffrey Garen.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=22392
        REGRESION: XMLHttpRequest.responseText does unnecessary trip though WebCore::String

        - Use jsOwnedStringOrNull to avoid conversion to WebCore::String.

        * bindings/js/JSXMLHttpRequestCustom.cpp:
        (WebCore::JSXMLHttpRequest::responseText):
        * xml/XMLHttpRequest.idl:

2008-11-20  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein

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

        When an non-layer object gained a transform, it would only repaint
        the bounds of the new layer, which could result in redraw artifacts
        if the new layer was smaller. So if we're gaining a transform, we
        repaint.

        Test: fast/repaint/change-transform.html

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

2008-11-20  Adele Peterson  <adele@apple.com>

        Reviewed by Darin Adler.

        Fix for <rdar://problem/6111436> Support upload progress events on Windows

        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::didSendBodyData): Added.
        (WebCore::ResourceHandle::start): Hook up didSendBodyData callback.

2008-11-20  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/2610675> Blank line that is quoted can't be deleted

        If the caret is in an empty quoted paragraph, and either there is nothing before that
        paragraph, or what is before is unquoted, and the user presses delete, unquote that
        paragraph.

        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::breakOutOfEmptyMailBlockquotedParagraph): Added.
        Removes the line break that holds open an empty paragraph and then attempts to
        prune the blockquote(s) that held that line break in case they have been emptied
        out.  Places a line break to create in empty unquoted paragraph in place of the
        quoted one that was removed.
        * editing/CompositeEditCommand.h:
        * editing/TypingCommand.cpp:
        (WebCore::TypingCommand::deleteKeyPressed): Call breakOutOfEmptyBlockquotedParagraph.
        * editing/htmlediting.cpp:
        (WebCore::highestEnclosingNodeOfType): Added.
        * editing/htmlediting.h:

2008-11-20  Dean Jackson  <dino@apple.com>

        Reviewed by Antti Koivisto

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

        Make transition shorthand property accept transition-delay.

        Test: transitions/transition-shorthand-delay.html

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseTransitionShorthand):

2008-11-20  Dean Jackson  <dino@apple.com>

        Reviewed by Antti Koivisto

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

        Make sure pauseTransition API takes transition delay into account.

        Test: transitions/transition-drt-api-delay.html

        * page/animation/AnimationBase.cpp:
        (WebCore::AnimationBase::pauseAtTime):

2008-11-20  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Darin Adler

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

        Implement getComputedStyle for animation properties. Remove individual
        computed values for transform-origin-x, transform-origin-y, and just
        return transform-origin instead. Return "none" for default animation-name,
        and fix the initial value.

        Tests: animations/computed-style.html
               transforms/computed-style-origin.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::):
        (WebCore::getDelayValue):
        (WebCore::getDurationValue):
        (WebCore::getTimingFunctionValue):
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * rendering/style/RenderStyle.h:
        (WebCore::InheritedFlags::initialAnimationName):

2008-11-20  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by Beth Dakin.

        Preparation for:
        <rdar://problem/2610675> Blank line that is quoted can't be deleted

        To fix this we need to make changes to the code that creates selections to delete
        when the user does a backward or forward delete with a caret selection.  For certain
        caret positions, we now want to remove something other than the standard "caret extended
        backward/forward by one unit".  The problem is that there were two pieces of code
        responsible for doing this, one in Editor::deleteWithDirection, and another inside
        TypingCommand::deleteKeyPressed.  The code in deleteWithDirection is a recent
        addition (r19172), and adding it there caused regressions because it prevented the
        code in deleteKeyPressed from ever running.  The regressions were never caught because
        JS deletion uses deleteKeyPressed while manual deletion uses deleteWithDirection.

        This patch removes selection creation code from deleteWithDirection so that deleteKeyPressed
        can handle it.  That required moving code to handle the kill ring down into deleteKeyPressed.

        Follow up patches will fix <rdar://problem/2610675>, and attempt to eliminate the rest of the
        discrepancies between the behavior of JS deletions and manual deletions, so that we
        have better test coverage.

        * editing/Editor.cpp:
        (WebCore::Editor::deleteWithDirection): Early return if m_frame->document() is null, instead
        of checking for that periodically throughout the function.  There's really nothing to be done
        if it's null anyway.
        Move kill ring code down into deleteKeyPressed.
        * editing/Editor.h:
        * editing/TypingCommand.cpp:
        (WebCore::TypingCommand::TypingCommand):
        (WebCore::TypingCommand::deleteKeyPressed):
        (WebCore::TypingCommand::forwardDeleteKeyPressed):
        (WebCore::TypingCommand::doApply):
        * editing/TypingCommand.h:
        (WebCore::TypingCommand::create):

2008-11-20  Darin Adler  <darin@apple.com>

        Earlier version reviewed by Justin Garcia.

        - fix <rdar://problem/4108572> REGRESSION: Can't extend selection with shift-arrow in read only mode

        * editing/Editor.cpp:
        (WebCore::Editor::handleKeyboardEvent): Remove isContentEditable check -- keyboard events can be
        handled even when the selection is not in an editable area.
        (WebCore::Editor::handleInputMethodKeydown): Ditto.

        * editing/EditorCommand.cpp: Changed the enabled rule for operations that change the selection to
        allow use when there's a selection even if it's not in an editable area. This includes commands
        like shift-arrow keys to extend the slection, but not commands like arrow keys to move the
        insertion point.

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

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=22380
        Fix WorkerContext refcounting

        * dom/WorkerContext.cpp:
        (WebCore::WorkerContext::WorkerContext):
        * dom/WorkerContext.h:
        (WebCore::WorkerContext::script):
        (WebCore::WorkerContext::clearScript):
        Added a method to manually destroy WorkerScriptController.

        * dom/WorkerThread.cpp: (WebCore::WorkerThread::workerThread):
        Destroy WorkerScriptController to release any references to WorkerContext.

2008-11-19  Julien Chaffraix  <jchaffraix@webkit.org>

        Reviewed by Darin Adler.

        Last part of bug 21106: .in format discussed changes
        https://bugs.webkit.org/show_bug.cgi?id=21106

        - Renamed isAudioHack to wrapperOnlyIfMediaIsAvailable as requested.

        - Cleaned up additionnal function parameters that were unneeded.

        * dom/make_names.pl:
        * html/HTMLTagNames.in:

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

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=22383
        Worker tests spill error messages over to consequent tests

        * dom/Worker.cpp: (WebCore::Worker::Worker):
        Raise an exception immediately if URL is empty. Dcoument::completeURL() returns document URL
        in this case, and there is no sense in starting a thread and trying to parse document source
        as JavaScript.

        * bindings/js/JSWorkerConstructor.cpp: (WebCore::constructWorker):
        Return quickly if toString() raised an exception.

2008-11-19  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Adele Peterson.

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

        Fix the painting and event handling in transformed search fields.
        When painting the cancel and results button parts,  get the rect from AppKit
        relative to the input bounds (rather than in absolute coords), then convert
        it into the coords of the part's renderer (which is the one that is painting).
        To do this we need to compute an offset relative to some container, so expose
        a method on RenderObject for that.

        Also fix the location at which the search popup shows up to take transforms
        into account, and fix the math that is used to figure out if the search
        results button, or the cancel button should get the mouse events.

        Test: fast/forms/search-transformed.html

        * rendering/RenderBox.h:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::offsetFromContainer):
        * rendering/RenderObject.h:
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::forwardEvent):
        (WebCore::RenderTextControl::showPopup):
        * rendering/RenderThemeMac.h:
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::convertToPaintingRect):
        (WebCore::RenderThemeMac::paintSearchFieldCancelButton):
        (WebCore::RenderThemeMac::paintSearchFieldResultsDecoration):
        (WebCore::RenderThemeMac::paintSearchFieldResultsButton):

2008-11-20  Joerg Bornemann  <joerg.bornemann@trolltech.com>

        Reviewed by Simon Hausmann.

        Steps towards making the the Qt port of WebKit compile on Windows CE

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

        * WebCore.pro: Various fixes to include windows specific build options
        also in the Windows CE build.
        * loader/icon/IconDatabase.cpp: Removed unnecessary errno.h inclusion.
        * platform/FileSystem.h: Changed Q_OS_WIN32 to Q_OS_WIN to include CE.
        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::GraphicsContext::getWindowsContext): SetWorldTransform is
        not available on CE.
        * platform/graphics/qt/PathQt.cpp: Added local definition of M_PI.
        * platform/qt/FileSystemQt.cpp: Changed Q_OS_WIN32 to Q_OS_WIN to include CE.
        * platform/qt/KeyboardCodes.h: Extend #idefs to define the missing OEM
        constants on CE.
        * platform/qt/TemporaryLinkStubs.cpp: Added stubs for plugins.
        * platform/text/RegularExpression.cpp: Removed unused sys/types.h and
        pcre.h inclusions.
        * platform/win/SystemTimeWin.cpp:
        (WebCore::userIdleTime): Don't use GetLastInputInfo on CE, it does not
        exist.

2008-11-20  Antti Koivisto  <antti@apple.com>

        Reviewed by Maciej Stachowiak.

        https://bugs.webkit.org/show_bug.cgi?id=22379
        Make CSSOM use less memory

        - Shrink CSSProperty by half by using bitfields.
        - Get rid of m_strictParsing field in StyleBase by moving it up to CSSStyleSheet
          and CSSMutableStyleDeclaration. This reduces size of many highly popular objects.

        * css/CSSMutableStyleDeclaration.cpp:
        (WebCore::CSSMutableStyleDeclaration::CSSMutableStyleDeclaration):
        (WebCore::CSSMutableStyleDeclaration::operator=):
        * css/CSSMutableStyleDeclaration.h:
        (WebCore::CSSMutableStyleDeclaration::setStrictParsing):
        (WebCore::CSSMutableStyleDeclaration::useStrictParsing):
        * css/CSSProperty.h:
        * css/CSSStyleSheet.cpp:
        (WebCore::CSSStyleSheet::CSSStyleSheet):
        * css/CSSStyleSheet.h:
        (WebCore::CSSStyleSheet::setStrictParsing):
        (WebCore::CSSStyleSheet::useStrictParsing):
        * css/StyleBase.h:
        (WebCore::StyleBase::useStrictParsing):
        (WebCore::StyleBase::StyleBase):

2008-11-19  Darin Fisher  <darin@chromium.org>

        Fix bustage.

        https://bugs.webkit.org/show_bug.cgi?id=22373
        Ports busted by addition of ScriptValue.{h,cpp}

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

2008-11-19  Darin Fisher  <darin@chromium.org>

        Bustage fix.

        https://bugs.webkit.org/show_bug.cgi?id=22373
        Ports busted by addition of ScriptValue.{h,cpp}

        * GNUmakefile.am:
        * WebCore.pro:
        * WebCoreSources.bkl:
        * dom/XMLTokenizerQt.cpp:
        * plugins/PluginView.cpp:

2008-11-19  Darin Fisher  <darin@chromium.org>

        Reviewed by Geoff Garen.

        https://bugs.webkit.org/show_bug.cgi?id=22345
        Define ScriptValue as a thin container for a JSC::Value*.

        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/ScheduledAction.cpp:
        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::evaluate):
        * bindings/js/ScriptController.h:
        * bindings/js/ScriptValue.cpp: Added.
        (WebCore::ScriptValue::getString):
        * bindings/js/ScriptValue.h: Added.
        (WebCore::ScriptValue::ScriptValue):
        (WebCore::ScriptValue::jsValue):
        * dom/ScriptElement.cpp:
        * dom/XMLTokenizer.cpp:
        * dom/XMLTokenizerLibxml2.cpp:
        * html/HTMLTokenizer.cpp:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::executeIfJavaScriptURL):
        (WebCore::FrameLoader::executeScript):
        * loader/FrameLoader.h:

2008-11-19  Beth Dakin  <bdakin@apple.com>

        Reviewed by Justin Garcia.

        Fix for <rdar://problem/5472507> Remove color property when a user
        sets color to black

        This patch prevents us from inserting font nodes during the
        ApplyStyleCommand if they will not change the computed style of an
        element.

        * editing/ApplyStyleCommand.cpp:
        (WebCore::fontColorChangesComputedStyle):
        (WebCore::fontSizeChangesComputedStyle):
        (WebCore::fontFaceChangesComputedStyle):
        (WebCore::ApplyStyleCommand::addInlineStyleIfNeeded):

2008-11-19  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Antti Koivisto

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

        Fix hit testing in controls on transformed video elements
        by replacing absoluteBoundingBoxRect().contains() with
        code that maps the point into local coords, taking
        transforms into account.

        Test: media/video-controls-transformed.html

        * platform/graphics/MediaPlayer.h:
        * rendering/RenderMedia.cpp:
        (WebCore::rendererContainsPoint):
        (WebCore::RenderMedia::forwardEvent):

2008-11-19  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Darin Adler

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

        Need to educate style sharing about autofill, so that style does not
        get shared between input elements that are autofilled, and those
        that are not. Setting autofill should also do a setChanged on the node.

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::canShareStyleWithElement):
        (WebCore::CSSStyleSelector::SelectorChecker::checkOneSelector):
        * dom/Node.h:
        (WebCore::Node::isAutofilled):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::setAutofilled):
        * html/HTMLInputElement.h:
        (WebCore::HTMLInputElement::isAutofilled):

2008-11-19  Brett Wilson  <brettw@chromium.org>

        Reviewed by Antti Koivisto.

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

        Clear the subresource loader client when the client is removed in
        response to a 304 (not modified). This prevents an inconsistent state
        where the loader thinks it's active and the loader::Host doesn't.

        * loader/loader.cpp:
        (WebCore::Loader::Host::didReceiveResponse):

2008-11-19  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=22355
        Systematize code for replacing global constructors

        Test: fast/workers/worker-replace-global-constructor.html

        * bindings/js/JSDOMWindowBase.cpp:
        (setJSDOMWindowBaseEvent): Changed to put the value as property, matching what generated
        code for global constructor setters does.
        (setJSDOMWindowBaseAudio): Ditto.
        (setJSDOMWindowBaseImage): Ditto.
        (setJSDOMWindowBaseMessageChannel): Ditto.
        (setJSDOMWindowBaseOption): Ditto.
        (setJSDOMWindowBaseWorker): Ditto.
        (setJSDOMWindowBaseXMLHttpRequest): Ditto.
        (setJSDOMWindowBaseXSLTProcessor): Ditto.
        (WebCore::JSDOMWindowBase::put): Removed special cases for global constructors.

        * bindings/js/JSWorkerContext.cpp:
        (WebCore::JSWorkerContext::getOwnPropertySlot): Look up overrides before own properties,
        as it is done for Window.
        (WebCore::setJSWorkerContextMessageEvent): Implemented in the same way as Window global
        constructors are.
        (WebCore::setJSWorkerContextWorkerLocation): Ditto.

2008-11-19  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=22341
        Text codecs should not use static data without locking

        * platform/text/TextCodecICU.cpp:
        * platform/text/mac/TextCodecMac.cpp:
        Made cached converters per-thread.

        * platform/text/TextEncodingRegistry.cpp:
        (WebCore::encodingRegistryMutex): Added a mutex for codec maps access.
        (WebCore::addToTextCodecMap): Don't use TextEncoding just to canonicalize the name, as it
        causes a deadlock due to a recursive call into registry.
        (WebCore::buildBaseTextCodecMaps): Added assertions.
        (WebCore::newTextCodec): Take a lock to avoid concurrent access to codec maps.
        (WebCore::atomicCanonicalTextEncodingName): Ditto.
        (WebCore::noExtendedTextEncodingNameUsed): Added a comment, explaining why locking is not
        necessary here.

2008-11-19  Alexey Proskuryakov  <ap@webkit.org>

        Touch WebCorePrefix.h to force a rebuild, needed because of changed feature defines.

        * WebCorePrefix.h:

2008-11-19  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=22310
        Worker exceptions should be printed to console

        * dom/Document.cpp: (WebCore::Document::reportException):
        * dom/Document.h:
        * dom/ScriptExecutionContext.h:
        * dom/WorkerContext.cpp: (WebCore::WorkerContext::reportException):
        * dom/WorkerContext.h:
        Added a reportException() method on ScriptExecutionContext. It forwards the exception info
        up until it finds a Document context, and then it prints it to console.

        * bindings/js/JSEventListener.cpp:
        (WebCore::JSAbstractEventListener::handleEvent): Don't talk to Console directly, use
        ScriptExecutionContext::reportException. Also, fixed a bug where Document::updateDocumentsRendering()
        could be called from workers.
        (WebCore::JSLazyEventListener::parseCode): Moved variable declaration inside if block for clarity.

        * bindings/js/WorkerScriptController.cpp: (WebCore::WorkerScriptController::evaluate):
        Report exceptions to ScriptExecutionContext.

        * dom/WorkerMessagingProxy.cpp:
        (WebCore::MessageWorkerTask::performTask):
        (WebCore::WorkerExceptionTask::create):
        (WebCore::WorkerExceptionTask::WorkerExceptionTask):
        (WebCore::WorkerExceptionTask::performTask):
        (WebCore::WorkerMessagingProxy::postWorkerException):
        * dom/WorkerMessagingProxy.h:
        Added a task for posting exception information.

        * bindings/js/JSDOMBinding.cpp:
        (WebCore::reportException):
        (WebCore::reportCurrentException):
        * bindings/js/JSDOMBinding.h:
        Added helper methods for reporting exceptions via ScriptExecutionContext.

        * page/Console.cpp:
        * page/Console.h:
        Removed methods for directly reporting exceptions to console.

        * bindings/js/JSCustomPositionCallback.cpp:
        (WebCore::JSCustomPositionCallback::handleEvent):
        * bindings/js/JSCustomPositionErrorCallback.cpp:
        (WebCore::JSCustomPositionErrorCallback::handleEvent):
        * bindings/js/JSCustomSQLStatementCallback.cpp:
        (WebCore::JSCustomSQLStatementCallback::handleEvent):
        * bindings/js/JSCustomSQLStatementErrorCallback.cpp:
        (WebCore::JSCustomSQLStatementErrorCallback::handleEvent):
        * bindings/js/JSCustomSQLTransactionCallback.cpp:
        (WebCore::JSCustomSQLTransactionCallback::handleEvent):
        * bindings/js/JSCustomSQLTransactionErrorCallback.cpp:
        (WebCore::JSCustomSQLTransactionErrorCallback::handleEvent):
        * bindings/js/JSCustomVoidCallback.cpp:
        (WebCore::JSCustomVoidCallback::handleEvent):
        * bindings/js/JSCustomXPathNSResolver.cpp:
        (WebCore::JSCustomXPathNSResolver::lookupNamespaceURI):
        * bindings/js/ScheduledAction.cpp:
        (WebCore::ScheduledAction::execute):
        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::evaluate):
        * bindings/objc/WebScriptObject.mm:
        (WebCore::addExceptionToConsole):
        Switch to JSDOMBinding methods for reporting exceptions.

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

        Reviewed by Mark Rowe.

        - WebCore part of https://bugs.webkit.org/show_bug.cgi?id=22331
          <rdar://problem/6381657> REGRESSION: Contextual menu no longer has an "Inspect Element" item

        * platform/ContextMenuItem.h:
        (WebCore::ContextMenuAction): Reorder this enum to keep it in sync with
        the one in WebUIDelegate.h.

2008-11-18  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=22346
        PlatformString should also include HashSet.h for non-JSC builds

        * platform/text/PlatformString.h:

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

        Reviewed by Holger Hans Peter Freyther.

        Flip check added in recent refactoring so the background gets updated when the background color is valid, not invalid.

        * loader/FrameLoaderClient.cpp: (WebCore::FrameLoaderClient::transitionToCommittedForNewPage):

2008-11-18  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=22343
        Remove unused runtime/Collector, JSLock includes in Page.cpp

        * page/Page.cpp:

2008-11-18  Ada Chan  <adachan@apple.com>

        Bug 22344: Make select popup window opaque
        https://bugs.webkit.org/show_bug.cgi?id=22344

        Reviewed by Steve Falkenburg.

        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenu::show):

2008-11-18  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=22342
        Remove unused JSLock.h include

        * dom/Document.cpp:

2008-11-18  Nikolas Zimmermann  <nikolas.zimmermann@torchmobile.com>

        Reviewed by Sam Weinig.

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

        Add WMLBRElement, correcting <br/> behaviour in WML.
        Enable entity replacment for WML documents.
        Handle WML specific <p> 'mode' attribute.

        Generate layout tests results for fast/wml.

        Tests cases that pass now:
        fast/wml/br-element-in-table.wml
        fast/wml/br-element-in-text.wml
        fast/wml/case-sensitivity.wml
        fast/wml/cdata-section.wml
        fast/wml/comment.wml
        fast/wml/entity.wml
        fast/wml/p-align.wml
        fast/wml/p-mode.wml
        fast/wml/text-emphasis.wml
        fast/wml/validate-dtd.wml

        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/XMLTokenizer.cpp:
        (WebCore::XMLTokenizer::isWMLDocument):
        (WebCore::XMLTokenizer::insertErrorMessageBlock):
        * dom/XMLTokenizer.h:
        * dom/XMLTokenizerLibxml2.cpp:
        (WebCore::XMLTokenizer::internalSubset):
        (WebCore::getEntityHandler):
        * dom/XMLTokenizerQt.cpp:
        (WebCore::XMLTokenizer::parse):
        * wml/WMLBRElement.cpp: Added.
        (WebCore::WMLBRElement::WMLBRElement):
        (WebCore::WMLBRElement::mapToEntry):
        (WebCore::WMLBRElement::parseMappedAttribute):
        (WebCore::WMLBRElement::createRenderer):
        * wml/WMLBRElement.h: Added.
        * wml/WMLPElement.cpp:
        (WebCore::WMLPElement::parseMappedAttribute):
        (WebCore::WMLPElement::insertedIntoDocument):
        * wml/WMLPElement.h:
        * wml/WMLTagNames.in:

2008-11-18  Alexey Proskuryakov  <ap@webkit.org>

        Windows build fix.

        * WebCore.vcproj/WebCore.vcproj: Fix relative paths to use $(WebKitOutputDir).

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

        - try to fix Wx build

        * WebCoreSources.bkl: Added FrameLoaderClient.cpp.

2008-11-18  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=22337
        Enable workers by default

        Tests: fast/workers/worker-constructor.html
               fast/workers/worker-event-listener.html
               fast/workers/worker-gc.html
               fast/workers/worker-location.html

        * Configurations/WebCore.xcconfig:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.vcproj/build-generated-files.sh:
        Define ENABLE_WORKERS.

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

        Reviewed by Alexey Proskuryakov.

        - first cut at https://bugs.webkit.org/show_bug.cgi?id=10957
          <rdar://problem/5516594> please add support for HTTP-only cookies

        Test: http/tests/xmlhttprequest/get-dangerous-headers.html

        No test for HTTP-only support in JavaScript yet, since the Mac and Win changes
        require an updated CFNetwork.

        * platform/mac/CookieJar.mm:
        (WebCore::isHTTPOnly): Added.
        (WebCore::filterCookies): Added.
        (WebCore::cookies): Use filterCookies to prevent getting HTTP-only cookies.
        (WebCore::setCookies): Use filterCookies to prevent setting HTTP-only cookies.

        * platform/network/win/CookieJarCFNetWin.cpp:
        (WebCore::isHTTPOnly): Added.
        (WebCore::filterCookies): Added.
        (WebCore::setCookies): Use filterCookies to prevent getting HTTP-only cookies.
        (WebCore::cookies): Use filterCookies to prevent getting HTTP-only cookies.

        * xml/XMLHttpRequest.cpp:
        (WebCore::isSetCookieHeader): Added.
        (WebCore::XMLHttpRequest::getAllResponseHeaders): Hide Set-Cookie headers from
        clients that don't have local-resource privileges.
        (WebCore::XMLHttpRequest::getResponseHeader): Ditto.

        - clean soup-specific details out of shared cookie jar header

        * platform/CookieJar.h: Removed the soup-specific parts of this.
        * platform/network/soup/CookieJarSoup.cpp: Changed to include
        CookieJarSoup.h. Tweaked implementation a bit to handle UTF-8 better.
        * platform/network/soup/CookieJarSoup.h: Added. Has the Soup-specified
        part of CookieJar.h.
        * platform/network/soup/ResourceHandleSoup.cpp: Changed to include
        CookieJarSoup.h.

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

        https://bugs.webkit.org/show_bug.cgi?id=22329
        Improper bitwise and tests against 0 in Windows context menu code

        Reviewed by John Sullivan.

        * platform/win/ContextMenuItemWin.cpp:
        (WebCore::ContextMenuItem::type):
        (WebCore::ContextMenuItem::enabled):

2008-11-18  John Sullivan  <sullivan@apple.com>

        Yet more Mac build fixing

        * WebCore.base.exp: Export __ZTVN7WebCore17FrameLoaderClientE

2008-11-18  Tor Arne Vestbø  <tavestbo@trolltech.com>

        Reviewed by Simon Hausmann.

        React properly to frame rect changes for QWidget based plugins

        We now set the geometry of the QWidget in frameRectsChanged,
        intead of setFrameRect, which means we pick up the changes to
        the frame rect when scrolling. We also set a mask on the
        widget to keep it from painting over scrollbars and the like

        * platform/qt/WidgetQt.cpp:
        (WebCore::Widget::setFrameRect):

2008-11-18  Tor Arne Vestbø  <tavestbo@trolltech.com>

        Rubber-stamped by Simon Hausmann.

        Don't mark scrollbars as focused in QtWebKit

        When initing from the widget we also got the focus state,
        but this does not make sense for scrollbars.

        * platform/qt/ScrollbarThemeQt.cpp:
        (WebCore::styleOptionSlider):

2008-11-18  Alexey Proskuryakov  <ap@webkit.org>

        More Mac build fixing.

        * WebCore.base.exp: Export FrameLoaderClient destructor.

2008-11-18  Alexey Proskuryakov  <ap@webkit.org>

        Mac build fix.

        * WebCore.xcodeproj/project.pbxproj: Add FrameLoaderClient.cpp for now.

2008-11-18  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Simon Hausmann.

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

        Attempt to share transitionToCommittedForNewPage of FrameLoaderClient with the different ports

        After Hyatt's work on Widget and ScrollView there is little difference
        between the implementation of Qt, Gtk+ and Win. In fact any kind of
        difference is mostly a bug. Alp has fixed two of such errors for the Gtk+
        port and the Qt port has at least one of them left.

        The only difference between the implementations is in getting the the
        IntSize for the new FrameView, the background color to be applied and
        eventually some post processing.

        Unify the implementations by providing a static helper function that
        takes a Frame, IntSize, color and transparency bit and calling it from
        the Gtk+, the Qt and the Windows port.

        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * loader/FrameLoaderClient.cpp: Added.
        (WebCore::FrameLoaderClient::~FrameLoaderClient):
        (WebCore::FrameLoaderClient::transitionToCommittedForNewPage):
        * loader/FrameLoaderClient.h:

2008-11-18  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Simon Hausmann.

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

        Move setting the background color and transparency from WebKit/win
        to WebCore. This allows WebKit/win, WebKit/Qt and WebKit/Gtk+
        to share this code.

        * page/FrameView.cpp:
        (WebCore::FrameView::updateBackgroundRecursively):
        * page/FrameView.h:

2008-11-18  Ariya Hidayat  <ariya.hidayat@trolltech.com>

        Reviewed by Tor Arne Vestbø.

        Fix the bug where select elements are painted without border.
        http://trolltech.com/developer/task-tracker/index_html?id=218957&method=entry

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

2008-11-18  Jan Michael Alonzo  <jmalonzo@webkit.org>

        Gtk build fix. Not reviewed.

        * GNUmakefile.am: Fix USER_AGENT_STYLESHEETS, wml.css is in css/,
        not in wml/.

2008-11-18  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=22308
        Improve Worker GC behavior

        * dom/ActiveDOMObject.cpp: (WebCore::ActiveDOMObject::hasPendingActivity):
        * dom/ActiveDOMObject.h:
        Made hasPendingActivity() virtual, letting Worker add behavior to it.

        * bindings/js/WorkerScriptController.cpp: (WebCore::WorkerScriptController::evaluate):
        * dom/WorkerThread.cpp: (WebCore::WorkerThread::workerThread):
        Tell message proxy whether there are active objects in the worker whenever JS execution
        finishes.

        * dom/ScriptExecutionContext.h: (WebCore::ScriptExecutionContext::activeDOMObjects):
        Added a typedef for activeDOMObjects() return type, necessary to declare iterators.

        * dom/Worker.h:
        * dom/Worker.cpp: (WebCore::Worker::hasPendingActivity): A Worker is active if it is still
        loading, or if it has unconfirmed messages, or it the worker thread has pending activity.

        * dom/WorkerContext.h:
        * dom/WorkerContext.cpp: (WebCore::WorkerContext::hasPendingActivity): Check all registered
        active objects for pending activity.

        * dom/WorkerMessagingProxy.cpp:
        (WebCore::MessageWorkerContextTask::performTask):
        (WebCore::WorkerThreadActivityReportTask::create):
        (WebCore::WorkerThreadActivityReportTask::WorkerThreadActivityReportTask):
        (WebCore::WorkerThreadActivityReportTask::performTask):
        (WebCore::WorkerMessagingProxy::WorkerMessagingProxy):
        (WebCore::WorkerMessagingProxy::postMessageToWorkerContext):
        (WebCore::WorkerMessagingProxy::workerObjectDestroyed):
        (WebCore::WorkerMessagingProxy::workerContextDestroyedInternal):
        (WebCore::WorkerMessagingProxy::confirmWorkerThreadMessage):
        (WebCore::WorkerMessagingProxy::reportWorkerThreadActivity):
        (WebCore::WorkerMessagingProxy::reportWorkerThreadActivityInternal):
        (WebCore::WorkerMessagingProxy::workerThreadHasPendingActivity):
        * dom/WorkerMessagingProxy.h:
        Track outstanding messages, and activity reported by worker thread.

2008-11-18  Alexey Proskuryakov  <ap@webkit.org>

        Rubber-stamped by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=22306
        Disable channel messaging support

        * bindings/js/JSDOMWindowBase.cpp:
        (jsDOMWindowBaseMessageChannel):
        * page/DOMWindow.idl:
        Hide MesssagePort and MessageChannel global constructors. Due to the way MessageChannel
        constructor is added, it remains enumerable, but undefined.

2008-11-17  Nikolas Zimmermann  <nikolas.zimmermann@torchmobile.com>

        Reviewed by Mark Rowe.

        Remove WBXML code. MainResourceLoader is not an appropriate location.
        Revert until we find a better place.

        The mime type which belongs to wmlc should be enabled anyway so WML documents get build.
        Remove the ENABLE(WBXML) blocks around these types in MIMETypeRegistry / DOMImplementation.

        * WebCore.pro:
        * dom/DOMImplementation.cpp:
        (WebCore::DOMImplementation::createDocument):
        * loader/MainResourceLoader.cpp:
        (WebCore::MainResourceLoader::addData):
        * platform/MIMETypeRegistry.cpp:
        (WebCore::initializeSupportedNonImageMimeTypes):

2008-11-17  Nikolas Zimmermann  <nikolas.zimmermann@torchmobile.com>

        Not reviewed. Build fix.

        Oops, disable WML by default on Qt.

        * WebCore.pro:

2008-11-17  Nikolas Zimmermann  <nikolas.zimmermann@torchmobile.com>

        Reviewed by George Staikos.

        Fixes: https://bugs.webkit.org/show_bug.cgi?id=22324 (Add basic subset of WML elements)

        Add first bits of WML support. Only <card> & <p> and <a> elements are supported in this first patch.
        Support for most other elements will be added step-by-step (merging in small chunks from a big patch).

        WML is not build by default.

        * DerivedSources.make: Handle WMLNames/WMLElementFactory generation.
        * GNUmakefile.am: Add new files and generator hooks.
        * WebCore.pro: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * css/CSSStyleSelector.cpp: Load wml.css on demand, just like it's done for SVG.
        (WebCore::linkAttribute):
        (WebCore::CSSStyleSelector::styleForElement):c
        * css/wml.css: Added.
        * dom/DOMImplementation.cpp: Handle WMLDocument creation
        (WebCore::DOMImplementation::createDocument):
        * dom/Document.cpp: Handle WMLElement creation.
        (WebCore::Document::createElement):
        * dom/Document.h: Add helper function identifying WML documents.
        (WebCore::Document::isWMLDocument):
        * dom/Node.h: Add heper function identifying WML elements.
        (WebCore::Node::isWMLElement):
        * dom/XMLTokenizer.cpp: Handle errors in WML documents
        (WebCore::XMLTokenizer::insertErrorMessageBlock):
        * dom/XMLTokenizerLibxml2.cpp: Add WML DTD checks.
        (WebCore::XMLTokenizer::internalSubset):
        * dom/XMLTokenizerQt.cpp: Ditto.
        (WebCore::):
        * dom/make_names.pl: Force internal linkage for the "tagConstructor" functions, avoiding SVG<->WML clashes.
        * history/BackForwardList.cpp: Add WML specific function for clearing the history.
        (WebCore::BackForwardList::clearWmlPageHistory):
        * history/BackForwardList.h:
        * loader/FrameLoader.cpp: Add WML specific 'shouldReload' logic.
        (WebCore::FrameLoader::FrameLoader):
        (WebCore::FrameLoader::setForceReloadWmlDeck):
        (WebCore::FrameLoader::shouldReload):
        (WebCore::FrameLoader::loadItem):
        * loader/FrameLoader.h:
        * loader/MainResourceLoader.cpp: Add WBXML support (only enabled on Linux/Qt at the moment)
        (WebCore::MainResourceLoader::addData):
        * page/Frame.cpp: Initialize WMLNames.
        (WebCore::Frame::Frame):
        * page/Page.cpp: Maintain WMLPageState object per Page.
        (WebCore::Page::Page):
        (WebCore::Page::setWMLPageState):
        (WebCore::Page::wmlPageState):
        * page/Page.h:
        * platform/MIMETypeRegistry.cpp: Recognize WML extensions.
        (WebCore::initializeSupportedNonImageMimeTypes):
        * platform/gtk/MIMETypeRegistryGtk.cpp: Ditto.
        (WebCore::MIMETypeRegistry::getMIMETypeForExtension):
        * platform/qt/MIMETypeRegistryQt.cpp: Ditto.
        (WebCore::):
        * platform/win/MIMETypeRegistryWin.cpp: Ditto.
        (WebCore::MIMETypeRegistry::getMIMETypeForExtension):
        * manual-tests/wml: Added.
        * manual-tests/wml/a-br-element.wml: Added.
        * manual-tests/wml/a-element.wml: Added.
        * manual-tests/wml/a-img-element.wml: Added.
        * manual-tests/wml/access-target.wml: Added.
        * manual-tests/wml/anchor-br-element.wml: Added.
        * manual-tests/wml/anchor-element.wml: Added.
        * manual-tests/wml/anchor-img-element.wml: Added.
        * manual-tests/wml/card-newcontext-attr.wml: Added.
        * manual-tests/wml/card-onenterbackward.wml: Added.
        * manual-tests/wml/card-onenterforward.wml: Added.
        * manual-tests/wml/card-ontimer.wml: Added.
        * manual-tests/wml/deck-access-control.wml: Added.
        * manual-tests/wml/go-element.wml: Added.
        * manual-tests/wml/input-emptyok.wml: Added.
        * manual-tests/wml/input-format.wml: Added.
        * manual-tests/wml/onevent-go.wml: Added.
        * manual-tests/wml/onevent-noop.wml: Added.
        * manual-tests/wml/onevent-prev.wml: Added.
        * manual-tests/wml/onevent-refresh.wml: Added.
        * manual-tests/wml/onevent-shadow.wml: Added.
        * manual-tests/wml/postfield-get.wml: Added.
        * manual-tests/wml/postfield-post.wml: Added.
        * manual-tests/wml/select-element.wml: Added.
        * manual-tests/wml/select-onpick-event.wml: Added.
        * manual-tests/wml/setvar-element.wml: Added.
        * manual-tests/wml/targetdeck.wml: Added.
        * manual-tests/wml/task-go-in-anchor.wml: Added.
        * manual-tests/wml/task-noop-in-do.wml: Added.
        * manual-tests/wml/task-noop-in-onevent.wml: Added.
        * manual-tests/wml/task-prev-in-anchor.wml: Added.
        * manual-tests/wml/task-refresh-in-anchor.wml: Added.
        * manual-tests/wml/template-go.wml: Added.
        * manual-tests/wml/template-onevent.wml: Added.
        * manual-tests/wml/template-ontimer.wml: Added.
        * manual-tests/wml/timer.wml: Added.
        * manual-tests/wml/variable-substitution.wml: Added.
        * wml: Added.
        * wml/WMLAElement.cpp: Added.
        (WebCore::WMLAElement::WMLAElement):
        (WebCore::WMLAElement::parseMappedAttribute):
        (WebCore::WMLAElement::supportsFocus):
        (WebCore::WMLAElement::isFocusable):
        (WebCore::WMLAElement::isMouseFocusable):
        (WebCore::WMLAElement::isKeyboardFocusable):
        (WebCore::WMLAElement::defaultEventHandler):
        (WebCore::WMLAElement::accessKeyAction):
        (WebCore::WMLAElement::isURLAttribute):
        (WebCore::WMLAElement::target):
        * wml/WMLAElement.h: Added.
        * wml/WMLAttributeNames.in: Added.
        * wml/WMLCardElement.cpp: Added.
        (WebCore::WMLCardElement::WMLCardElement):
        * wml/WMLCardElement.h: Added.
        * wml/WMLDocument.cpp: Added.
        (WebCore::WMLDocument::WMLDocument):
        (WebCore::WMLDocument::~WMLDocument):
        * wml/WMLDocument.h: Added.
        (WebCore::WMLDocument::create):
        (WebCore::WMLDocument::isWMLDocument):
        * wml/WMLElement.cpp: Added.
        (WebCore::WMLElement::WMLElement):
        (WebCore::WMLElement::mapToEntry):
        (WebCore::WMLElement::parseMappedAttribute):
        (WebCore::WMLElement::rendererIsNeeded):
        (WebCore::WMLElement::createRenderer):
        * wml/WMLElement.h: Added.
        (WebCore::WMLElement::isWMLElement):
        * wml/WMLPElement.cpp: Added.
        (WebCore::WMLPElement::WMLPElement):
        (WebCore::WMLPElement::mapToEntry):
        (WebCore::WMLPElement::parseMappedAttribute):
        * wml/WMLPElement.h: Added.
        * wml/WMLPageState.cpp: Added.
        (WebCore::WMLPageState::WMLPageState):
        (WebCore::WMLPageState::~WMLPageState):
        (WebCore::WMLPageState::reset):
        (WebCore::WMLPageState::setNeedCheckDeckAccess):
        (WebCore::WMLPageState::isDeckAccessible):
        * wml/WMLPageState.h: Added.
        (WebCore::WMLPageState::storeVariable):
        (WebCore::WMLPageState::storeVariables):
        (WebCore::WMLPageState::getVaribale):
        (WebCore::WMLPageState::hasVariables):
        (WebCore::WMLPageState::historyLength):
        (WebCore::WMLPageState::setHistoryLength):
        (WebCore::WMLPageState::page):
        (WebCore::WMLPageState::activeCard):
        (WebCore::WMLPageState::setActiveCard):
        (WebCore::WMLPageState::setDeckAccessDomain):
        (WebCore::WMLPageState::setDeckAccessPath):
        (WebCore::WMLPageState::hasDeckAccess):
        * wml/WMLTagNames.in: Added.

2008-11-17  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig.

        Updated for JavaScriptCore renames.

        * WebCore.pro:
        * webcore-base.bkl:

2008-11-17  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by Beth Dakin.

        <rdar://problem/4922709> Copying less than a paragraph of quoted text and pasting it doesn't retain quote level

        There was code to intentionally avoid quoting pasted content if less than a paragraph of
        it was copied.  That was added for <rdar://problem/5006779>, but was unnecessary because
        that bug was about Paste and Match style for single paragraphs.  And quote stripping for
        Paste and Match style is handled elsewhere.

        * editing/markup.cpp:
        (WebCore::createMarkup):

2008-11-17  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig.

        Updated for JavaScriptCore rename.

        * ForwardingHeaders/interpreter/CallFrame.h: Copied from WebCore/ForwardingHeaders/runtime/ExecState.h.
        * ForwardingHeaders/runtime/ExecState.h: Removed.
        * bindings/objc/WebScriptObject.mm:
        * bridge/c/c_instance.cpp:
        * bridge/jni/jni_jsobject.mm:
        * dom/Node.cpp:
        * dom/NodeFilter.cpp:
        * dom/NodeIterator.cpp:
        * dom/TreeWalker.cpp:
        * inspector/JavaScriptCallFrame.h:

2008-11-17  Pierre-Olivier Latour  <pol@apple.com>

        Reviewed by Sam Weinig.

        Added functionality to AnimationController to allow pausing a running
        animation or transition at a given time for testing purposes.

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

        Tests: animations/animation-drt-api.html
               transitions/transition-drt-api.html

        * WebCore.base.exp:
        * WebCore.xcodeproj/project.pbxproj:
        * page/animation/AnimationBase.cpp:
        (WebCore::AnimationBase::updateStateMachine):
        (WebCore::AnimationBase::progress):
        (WebCore::AnimationBase::pauseAtTime):
        * page/animation/AnimationBase.h:
        * page/animation/AnimationController.cpp:
        (WebCore::AnimationControllerPrivate::pauseAnimationAtTime):
        (WebCore::AnimationControllerPrivate::pauseTransitionAtTime):
        (WebCore::AnimationController::pauseAnimationAtTime):
        (WebCore::AnimationController::pauseTransitionAtTime):
        * page/animation/AnimationController.h:
        * page/animation/CompositeAnimation.cpp:
        (WebCore::CompositeAnimationPrivate::isAnimating):
        (WebCore::CompositeAnimationPrivate::pauseAnimationAtTime):
        (WebCore::CompositeAnimationPrivate::pauseTransitionAtTime):
        (WebCore::CompositeAnimation::pauseAnimationAtTime):
        (WebCore::CompositeAnimation::pauseTransitionAtTime):
        * page/animation/CompositeAnimation.h:
        * page/animation/ImplicitAnimation.cpp:
        (WebCore::ImplicitAnimation::animate):

2008-11-17  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig.

        Updated for JavaScriptCore renames.

        * ForwardingHeaders/VM: Removed.
        * ForwardingHeaders/VM/Machine.h: Removed.
        * ForwardingHeaders/interpreter: Added.
        * ForwardingHeaders/interpreter/Interpreter.h: Copied from ForwardingHeaders/VM/Machine.h.
        * WebCore.pro:
        * bindings/js/JSXMLHttpRequestCustom.cpp:
        * page/Console.cpp:
        * webcore-base.bkl:

2008-11-17  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig.

        Updated for JavaScriptCore renames.

        * ForwardingHeaders/runtime/Interpreter.h: Removed.
        * WebCore.vcproj/WebCore.vcproj:
        * bindings/js/JSDOMBinding.h:
        * bindings/js/WorkerScriptController.cpp:
        * bindings/objc/WebScriptObject.mm:
        * bridge/NP_jsobject.cpp:
        * bridge/jni/jni_jsobject.mm:
        * html/CanvasRenderingContext2D.cpp:
        * inspector/JavaScriptCallFrame.cpp:
        * page/Console.cpp:

2008-11-17  Geoffrey Garen  <ggaren@apple.com>

        Not reviewed.

        Try to fix wx build.

        * webcore-base.bkl:

2008-11-17  Greg Bolsinga  <bolsinga@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=21810
        Remove use of static C++ objects that are destroyed at exit time (destructors)

        Find some missing DEFINE_STATIC_LOCAL use cases.

        * bindings/js/JSSVGPODTypeWrapper.h:
        (WebCore::PODTypeWrapperCacheInfoTraits::emptyValue):
        (WebCore::JSSVGDynamicPODTypeWrapperCache::dynamicWrapperHashMap):
        * dom/make_names.pl: Generate code to use DEFINE_STATIC_LOCAL.
        * page/AccessibilityRenderObject.cpp:
        (WebCore::RoleEntry::): This method is only called once, so the array does not have to be static.
        * platform/graphics/FontCache.cpp:
        (WebCore::FontPlatformDataCacheKeyTraits::emptyValue):
        (WebCore::FontDataCacheKeyTraits::emptyValue):
        * rendering/style/RenderStyle.h:
        (WebCore::InheritedFlags::initialTransform):

2008-11-17  Geoffrey Garen  <ggaren@apple.com>

        Not reviewed.

        Try to fix Qt build.

        * WebCore.pro:

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

        Reviewed by Dan Bernstein

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

        Fix resize corner tracking in transformed elements by using
        mapping the point into local coords using absoluteToLocal,
        rather than convertToLayerCoords.

        Test: fast/css/resize-corner-tracking-transformed.html

        * page/EventHandler.h:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::absoluteToContents):
        (WebCore::RenderLayer::offsetFromResizeCorner):
        (WebCore::RenderLayer::isPointInResizeControl):
        * rendering/RenderLayer.h:

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

        Not reviewed.

        Try to fix Qt build.

        * WebCore.pro:

2008-11-16  Greg Bolsinga  <bolsinga@apple.com>

        Reviewed by Geoffrey Garen.

        Use RefPtr and PassRefPtr where appropriate.

        * loader/FTPDirectoryDocument.cpp:
        (WebCore::createTemplateDocumentData):

2008-11-16  Greg Bolsinga  <bolsinga@apple.com>

        Fix build break for real.

        * loader/FTPDirectoryDocument.cpp:
        (WebCore::createTemplateDocumentData):

2008-11-16  Greg Bolsinga  <bolsinga@apple.com>

        Fix build break and bug.

        * loader/FTPDirectoryDocument.cpp:
        (WebCore::createTemplateDocumentData):

2008-11-16  Greg Bolsinga  <bolsinga@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=21810
        Remove use of static C++ objects that are destroyed at exit time (destructors)

        Use DEFINE_STATIC_LOCAL for static RetainPtr<T>, RefPtr<T>. Add additional
        uses of DEFINE_STATIC_LOCAL where appropriate.

        * html/HTMLTableElement.cpp:
        (WebCore::HTMLTableElement::addSharedCellBordersDecl): new the AtomicStrings
        * loader/CachedImage.cpp:
        (WebCore::brokenImage):
        (WebCore::nullImage):
        * loader/FTPDirectoryDocument.cpp:
        (WebCore::_createTemplateDocumentData): Created so accessor has one line initialization
        (WebCore::FTPDirectoryTokenizer::loadDocumentTemplate):
        * loader/icon/IconDatabase.cpp:
        (WebCore::loadDefaultIconRecord):
        * page/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::actionVerb):
        * page/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::actionVerb):
        * page/mac/EventHandlerMac.mm:
        (WebCore::currentEvent):
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::paint):
        * platform/graphics/Image.cpp:
        (WebCore::Image::nullImage):
        * platform/graphics/mac/ColorMac.mm:
        (WebCore::nsColor):
        * platform/graphics/mac/FontCacheMac.mm: new the Strings
        (WebCore::FontCache::getSimilarFontPlatformData):
        * platform/graphics/mac/GraphicsContextMac.mm:
        (WebCore::_createPatternColor): Created so accessor has one line initialization
        (WebCore::GraphicsContext::drawLineForMisspellingOrBadGrammar):
        * platform/graphics/mac/SimpleFontDataMac.mm:
        (WebCore::webFallbackFontFamily):
        * platform/mac/PasteboardMac.mm:
        (WebCore::writableTypesForURL):
        (WebCore::createWritableTypesForImage): Created so accessor has one line initialization
        (WebCore::writableTypesForImage):
        (WebCore::stripAttachmentCharacters):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paintResizer):

2008-11-16  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Darin Adler.

        Do not spit Curl errors into the stdout as this is used by DRT

        We have failing tests results due the curl errors printed to stdout,
        move them to stderr to be able to pass those tests.

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

2008-11-16  Holger Hans Peter Freyther  <zecke@selfish.org>

        - fix the Gtk+ build

        * GNUmakefile.am:

2008-11-16  Darin Adler  <darin@apple.com>

        - try to fix Qt build

        * WebCore.pro: Add the worker-related source files.

2008-11-16  Darin Adler  <darin@apple.com>

        Suggested by Alexey Proskuryakov.

        - fix the GTK build another way

        * GNUmakefile.am: Add the worker-related source files.
        * bindings/js/JSEventTarget.cpp: Take the #if back out.

2008-11-16  Darin Adler  <darin@apple.com>

        - try to fix GTK build

        * bindings/js/JSEventTarget.cpp: Put worker includes inside an #if.

2008-11-16  Darin Adler  <darin@apple.com>

        Reviewed by Dan Bernstein.

        - https://bugs.webkit.org/show_bug.cgi?id=22295
          track which history items are from page load failures

        * history/HistoryItem.cpp: Sort includes, add newly needed ones, and remove
        no-longer-needed ones.
        (WebCore::HistoryItem::HistoryItem): Initialize m_lastVisitWasFailure to false.
        (WebCore::HistoryItem::showTreeWithIndent): Rewrote to avoid appending to a
        String, since that's not efficient.

        * history/HistoryItem.h: Removed unneeded includes. Added lastVisitWasFailure,
        setLastVisitWasFailure, and m_lastVisitWasFailure.

        * history/mac/HistoryItemMac.mm: Add newly-needed include
        (WebCore::HistoryItem::setTransientProperty): Rewrote to avoid keeping a
        m_transientProperties map around when it is empty.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::createHistoryItem): Call setLastVisitWasFailure when
        the page was unreachable or an HTTP page with a status code that indicates
        failure.

2008-11-16  Yong Li  <yong.li@torchmobile.com>

        Reviewed by Timothy Hatcher.
        Landed by George Staikos.

        Optimization: don't relayout, repaint, or emit a DOM event if the
        scroll event didn't scroll anywhere.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::scrollToOffset): add early exit

2008-11-16  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=22290
        Remove cross-heap GC and MessagePort multi-threading support

        It is broken (and may not be implementable at all), and no longer needed, as we
        don't use MessagePorts for communication with workers any more.

        * bindings/js/JSDOMBinding.cpp:
        * bindings/js/JSDOMBinding.h:
        * bindings/js/JSDOMWindowBase.cpp:
        * bindings/js/JSDOMWindowBase.h:
        Removed cross-heap GC implementation.

        * dom/MessagePort.cpp:
        (WebCore::MessagePort::hasPendingActivity):
        * dom/MessagePort.h:
        Made objects RefCounted instead of ThreadSafeShared, added FIXME comments for code that is
        unnecessarily complicated for single threaded case.

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

        Reviewed by Maciej Stachowiak.

        https://bugs.webkit.org/show_bug.cgi?id=22266
        Stop using MessagePort for communication with workers

        The current MessagePort specification is not well suited for being implemented in a
        multi-threaded or multi-process environment, and this doesn't appear to be easily fixable.
        This patch implements a simpler Mozilla API for workers instead.

        * WebCore.xcodeproj/project.pbxproj:
        * DerivedSources.make:
        * bindings/js/JSDOMWindowBase.cpp: (jsDOMWindowBaseWorker):
        * bindings/js/JSDedicatedWorkerConstructor.cpp: Removed.
        * bindings/js/JSDedicatedWorkerConstructor.h: Removed.
        * bindings/js/JSDedicatedWorkerCustom.cpp: Removed.
        * bindings/js/JSWorkerConstructor.cpp: Copied from WebCore/bindings/js/JSDedicatedWorkerConstructor.cpp.
        * bindings/js/JSWorkerConstructor.h: Copied from WebCore/bindings/js/JSDedicatedWorkerConstructor.h.
        * bindings/js/JSWorkerCustom.cpp: Copied from WebCore/bindings/js/JSDedicatedWorkerCustom.cpp.
        * dom/DedicatedWorker.cpp: Removed.
        * dom/DedicatedWorker.h: Removed.
        * dom/DedicatedWorker.idl: Removed.
        Renamed DedicatedWorker to Worker to match Mozilla and current WHATWG cpec.

        * bindings/js/JSEventListener.cpp: (WebCore::JSAbstractEventListener::handleEvent):
        Clear worker exceptions to avoid hitting an assertion.

        * dom/EventTarget.cpp: (WebCore::EventTarget::toWorker):
        * dom/EventTarget.h:
        * bindings/js/JSEventTarget.cpp: (WebCore::toJS):
        WorkerContext is now an EventTarget, too.

        * bindings/js/JSWorkerContext.cpp: Removed onconnect, constructors for MessageChannel and
        MessagePort. Added postMessage() and onmessage.

        * dom/ScriptExecutionContext.cpp: (WebCore::performTask): Do not reference ScriptExecutionContext
        when posting a task - this operation is not thread safe. It is also not necessary any more,
        as the context is kept alive by WorkerMessagingProxy.

        * dom/Worker.cpp: Copied from WebCore/dom/DedicatedWorker.cpp.
        (WebCore::Worker::Worker): Start loading the script right away - there is no reason to do
        that on a timer.
        (WebCore::Worker::~Worker): Notify messaging proxy.
        (WebCore::Worker::postMessage): Just ask the proxy to post the message.
        (WebCore::Worker::notifyFinished): Notify messaging proxy when a thread object becomes
        available. Also, it is now safe to unsetPendingActivity(), making the object collectable.
        I'm not sure if this is the right lifetime for workers, as unreachable workers with event
        listeners should probably be kept alive, but it at least lets the object be collected.
        (WebCore::Worker::addEventListener): Added an EventTarget implementation.
        (WebCore::Worker::removeEventListener): Added an EventTarget implementation.
        (WebCore::Worker::dispatchEvent): Added an EventTarget implementation.

        * dom/Worker.h: Copied from WebCore/dom/DedicatedWorker.h.
        * dom/Worker.idl: Copied from WebCore/dom/DedicatedWorker.idl.
        Removed onclose, made an EventListener. Actual messaging is now handled by WorkerMessagingProxy.

        * dom/WorkerContext.cpp:
        (WebCore::WorkerContext::~WorkerContext): Notify messaging proxy that the context was shut
        down successfully.
        (WebCore::WorkerContext::postMessage): Added. Post the message via messaging proxy.

        * dom/WorkerContext.h: Added postMessage and onmessage, removed onconnect.

        * dom/WorkerMessagingProxy.cpp: Added.
        * dom/WorkerMessagingProxy.h: Added.
        This new class implements actual messaging. It is notified when a Worker is garbage collected,
        and asks the thread to shut down. It also owns the thread object, and references script
        execution context, making it safe to post messages to it remotely.

        * dom/WorkerThread.cpp:
        * dom/WorkerThread.h:
        Keep a reference to messaging proxy, not to Worker itself. Also, the thread object no longer
        keeps itself alive - it is now the job of messaging proxy.

2008-11-15  Darin Adler  <darin@apple.com>

        Rubber stamped by Geoff Garen.

        - do the long-planned StructureID -> Structure rename

        * ForwardingHeaders/runtime/Structure.h: Copied from WebCore/ForwardingHeaders/runtime/StructureID.h.
        * ForwardingHeaders/runtime/StructureID.h: Removed.
        * bindings/js/JSAudioConstructor.cpp:
        (WebCore::JSAudioConstructor::JSAudioConstructor):
        * bindings/js/JSDOMBinding.cpp:
        (WebCore::getCachedDOMStructure):
        (WebCore::cacheDOMStructure):
        * bindings/js/JSDOMBinding.h:
        (WebCore::DOMObject::DOMObject):
        (WebCore::getDOMStructure):
        * bindings/js/JSDOMGlobalObject.cpp:
        (WebCore::JSDOMGlobalObject::JSDOMGlobalObject):
        * bindings/js/JSDOMGlobalObject.h:
        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::JSDOMWindowBase):
        * bindings/js/JSDOMWindowBase.h:
        * bindings/js/JSDOMWindowShell.cpp:
        (WebCore::JSDOMWindowShell::JSDOMWindowShell):
        (WebCore::JSDOMWindowShell::setWindow):
        * bindings/js/JSDOMWindowShell.h:
        (WebCore::JSDOMWindowShell::createStructure):
        * bindings/js/JSDedicatedWorkerConstructor.cpp:
        (WebCore::JSDedicatedWorkerConstructor::JSDedicatedWorkerConstructor):
        * bindings/js/JSHTMLAllCollection.h:
        (WebCore::JSHTMLAllCollection::JSHTMLAllCollection):
        (WebCore::JSHTMLAllCollection::createStructure):
        * bindings/js/JSImageConstructor.cpp:
        (WebCore::JSImageConstructor::JSImageConstructor):
        * bindings/js/JSInspectedObjectWrapper.cpp:
        (WebCore::JSInspectedObjectWrapper::wrap):
        (WebCore::JSInspectedObjectWrapper::JSInspectedObjectWrapper):
        * bindings/js/JSInspectedObjectWrapper.h:
        * bindings/js/JSInspectorCallbackWrapper.cpp:
        (WebCore::leakInspectorCallbackWrapperStructure):
        (WebCore::JSInspectorCallbackWrapper::wrap):
        (WebCore::JSInspectorCallbackWrapper::JSInspectorCallbackWrapper):
        * bindings/js/JSInspectorCallbackWrapper.h:
        * bindings/js/JSMessageChannelConstructor.cpp:
        (WebCore::JSMessageChannelConstructor::JSMessageChannelConstructor):
        * bindings/js/JSNamedNodesCollection.h:
        (WebCore::JSNamedNodesCollection::createStructure):
        * bindings/js/JSOptionConstructor.cpp:
        (WebCore::JSOptionConstructor::JSOptionConstructor):
        * bindings/js/JSQuarantinedObjectWrapper.cpp:
        (WebCore::JSQuarantinedObjectWrapper::JSQuarantinedObjectWrapper):
        * bindings/js/JSQuarantinedObjectWrapper.h:
        (WebCore::JSQuarantinedObjectWrapper::createStructure):
        * bindings/js/JSRGBColor.h:
        (WebCore::JSRGBColor::createStructure):
        * bindings/js/JSWorkerContext.cpp:
        (WebCore::createJSWorkerContextStructure):
        (WebCore::JSWorkerContext::JSWorkerContext):
        (WebCore::JSWorkerContext::createPrototype):
        * bindings/js/JSWorkerContext.h:
        (WebCore::JSWorkerContext::createStructure):
        (WebCore::JSWorkerContextPrototype::JSWorkerContextPrototype):
        (WebCore::JSWorkerContextPrototype::createStructure):
        * bindings/js/JSXMLHttpRequestConstructor.cpp:
        (WebCore::JSXMLHttpRequestConstructor::JSXMLHttpRequestConstructor):
        * bindings/js/JSXSLTProcessorConstructor.cpp:
        (WebCore::JSXSLTProcessorConstructor::JSXSLTProcessorConstructor):
        * bindings/scripts/CodeGeneratorJS.pm:
        * bridge/objc/objc_runtime.h:
        (JSC::Bindings::ObjcFallbackObjectImp::createStructure):
        * bridge/qt/qt_runtime.cpp:
        (JSC::Bindings::QtConnectionObject::execute):
        * bridge/qt/qt_runtime.h:
        (JSC::Bindings::QtRuntimeMethod::createStructure):
        * bridge/runtime_array.h:
        (JSC::RuntimeArray::createStructure):
        * bridge/runtime_method.h:
        (JSC::RuntimeMethod::createStructure):
        * bridge/runtime_object.cpp:
        (JSC::RuntimeObjectImp::RuntimeObjectImp):
        * bridge/runtime_object.h:
        (JSC::RuntimeObjectImp::createStructure):

2008-11-15  Darin Adler  <darin@apple.com>

        Reviewed by Dan Bernstein.

        - fix just-introduced crash in the svg/custom/svg-fonts-in-html.html test

        This gets rid of the crash. It restores the behavior of the CG case from before Dirk
        Shulze removed the platorm-dependent code, but perhaps it should be changed further
        in the future so that the default for no style is "no stroke". I think the patch is
        fine for fill.

        * svg/graphics/SVGPaintServerSolid.cpp:
        (WebCore::SVGPaintServerSolid::setup): Added null checks for svgStyle.
        (WebCore::SVGPaintServerSolid::renderPath): Added null checks for style and svgStyle.

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

        Reviewed by Timothy Hatcher.

        Initialize m_networkStateChangedFunction to 0 as otherwise the check for null will fail.

        https://bugs.webkit.org/show_bug.cgi?id=22284

        * platform/network/NetworkStateNotifier.h:
        (WebCore::NetworkStateNotifier::NetworkStateNotifier):

2008-11-15  Dirk Schulze  <krit@webkit.org>

        Reviewed by Geoffrey Garen.

        r38426 caused a wrong drawing of a LayoutTest. Use another
        way to set the color to pass this test again.

        * svg/graphics/SVGPaintServerSolid.cpp:
        (WebCore::SVGPaintServerSolid::setup):

2008-11-15  Dirk Schulze  <krit@webkit.org>

        Reviewed by Darin Adler.

        Removed platform dependent code on SVGPaintServerSolid.

        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * svg/graphics/SVGPaintServerSolid.cpp:
        (WebCore::SVGPaintServerSolid::setup):
        (WebCore::SVGPaintServerSolid::renderPath):
        * svg/graphics/SVGPaintServerSolid.h:
        * svg/graphics/cairo/SVGPaintServerSolidCairo.cpp: Removed.
        * svg/graphics/cg/SVGPaintServerSolidCg.cpp: Removed.
        * svg/graphics/qt/SVGPaintServerSolidQt.cpp: Removed.

2008-11-15  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig.

        Updated for JavaScriptCore renames.

        * bindings/js/JSNodeCustom.cpp:
        (WebCore::JSNode::mark):
        * bindings/js/JSXMLHttpRequestCustom.cpp:
        (WebCore::JSXMLHttpRequest::send):
        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::evaluate):
        * bindings/js/WorkerScriptController.cpp:
        (WebCore::WorkerScriptController::evaluate):
        * bindings/objc/WebScriptObject.mm:
        (-[WebScriptObject evaluateWebScript:]):
        * bridge/NP_jsobject.cpp:
        (_NPN_Evaluate):
        * bridge/jni/jni_jsobject.mm:
        (JavaJSObject::eval):
        * page/Console.cpp:
        (WebCore::retrieveLastCaller):
        (WebCore::Console::trace):

2008-11-14  Greg Bolsinga  <bolsinga@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=21810
        Remove use of static C++ objects that are destroyed at exit time (destructors)

        Create DEFINE_STATIC_LOCAL macro. Change static local objects to leak to avoid
        exit-time destructor. Update code that was changed to fix this issue that ran
        into a gcc bug (<rdar://problem/6354696> Codegen issue with C++ static reference
        in gcc build 5465). Also typdefs for template types needed to be added in some
        cases so the type could make it through the macro successfully.

        Basically code of the form:
        static T m;
        becomes:
        DEFINE_STATIC_LOCAL(T, m, ());

        Also any code of the form:
        static T& m = *new T;
        also becomes:
        DEFINE_STATIC_LOCAL(T, m, ());

        * ForwardingHeaders/wtf/StdLibExtras.h: Added.
        * bindings/js/GCController.cpp:
        (WebCore::gcController):
        * bindings/js/JSDOMBinding.cpp:
        (WebCore::wrapperSet):
        * bindings/js/JSInspectedObjectWrapper.cpp:
        (WebCore::wrappers):
        * bindings/js/JSInspectorCallbackWrapper.cpp:
        (WebCore::wrappers):
        * bindings/js/JSNavigatorCustom.cpp:
        (WebCore::needsYouTubeQuirk):
        * bridge/runtime_root.cpp:
        (JSC::Bindings::rootObjectSet):
        * css/CSSMutableStyleDeclaration.cpp:
        (WebCore::initShorthandMap):
        (WebCore::CSSMutableStyleDeclaration::removeProperty):
        * css/CSSPrimitiveValue.cpp:
        (WebCore::CSSPrimitiveValue::cssText):
        * css/CSSSelector.cpp:
        (WebCore::CSSSelector::extractPseudoType):
        * css/CSSStyleSelector.cpp:
        (WebCore::screenEval):
        (WebCore::printEval):
        * dom/DOMImplementation.cpp:
        (WebCore::addString):
        (WebCore::isSVG10Feature):
        (WebCore::isSVG11Feature):
        (WebCore::DOMImplementation::isXMLMIMEType):
        * dom/Document.cpp:
        (WebCore::Document::hasPrefixNamespaceMismatch):
        * dom/ScriptElement.cpp:
        (WebCore::isSupportedJavaScriptLanguage):
        * editing/ApplyStyleCommand.cpp:
        (WebCore::styleSpanClassString):
        * editing/HTMLInterchange.cpp:
        (WebCore::):
        * editing/IndentOutdentCommand.cpp:
        (WebCore::indentBlockquoteString):
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::isInterchangeNewlineNode):
        (WebCore::isInterchangeConvertedSpaceSpan):
        * editing/htmlediting.cpp:
        (WebCore::stringWithRebalancedWhitespace):
        (WebCore::nonBreakingSpaceString):
        * editing/markup.cpp:
        (WebCore::appendAttributeValue):
        (WebCore::appendEscapedContent):
        (WebCore::shouldAddNamespaceAttr):
        (WebCore::appendNamespace):
        (WebCore::appendStartMarkup):
        (WebCore::createMarkup):
        * html/HTMLButtonElement.cpp:
        (WebCore::HTMLButtonElement::type):
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::isRecognizedTagName):
        (WebCore::inlineTagList):
        (WebCore::blockTagList):
        * html/HTMLFieldSetElement.cpp:
        (WebCore::HTMLFieldSetElement::type):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::type):
        * html/HTMLKeygenElement.cpp:
        (WebCore::HTMLKeygenElement::type):
        * html/HTMLLegendElement.cpp:
        (WebCore::HTMLLegendElement::type):
        * html/HTMLOptGroupElement.cpp:
        (WebCore::HTMLOptGroupElement::type):
        * html/HTMLOptionElement.cpp:
        (WebCore::HTMLOptionElement::type):
        * html/HTMLParser.cpp:
        (WebCore::HTMLParser::getNode):
        (WebCore::HTMLParser::isHeaderTag):
        (WebCore::HTMLParser::isResidualStyleTag):
        (WebCore::HTMLParser::isAffectedByResidualStyle):
        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::type):
        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::type):
        * inspector/InspectorController.cpp:
        (WebCore::platform):
        * inspector/JavaScriptDebugServer.cpp:
        (WebCore::JavaScriptDebugServer::shared):
        * inspector/JavaScriptProfile.cpp:
        (WebCore::profileCache):
        * inspector/JavaScriptProfileNode.cpp:
        (WebCore::profileNodeCache):
        * loader/FrameLoader.cpp:
        (WebCore::localSchemes):
        * loader/appcache/ApplicationCacheStorage.cpp:
        (WebCore::cacheStorage):
        * loader/archive/ArchiveFactory.cpp:
        (WebCore::archiveMIMETypes):
        (WebCore::ArchiveFactory::registerKnownArchiveMIMETypes):
        * loader/icon/IconDatabase.cpp:
        (WebCore::IconDatabase::defaultDatabaseFilename):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::dragState):
        * page/Frame.cpp:
        (WebCore::createRegExpForLabels):
        (WebCore::keepAliveSet):
        * page/Page.cpp:
        (WebCore::Page::groupName):
        * page/SecurityOrigin.cpp:
        (WebCore::isDefaultPortForProtocol):
        (WebCore::SecurityOrigin::databaseIdentifier):
        * page/mac/FrameMac.mm:
        (WebCore::regExpForLabels):
        * platform/KURL.cpp:
        (WebCore::blankURL):
        * platform/graphics/FontCache.cpp:
        (WebCore::alternateFamilyName):
        * platform/graphics/mac/FontCacheMac.mm:
        (WebCore::FontCache::getSimilarFontPlatformData):
        (WebCore::FontCache::getLastResortFallbackFont):
        * platform/mac/CursorMac.mm:
        (WebCore::leakNamedCursor):
        (WebCore::pointerCursor):
        (WebCore::crossCursor):
        (WebCore::handCursor):
        (WebCore::moveCursor):
        (WebCore::verticalTextCursor):
        (WebCore::cellCursor):
        (WebCore::contextMenuCursor):
        (WebCore::aliasCursor):
        (WebCore::zoomInCursor):
        (WebCore::zoomOutCursor):
        (WebCore::copyCursor):
        (WebCore::noneCursor):
        (WebCore::progressCursor):
        (WebCore::noDropCursor):
        (WebCore::notAllowedCursor):
        (WebCore::iBeamCursor):
        (WebCore::waitCursor):
        (WebCore::helpCursor):
        (WebCore::eastResizeCursor):
        (WebCore::northResizeCursor):
        (WebCore::northEastResizeCursor):
        (WebCore::northWestResizeCursor):
        (WebCore::southResizeCursor):
        (WebCore::southEastResizeCursor):
        (WebCore::southWestResizeCursor):
        (WebCore::westResizeCursor):
        (WebCore::northSouthResizeCursor):
        (WebCore::eastWestResizeCursor):
        (WebCore::northEastSouthWestResizeCursor):
        (WebCore::northWestSouthEastResizeCursor):
        (WebCore::columnResizeCursor):
        (WebCore::rowResizeCursor):
        (WebCore::grabCursor):
        (WebCore::grabbingCursor):
        * platform/mac/ScrollbarThemeMac.mm:
        (WebCore::ScrollbarTheme::nativeTheme):
        * platform/mac/ThemeMac.mm:
        (WebCore::platformTheme):
        * platform/mac/ThreadCheck.mm:
        (WebCoreReportThreadViolation):
        * platform/network/NetworkStateNotifier.cpp:
        (WebCore::networkStateNotifier):
        * platform/network/mac/FormDataStreamMac.mm:
        (WebCore::getStreamFormDataMap):
        (WebCore::getStreamResourceHandleMap):
        * platform/network/mac/ResourceResponseMac.mm:
        (WebCore::ResourceResponse::platformLazyInit):
        * platform/text/TextEncoding.cpp:
        (WebCore::TextEncoding::isJapanese):
        * plugins/PluginMainThreadScheduler.cpp:
        (WebCore::PluginMainThreadScheduler::scheduler):
        * rendering/RenderBlock.cpp:
        (WebCore::continuationOutlineTable):
        (WebCore::RenderBlock::addContinuationWithOutline):
        (WebCore::RenderBlock::paintContinuationOutlines):
        * rendering/RenderCounter.cpp:
        (WebCore::counterMaps):
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::layoutVerticalBox):
        * rendering/RenderListItem.cpp:
        (WebCore::RenderListItem::markerText):
        * rendering/RenderScrollbarTheme.cpp:
        (WebCore::RenderScrollbarTheme::renderScrollbarTheme):
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::systemFont):
        * rendering/bidi.cpp:
        (WebCore::RenderBlock::checkLinesForTextOverflow):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::initialDashboardRegions):
        (WebCore::RenderStyle::noneDashboardRegions):
        * storage/Database.cpp:
        (WebCore::guidMutex):
        (WebCore::guidToVersionMap):
        (WebCore::guidToDatabaseMap):
        (WebCore::Database::databaseInfoTableName):
        (WebCore::databaseVersionKey):
        (WebCore::Database::getVersionFromDatabase):
        (WebCore::Database::setVersionInDatabase):
        (WebCore::guidForOriginAndName):
        * storage/DatabaseTracker.cpp:
        (WebCore::DatabaseTracker::tracker):
        (WebCore::notificationMutex):
        (WebCore::notificationQueue):
        * storage/LocalStorage.cpp:
        (WebCore::localStorageMap):
        * svg/SVGAnimateMotionElement.cpp:
        (WebCore::SVGAnimateMotionElement::rotateMode):
        * svg/SVGAnimationElement.cpp:
        (WebCore::SVGAnimationElement::calcMode):
        (WebCore::SVGAnimationElement::attributeType):
        (WebCore::SVGAnimationElement::isAdditive):
        (WebCore::SVGAnimationElement::isAccumulated):
        * svg/SVGLangSpace.cpp:
        (WebCore::SVGLangSpace::xmlspace):
        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::contentScriptType):
        (WebCore::SVGSVGElement::contentStyleType):
        * svg/SVGStyleElement.cpp:
        (WebCore::SVGStyleElement::type):
        (WebCore::SVGStyleElement::media):
        * svg/SVGTextContentElement.cpp:
        (WebCore::SVGTextContentElement::parseMappedAttribute):
        * svg/animation/SVGSMILElement.cpp:
        (WebCore::SVGSMILElement::parseClockValue):
        (WebCore::SVGSMILElement::restart):
        (WebCore::SVGSMILElement::fill):
        (WebCore::SVGSMILElement::repeatCount):
        (WebCore::SVGSMILElement::notifyDependentsIntervalChanged):
        * svg/graphics/SVGResource.cpp:
        (WebCore::clientMap):
        (WebCore::SVGResource::removeClient):
        * svg/graphics/SVGResourceMarker.cpp:
        (WebCore::SVGResourceMarker::draw):
        * xml/XMLHttpRequest.cpp:
        (WebCore::PreflightResultCacheItem::PreflightResultCacheItem):
        (WebCore::preflightResultCache):
        (WebCore::appendPreflightResultCacheEntry):
        (WebCore::isSafeRequestHeader):
        (WebCore::isOnAccessControlResponseHeaderWhitelist):
        (WebCore::XMLHttpRequest::didReceiveResponsePreflight):
        * xml/XPathExpressionNode.cpp:
        (WebCore::XPath::Expression::evaluationContext):
        * xml/XPathParser.cpp:
        (WebCore::XPath::setUpAxisNamesMap):
        (WebCore::XPath::isAxisName):
        (WebCore::XPath::isNodeTypeName):
        * xml/XPathValue.cpp:
        (WebCore::XPath::Value::toNodeSet):

2008-11-14  Dan Bernstein  <mitz@apple.com>

        - attempt to fix the Qt build

        * platform/qt/Localizations.cpp:
        (WebCore::contextMenuItemTagTextDirectionMenu): Added. Maybe this string
        needs to go somewhere else in addition to here.

2008-11-14  Kevin Ollivier  <kevino@theolliviers.com>

        wx build fix.

        * platform/wx/LocalizedStringsWx.cpp:
        (WebCore::contextMenuItemTagTextDirectionMenu):

2008-11-14  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        - <rdar://problem/6234307> Support action methods for setting and clearing character-level directionality
        - WebCore part of <rdar://problem/6234337> Add a Text Direction menu to the default context menu when appropriate

        * WebCore.base.exp: Exported
        WebCore::Settings::setTextDirectionSubmenuInclusionBehavior().

        * editing/ApplyStyleCommand.cpp:
        (StyleChange::init): Changed to always include the direction property
        in the result if the unicode-bidi property is included.
        (ApplyStyleCommand::splitAncestorsWithUnicodeBidi): Added. Finds the
        highest ancestor of the given node that establishes bidi embedding. If
        that embedding agrees with the given allowed direction, finds the
        second-highest embedding ancestor. Splits all nodes through that
        ancestor. If the highest embedding ancestor did not need to be split,
        it is returned.
        (ApplyStyleCommand::removeEmbeddingUpToEnclosingBlock): Added. Removes
        bidi embedding attributes and styles from all ancestors of the given
        node up to its enclosing block or the given node.
        (ApplyStyleCommand::applyInlineStyle): Added code to handle the
        unicode-bidi property. Applying style the includes this property
        involves removing all bidi embedding in effect, except  for one-level
        embedding that agrees with the desired embedding, then applying the
        desired embedding where it is not already in effect.
        (ApplyStyleCommand::applyInlineStyleToRange): Factored out from
        applyInlineStyle().
        (ApplyStyleCommand::removeHTMLBidiEmbeddingStyle): Added. Removed the
        "dir" attribute if necessary and the element if it becomes an unstyled
        style span.
        (ApplyStyleCommand::removeCSSStyle): Changed to remove the direction
        property when removing the unicode-bidi property.
        (ApplyStyleCommand::removeInlineStyle): Added a call to
        removeHTMLBidiEmbeddingStyle().

        * editing/ApplyStyleCommand.h:
        * editing/Editor.cpp:
        (Editor::textDirectionForSelection): Added. Returns the character-level
        writing direction of the selection if it is uniform and simple (at most
        one level of embedding).
        (Editor::hasBidiSelection): Added. Returns true if the selection lies
        entirely within a single block, and that block has direction:rtl or
        contains any inline boxes with non-zero bidi embedding level.

        * editing/Editor.h:
        * editing/EditorCommand.cpp:
        (stateTextWritingDirection): Added this helper function for deciding
        the state of Text Direction submenu items.
        (executeMakeTextWritingDirectionLeftToRight): Added. Applies
        "unicode-bidi: embed; direction: ltr;".
        (executeMakeTextWritingDirectionNatural): Added. Applies
        "unicode-bidi: normal;"
        (executeMakeTextWritingDirectionRightToLeft): Added. Applies
        "unicode-bidi: embed; direction: rtl;".
        (stateTextWritingDirectionLeftToRight): Added.
        (stateTextWritingDirectionNatural): Added.
        (stateTextWritingDirectionRightToLeft): Added.
        (createCommandMap): Added "MakeTextWritingDirectionLeftToRight",
        "MakeTextWritingDirectionNatural",
        and "MakeTextWritingDirectionRightToLeft".

        * editing/InsertTextCommand.cpp:
        (InsertTextCommand::input): Added code to maintain the unicode-bidi
        and direction properties in the typing style. Even if they have the
        same values as the computed style at the caret, they need to be included
        in the typing style so that inserted text will not inherit any nested
        embedding.

        * page/ContextMenuController.cpp:
        (ContextMenuController::contextMenuItemSelected): Added calls to
        the editor for the text direction menu items.

        * page/Frame.cpp
        (Frame::computeAndSetTypingStyle): Added code to maintain the
        unicode-bidi and direction properties in the typing style.

        * page/Settings.cpp:
        (Settings::setTextDirectionSubmenuInclusionBehavior): Added this setter.

        * page/Settings.h: Added a TextDirectionSubmenuInclusionBehavior enum,
        an m_textDirectionSubmenuInclusionBehavior member, and accessors.

        * page/mac/WebCoreViewFactory.h:
        * platform/ContextMenu.cpp:
        (WebCore::createAndAppendTextDirectionSubMenu): Added.
        (ContextMenu::populate): Added the Text Direction submenu item based on
        the inclusion behavior and the existence of a bidi selection.
        (ContextMenu::checkOrEnableIfNeeded): Added code for the text direction
        menu items.

        * platform/ContextMenuItem.h:
        * platform/LocalizedStrings.h: Declared
        contextMenuItemTagTextDirectionMenu().

        * platform/mac/LocalizedStringsMac.mm: Defined
        contextMenuItemTagTextDirectionMenu().

        * rendering/RenderBlock.cpp:
        (RenderBlock::containsNonZeroBidiLevel): Added.
        * rendering/RenderBlock.h:

2008-11-14  Greg Bolsinga  <bolsinga@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=22264
        Need to update to latest Geolocation spec (13 November 2008)

        Update to new error code constants and values.

        * page/Geolocation.cpp: Use new named ErrorCode enums
        (WebCore::Geolocation::GeoNotifier::timerFired):
        (WebCore::Geolocation::getCurrentPosition):
        (WebCore::Geolocation::watchPosition):
        * page/PositionError.h: Have ErrorCode enum names match new error constant names and values
        (WebCore::PositionError::):
        * page/PositionError.idl: Add new named error constants

2008-11-14  Beth Dakin  <bdakin@apple.com>

        Reviewed by Justin Garcia.

        Fix (again) for <rdar://problem/5089327> Too much indentation when
        pasting quoted paragraphs

        This patch goes back to Justin's original approach to fix this bug,
        written in revision 38273. That fix was mostly rolled out by
        revision 38310 because of styling issues created by the addition of
        extra blockquote nodes. This patch again goes back to Justin's
        original fix because of cases we discovered the newer fix could not
        possibly cover. This version of the patch minimizes the styling
        issues of extra blockquotes by opting into the merge start code.

        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::hasMatchingQuoteLevel): We want shouldMergeStart to
        return true when the quoting level of the end of the inserted
        content matches the quoting level of the end of the existing
        content.
        (WebCore::ReplaceSelectionCommand::shouldMergeStart): Now calls
        hasMatchingQuoteLevel
        (WebCore::ReplaceSelectionCommand::doApply):

2008-11-14  Dirk Schulze  <vbs85@gmx.de>

        Reviewed by Eric Seidel.

        Made SVGResourceClipper platform independent.
        https://bugs.webkit.org/show_bug.cgi?id=21444

        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/GraphicsContext.h:
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::clipPath):
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::clipPath):
        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::GraphicsContext::addPath):
        (WebCore::GraphicsContext::clipPath):
        * svg/graphics/SVGResourceClipper.cpp:
        (WebCore::SVGResourceClipper::applyClip):
        * svg/graphics/cairo/SVGResourceClipperCairo.cpp: Removed.
        * svg/graphics/cg/SVGResourceClipperCg.cpp: Removed.
        * svg/graphics/qt/SVGResourceClipperQt.cpp: Removed.

2008-11-14  Antti Koivisto  <antti@apple.com>

        Reviewed by Anders Carlsson.

        Combine loadFrameRequestWithFormState to loadFrameRequestWithFormAndValues.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadFrameRequestWithFormAndValues):
        * loader/FrameLoader.h:

2008-11-14  Sam Weinig  <sam@webkit.org>

        Reviewed by Eric Seidel.

        Remove unneeded forward declaration.

        * plugins/Plugin.h:

2008-11-14  Darin Fisher  <darin@chromium.org>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=22251
        HTMLCanvasElement.cpp unnecessarily includes runtime/Interpreter.h

        * html/HTMLCanvasElement.cpp:

2008-11-14  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Simon Hausmann.

        Add new files from the Qt port to the build.

        * WebCore.pro:

2008-11-14  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Simon Hausmann.

        Made DatabaseTracker::hasEntryForOrigin() public. This allows the Qt
        port to apply a default quota only if there is no entry in the
        database for a given origin yet.

        * storage/DatabaseTracker.h:

2008-11-14  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Simon Hausmann.

        Make it possible to get the cache directory set in the application
        cache storage.

        * loader/appcache/ApplicationCacheStorage.cpp:
        (WebCore::ApplicationCacheStorage::cacheDirectory): Added.
        * loader/appcache/ApplicationCacheStorage.h:

2008-11-14  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by Beth Dakin.

        <rdar://problem/4230923> "Make Plain Text" doesn't reset text alignment in single paragraph messages

        When applying block styles, we would add block properties to the body element, and Mail's
        Make Plain Text feature isn't equipped to remove those.  This could have been fixed on our side,
        but this change has the advantage that it fixes the bug on Tiger, where Mail does not plan future updates.

        We have code that puts the paragraphs that we're operating on into blocks of their own before
        adding or removing block properties from the blocks that enclose them.  We need to run this code
        when the enclosing block is the body element.

        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::insertNewDefaultParagraphElementAt): Added, moved code from moveParagraphContents
        to here.
        (WebCore::CompositeEditCommand::moveParagraphContentsToNewBlockIfNecessary): Renamed some variables for clarity.
        Added a few comments.  Fixed bug by not bailing out when the block about to be used is the body element.
        * editing/CompositeEditCommand.h:

2008-11-14  Cameron Zwarich  <zwarich@apple.com>

        Reviewed by Darin Adler.

        Bug 22245: Move wtf/dtoa.h into the WTF namespace
        <https://bugs.webkit.org/show_bug.cgi?id=22245>

        Move wtf/dtoa.h into the WTF namespace from the JSC namespace.

        * platform/text/String.cpp:
        (WebCore::charactersToDouble):

2008-11-14  Tor Arne Vestbø  <tavestbo@trolltech.com>

        Rubber-stamped by Simon Hausmann.

        Make sure Qt scrollbars follow the style with regard to context menus

        * platform/qt/ScrollbarQt.cpp:
        (WebCore::Scrollbar::contextMenu):

2008-11-14  Tor Arne Vestbø  <tavestbo@trolltech.com>

        Rubber-stamped by Simon Hausmann.

        Make scrollbar look active when the window is active on Qt/Mac

        * platform/qt/ScrollbarThemeQt.cpp:
        (WebCore::styleOptionSlider):
        (WebCore::ScrollbarThemeQt::paint):

2008-11-13  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Roben.

        Add a basic Scons-based build system for building
        Chromium-Mac WebCore.
        https://bugs.webkit.org/show_bug.cgi?id=21991

        The build currently fails due to missing files from our
        platform directory (platform skia and platform chromium)
        I will be sending those up shortly in separate patches.
        I expect it will be a while before our WebCore build links.

        * SConstruct: Added.
        * WebCore.scons: Added.

2008-11-13  Darin Fisher  <darin@chromium.org>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=22248
        AtomicString.cpp uses JSC types outside of #if USE(JSC)

        * platform/text/AtomicString.cpp:
        (WebCore::AtomicString::add):

2008-11-13  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=18620
        Long hang under TextIterator::advance() when loading http://www.lsvd.de/

        A huge section at the beginning of this document is invisible.  As we iterate through it,
        we create VisiblePositions unnecessarily.

        * editing/TextIterator.cpp:
        (WebCore::TextIterator::shouldRepresentNodeOffsetZero): Don't proceed to VisiblePosition
        creation if m_node is unrendered or invisible.  The answers wouldn't have much meaning
        and would be wasteful.  Also fixed some comments to reflect the fact that this function
        isn't specifically about emitting a newline.

2008-11-13  Pierre-Olivier Latour  <pol@apple.com>

        Reviewed by Sam Weinig.

        Remove unused or unnecessary code from AnimationBase class.

        * page/animation/AnimationBase.cpp:
        (WebCore::AnimationBase::AnimationBase):
        (WebCore::AnimationBase::playStatePlaying):
        * page/animation/AnimationBase.h:

2008-11-12  Tor Arne Vestbø  <tavestbo@trolltech.com>

        Reviewed by Simon Hausmann.

        Inital implementation of PluginPackage and PluginView for Mac NPAPI support in WebCore

        Currently only used by QtWebKit. See also:

        https://bugs.webkit.org/show_bug.cgi?id=21427

        * WebCore.pro:
        * platform/qt/TemporaryLinkStubs.cpp:
        (PluginView::userAgentStatic):
        (PluginView::getValueStatic):
        * plugins/PluginView.cpp:
        (WebCore::PluginView::handleEvent):
        (WebCore::PluginView::setValue):
        (WebCore::PluginView::PluginView):
        * plugins/PluginView.h:
        (WebCore::PluginView::setPlatformPluginWidget):
        * plugins/mac/PluginPackageMac.cpp: Added.
        (WebCore::PluginPackage::determineQuirks):
        (WebCore::readPListFile):
        (WebCore::stringListFromResourceId):
        (WebCore::PluginPackage::fetchInfo):
        (WebCore::PluginPackage::load):
        (WebCore::PluginPackage::hash):
        (WebCore::PluginPackage::equal):
        (WebCore::PluginPackage::compareFileVersion):
        * plugins/mac/PluginViewMac.cpp: Added.
        (WebCore::nativeWindowFor):
        (WebCore::cgHandleFor):
        (WebCore::topLevelOffsetFor):
        (WebCore::PluginView::init):
        (WebCore::PluginView::~PluginView):
        (WebCore::PluginView::stop):
        (WebCore::PluginView::getValueStatic):
        (WebCore::PluginView::getValue):
        (WebCore::PluginView::setParent):
        (WebCore::PluginView::show):
        (WebCore::PluginView::hide):
        (WebCore::PluginView::setFocus):
        (WebCore::PluginView::setParentVisible):
        (WebCore::PluginView::setNPWindowRect):
        (WebCore::PluginView::setNPWindowIfNeeded):
        (WebCore::PluginView::updatePluginWidget):
        (WebCore::PluginView::paint):
        (WebCore::PluginView::invalidateRect):
        (WebCore::PluginView::invalidateRegion):
        (WebCore::PluginView::forceRedraw):
        (WebCore::PluginView::handleMouseEvent):
        (WebCore::PluginView::handleKeyboardEvent):
        (WebCore::PluginView::nullEventTimerFired):
        (WebCore::modifiersForEvent):
        (WebCore::PluginView::globalMousePosForPlugin):
        (WebCore::PluginView::dispatchNPEvent):
        (WebCore::PluginView::userAgent):
        (WebCore::PluginView::userAgentStatic):
        (WebCore::PluginView::handlePostReadFile):

2008-11-12  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=22200
        Crash when close event is dispatched to MessagePort due to document destruction

        Test: fast/events/message-port-onclose.html

        * dom/MessagePort.cpp: (WebCore::MessagePort::contextDestroyed):
        Don't dispatch close event, even though HTML5 currently says that we should. It is not
        right for GC to have observable effects.

2008-11-12  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=22203
        Implement Worker messaging

        No test cases included, because this functionality is disabled by default.

        The implementation is known to still have many race condition, but works quite well for
        testing.

        * WebCore.xcodeproj/project.pbxproj: Added WorkerTask.{h,cpp}.

        * bindings/js/JSDOMBinding.cpp:
        (WebCore::markActiveObjectsForContext): Re-worded comments a little.
        (WebCore::markCrossHeapDependentObjectsForContext): Existing cross-heap GC protocol was
        incorrect, changed it to a much simpler (but still incorrect) version.

        * dom/WorkerTask.cpp: Added.
        (WebCore::WorkerTask::~WorkerTask):
        * dom/WorkerTask.h: Added.
        Tasks posted to workers implement this new interface.

        * bindings/js/JSDedicatedWorkerCustom.cpp:
        (WebCore::JSDedicatedWorker::mark):
        (WebCore::JSDedicatedWorker::connect):
        * dom/DedicatedWorker.h:
        * dom/DedicatedWorker.idl:
        Auto-generate event listener attributes. Renamed startConversation() to connect(), tracking
        WHATWG discussions.

        * dom/DedicatedWorker.cpp:
        (WebCore::WorkerConnectTask::WorkerConnectTask): A task that performs worker-side connect()
        operations.
        (WebCore::DedicatedWorker::DedicatedWorker): Initialize WorkerThread pointer.
        (WebCore::DedicatedWorker::connect): Connect() creates a pair of entangled ports, and posts
        one to worker. Since message port registration in ScriptExecutionContext is not thread safe,
        this port starts with a null context pointer.
        (WebCore::DedicatedWorker::notifyFinished): Since Worker methods should work immediately
        after creation, we have to queue tasks until after a WorkerThread object is created. Then we
        forward all queued tasks to its queue.

        * dom/EventTarget.cpp: (WebCore::EventTarget::toWorkerContext):
        * dom/EventTarget.h:
        * bindings/js/JSEventTarget.cpp: (WebCore::toJS):
        Added cases for WorkerContext, which is now an EventTarget, too.

        * bindings/js/JSWorkerContext.h: Added JSWorkerContext::put() to make onconnect settable.
        * bindings/js/JSWorkerContext.cpp:
        (WebCore::JSWorkerContext::mark): Mark event listeners.
        (WebCore::JSWorkerContext::createPrototype): Fixed a typo, use the right StructureID.
        (WebCore::JSWorkerContext::put): Implemented.
        (WebCore::jsWorkerContextPrototypeFunctionAddEventListener): Added an EventTarget implementation.
        (WebCore::jsWorkerContextPrototypeFunctionRemoveEventListener): Ditto.
        (WebCore::jsWorkerContextPrototypeFunctionDispatchEvent): Ditto.
        (WebCore::jsWorkerContextOnconnect): Added.
        (WebCore::setJSWorkerContextOnconnect): Added.

        * bindings/js/WorkerScriptController.cpp: (WebCore::WorkerScriptController::evaluate):
        Made it actually work by adding necessary setup.

        * bindings/js/WorkerScriptController.h: (WebCore::WorkerScriptController::initScriptIfNeeded):
        Check the right variable - it is the wrapper that may not be initialized yet.

        * dom/ActiveDOMObject.cpp:
        (WebCore::ActiveDOMObject::ActiveDOMObject):
        (WebCore::ActiveDOMObject::~ActiveDOMObject):
        Assert being called from the correct thread, as active DOM object tracking is not thread safe.

        * dom/ScriptExecutionContext.h: Added a Task interface and a postTask() method, to be used
        for asynchronously executing tasks in context's thread.

        * dom/ScriptExecutionContext.cpp:
        (WebCore::ProcessMessagesSoonTask): Changed from a Timer to a Task
        (WebCore::ScriptExecutionContext::ScriptExecutionContext): Removed m_firedMessagePortTimer.
        It was an optimization that couldn't be easily preserved without introducing race conditions
        in multithreading case.
        (WebCore::ScriptExecutionContext::processMessagePortMessagesSoon): Use postTask().
        (WebCore::ScriptExecutionContext::dispatchMessagePortEvents): Added a comment explaining
        why it's OK to not ref() ports in a frozen copy.
        (WebCore::ScriptExecutionContext::createdMessagePort): Assert that we're not being called
        from a wrong thread.
        (WebCore::ScriptExecutionContext::destroyedMessagePort): Ditto.
        (WebCore::ScriptExecutionContextTaskTimer): Part of
        ScriptExecutionContext::Task implementation - use Timer if posting from main thread to main
        thread.
        (WebCore::ScriptExecutionContextTaskWorkerTask): Another part - use WorkerTask if posting
        to a worker.
        (WebCore::PerformTaskContext::PerformTaskContext): Finally, use callOnMainThread() if posting
        to main thread from a secondary one.
        (WebCore::performTask): A helper function for callOnMainThread().
        (WebCore::ScriptExecutionContext::postTask): Use one of the above implementations.

        * dom/MessagePort.h: Fixed message queue to keep EventData pointers - otherwise, we would
        ref/deref EventData::message from different threads, which is not allowed.

        * dom/MessagePort.cpp:
        (WebCore::MessagePortCloseEventTask): Use a task instead of a timer to work across threads.
        (WebCore::MessagePort::EventData::create): Updated for EventData being refcountable now.
        (WebCore::MessagePort::EventData::EventData): Ditto.
        (WebCore::MessagePort::MessagePort): ScriptExecutionContext is now allowed to be null at
        first, because we need to create ports for posting to other threads, and it is not possible
        to register in a context from another thread.
        (WebCore::MessagePort::clone): Always create ports with null contexts - it is now message
        receiver's job to set the context.
        (WebCore::MessagePort::postMessage): Enable posting to ports that are not attached to any
        context yet.
        (WebCore::MessagePort::startConversation): Ditto. Data port is always posted unattached.
        (WebCore::MessagePort::contextDestroyed): Assert that we had a context.
        (WebCore::MessagePort::attachToContext): Called when receiving a data port to register in
        context.
        (WebCore::MessagePort::scriptExecutionContext): Moved from header, as the function is virtual.
        (WebCore::MessagePort::dispatchMessages): Attach data port to receiving context. Use postTask().
        (WebCore::MessagePort::queueCloseEvent): Use postTask().
        (WebCore::MessagePort::hasPendingActivity): Reworded comment a little. As mentioned above,
        MessagePort cross-heap GC is still quite wrong.

        * dom/WorkerContext.h: Made WorkerContext an event target, added onconnect attribute.
        * dom/WorkerContext.cpp: Keep a pointer to WorkerThread. It is only used for debug assertions
        now, but there is no harm in tracking it in release builds, too.

        * dom/WorkerThread.cpp:
        (WebCore::WorkerThread::create): WorkerThread is refcountable, construct with create().
        (WebCore::WorkerThread::workerThread): Implemented a message loop.
        * dom/WorkerThread.h:
        (WebCore::WorkerThread::threadID): Also only used for assertions.
        (WebCore::WorkerThread::messageQueue): Return a reference to queue, so clients can post to it.

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::postMessage): MessagePort::clone() no longer takes a context, as it
        always sets it to null.
        (WebCore::DOMWindow::postMessageTimerFired): Attach data port to receiving context.

2008-11-12  Dirk Schulze  <vbs85@gmx.de>

        Reviewed Darin Adler.

        use strokeColor.alpha() instead of fillColor.alpha()
        on GraphicsContext::strokePath()

        [Canvas] Transparent fillStyle stops line rendering
        https://bugs.webkit.org/show_bug.cgi?id=21888

        Test: fast/canvas/canvas-stroke-empty-fill.html

        * ChangeLog:
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::strokePath):

2008-11-12  Stephanie  <slewis@apple.com>

        Reviewed by Mark Rowe.

        Fix context leak in XSLStyleSheets.
        See bug https://bugs.webkit.org/show_bug.cgi?id=15715

        * xml/XSLStyleSheet.cpp:
        (WebCore::XSLStyleSheet::parseString):

2008-11-12  Alp Toker  <alp@nuanti.com>

        autotools: List web worker-related headers needed for a successful
        build. distcheck is passing again with this change.

        * GNUmakefile.am:

2008-11-12  Alp Toker  <alp@nuanti.com>

        autotools build system fix-up only. Add FloatQuad.h to the source
        lists and sort them.

        * GNUmakefile.am:

2008-11-12  Alp Toker  <alp@nuanti.com>

        Build fixes for r38346. FloatQuad.cpp is missing:

        1) #include "config.h"
        2) #include <algorithm> for various mathematical definitions it uses.

        * platform/graphics/FloatQuad.cpp:

2008-11-12  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein

        https://bugs.webkit.org/show_bug.cgi?id=22212

        Rename absoluteOutlineBox() to absoluteOutlineBounds(), to indicate that
        it may be the bounding outline box of a transformed element, and fix it
        to respect transforms by mapping the outline box to an absolute quad and
        taking the enclosing rect.

        RenderBox::localToAbsoluteQuad() can no longer assert that there is no
        LayoutState, but LayoutState cannot be used during quad mapping (it knows
        nothing about transforms).

        Finally, fix a bug in RenderBox::localToAbsoluteQuad() which was getting
        borderTopExtra() from the object, rather than its container (as localToAbsolute()
        does).

        Test: fast/repaint/transform-absolute-child.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::layoutBlock):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::localToAbsoluteQuad):
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::layoutBlock):
        * rendering/RenderForeignObject.cpp:
        (WebCore::RenderForeignObject::layout):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateLayerPositions):
        (WebCore::RenderLayer::setHasVisibleContent):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::repaintAfterLayoutIfNeeded):
        (WebCore::RenderObject::absoluteOutlineBounds):
        * rendering/RenderObject.h:
        * rendering/RenderPath.cpp:
        (WebCore::RenderPath::layout):
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::layout):
        * rendering/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::layout):
        * rendering/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::layout):
        * rendering/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::layout):
        * rendering/RenderSVGText.cpp:
        (WebCore::RenderSVGText::layout):
        * rendering/RenderSVGViewportContainer.cpp:
        (WebCore::RenderSVGViewportContainer::layout):
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::layout):

2008-11-12  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dave Hyatt

        https://bugs.webkit.org/show_bug.cgi?id=21942
        https://bugs.webkit.org/show_bug.cgi?id=18557

        Add methods which can be used to map renderer-local rectangles
        to quads in absolute coordinates, taking transforms into account:
            localToAbsoluteQuad() converts a local rect into an absolute quad.
            collectAbsoluteLineBoxQuads() is an analogue of addLineBoxRects()
                that works with quads.
            absoluteQuads() is an analogue of absoluteRects(), for quads.

        Use the quad methods to fix the inspector highlight for transformed
        elements.

        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * inspector/InspectorController.cpp:
        (WebCore::drawOutlinedQuad):
        (WebCore::drawHighlightForBoxes):
        (WebCore::frameToMainFrameOffset):
        (WebCore::InspectorController::drawNodeHighlight):
        * platform/graphics/AffineTransform.cpp:
        (WebCore::AffineTransform::mapQuad):
        * platform/graphics/AffineTransform.h:
        * platform/graphics/FloatQuad.cpp: Added.
        (WebCore::min4):
        (WebCore::max4):
        (WebCore::FloatQuad::boundingBox):
        * platform/graphics/FloatQuad.h: Added.
        (WebCore::FloatQuad::FloatQuad):
        (WebCore::FloatQuad::p1):
        (WebCore::FloatQuad::p2):
        (WebCore::FloatQuad::p3):
        (WebCore::FloatQuad::p4):
        (WebCore::FloatQuad::setP1):
        (WebCore::FloatQuad::setP2):
        (WebCore::FloatQuad::setP3):
        (WebCore::FloatQuad::setP4):
        (WebCore::FloatQuad::isEmpty):
        (WebCore::FloatQuad::enclosingBoundingBox):
        (WebCore::FloatQuad::move):
        (WebCore::operator+=):
        (WebCore::operator-=):
        (WebCore::operator==):
        (WebCore::operator!=):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::localToAbsoluteQuad):
        * rendering/RenderBox.h:
        * rendering/RenderContainer.cpp:
        (WebCore::RenderContainer::collectAbsoluteLineBoxQuads):
        * rendering/RenderContainer.h:
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::absoluteQuads):
        * rendering/RenderInline.h:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::absoluteBoundingBoxRect):
        (WebCore::RenderObject::collectAbsoluteLineBoxQuads):
        (WebCore::RenderObject::absoluteQuads):
        (WebCore::RenderObject::localToAbsoluteQuad):
        (WebCore::RenderObject::absoluteContentQuad):
        * rendering/RenderObject.h:
        * rendering/RenderPath.cpp:
        (WebCore::RenderPath::absoluteQuads):
        * rendering/RenderPath.h:
        * rendering/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::absoluteQuads):
        * rendering/RenderSVGContainer.h:
        * rendering/RenderSVGHiddenContainer.cpp:
        (WebCore::RenderSVGHiddenContainer::absoluteQuads):
        * rendering/RenderSVGHiddenContainer.h:
        * rendering/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::calculateAbsoluteBounds):
        (WebCore::RenderSVGImage::absoluteQuads):
        * rendering/RenderSVGImage.h:
        * rendering/RenderSVGInlineText.cpp:
        (WebCore::RenderSVGInlineText::absoluteQuads):
        (WebCore::RenderSVGInlineText::computeAbsoluteRectForRange):
        * rendering/RenderSVGInlineText.h:
        * rendering/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::absoluteQuads):
        * rendering/RenderSVGRoot.h:
        * rendering/RenderSVGTSpan.cpp:
        (WebCore::RenderSVGTSpan::absoluteRects):
        (WebCore::RenderSVGTSpan::absoluteQuads):
        * rendering/RenderSVGTSpan.h:
        * rendering/RenderSVGText.cpp:
        (WebCore::RenderSVGText::absoluteRects):
        (WebCore::RenderSVGText::absoluteQuads):
        * rendering/RenderSVGText.h:
        * rendering/RenderSVGTextPath.cpp:
        (WebCore::RenderSVGTextPath::absoluteRects):
        (WebCore::RenderSVGTextPath::absoluteQuads):
        * rendering/RenderSVGTextPath.h:
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::localToAbsolute):
        (WebCore::RenderTableCell::localToAbsoluteQuad):
        * rendering/RenderTableCell.h:
        * rendering/RenderText.cpp:
        (WebCore::RenderText::absoluteQuads):
        (WebCore::RenderText::collectAbsoluteLineBoxQuads):
        * rendering/RenderText.h:
        * rendering/RenderView.cpp:
        (WebCore::RenderView::localToAbsoluteQuad):
        (WebCore::RenderView::absoluteQuads):
        * rendering/RenderView.h:

2008-11-12  Brent Fulgham <bfulgham@gmail.com>

        Fix Bug 22178: Build errors in WebKit Cairo port

        <https://bugs.webkit.org/show_bug.cgi?id=22178>

        Reviewed by Mark Rowe.

        * platform/graphics/cairo/PatternCairo.cpp: Correct build error under
        Visual Studio.
        (WebCore::Pattern::createPlatformPattern):

2008-11-12  Adam Roben  <aroben@apple.com>

        Fix a typo in the include path for the Release_Cairo configuration

        * WebCore.vcproj/WebCore.vcproj: Fixed "caro" -> "cairo" typo.

2008-11-12  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dave Hyatt

        https://bugs.webkit.org/show_bug.cgi?id=17840
        Patch 2

        Code cleanup in RenderBox::computeAbsoluteRepaintRect().

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::computeAbsoluteRepaintRect):

2008-11-12  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dave Hyatt

        https://bugs.webkit.org/show_bug.cgi?id=17840

        Fix repainting when the transform on a positioned element changes.
        In computeAbsoluteRepaintRect(), add the offsets due to relative positioning,
        and being in a positioned container after applying the transform to the local
        rect.

        Tests: fast/repaint/transform-absolute-in-positioned-container.html
               fast/repaint/transform-relative-position.html

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::computeAbsoluteRepaintRect):

2008-11-12  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by Beth Dakin.

        <rdar://problem/5495723> Selecting and deleting quoted text quotes other text
        <rdar://problem/4775313> Deleting lines from the bottom of a messages leaves the last blank line quoted

        We don't want to merge into a block if it will mean changing the quote level of content after deleting
        selections that contain a whole number paragraphs plus a line break, since it is unclear to most users
        that such a selection actually ends at the start of the next paragraph.  Instead we want to completely
        remove the selected paragraph(s) and all evidence of the first one's quote level.  This matches TextEdit behavior
        for indented paragraphs.

        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::initializePositionData): For the selections described above, do not
        try to merge after the deletion.  Instead try and prune the start block or blocks if they've been emptied
        so that we remove evidence of the deleted paragraphs' quote level.
        (WebCore::DeleteSelectionCommand::mergeParagraphs): Try and prune the start block(s) if necessary.  Also
        make sure that the caret is placed correctly so that it ends up on the same line that the deleted selection
        started on, instead of one higher.
        * editing/DeleteSelectionCommand.h:
        * editing/htmlediting.cpp:
        (WebCore::numEnclosingMailBlockquotes): Added.
        * editing/htmlediting.h:

2008-11-10  Tor Arne Vestbø  <tavestbo@trolltech.com>

        Reviewed by Simon Hausmann.

        Move _web_encodingForResource from WebKit into WebCore and change return type

        This change is needed to implement NSAPI in WebCore for Mac, see:

        https://bugs.webkit.org/show_bug.cgi?id=21427

        * WebCore.base.exp:
        * platform/mac/WebCoreNSStringExtras.h:
        * platform/mac/WebCoreNSStringExtras.mm:
        (stringEncodingForResource):

2008-11-10  Tor Arne Vestbø  <tavestbo@trolltech.com>

        Reviewed by Simon Hausmann.

        Moved the implementation of _webkit_isCaseInsensitiveEqualToString to
        WebCore's WebCoreNSStringExtras as _stringIsCaseInsensitiveEqualToString.

        This change is needed to implement NSAPI in WebCore for Mac, see:

        https://bugs.webkit.org/show_bug.cgi?id=21427

        * WebCore.base.exp:
        * platform/mac/WebCoreNSStringExtras.h:
        * platform/mac/WebCoreNSStringExtras.mm:
        (stringIsCaseInsensitiveEqualToString):

2008-11-11  Stephanie  <slewis@apple.com>

        Reviewed by Dan Bernstein.

        Null check image data before setting it as image source.

        Test: fast/images/image-empty-data.html

        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::destroyDecodedData):

2008-11-11  Adele Peterson  <adele@apple.com>

        Reviewed by Tim Hatcher.

        Remove ifdef so future OS versions can use the new delegate method.

        * platform/network/mac/ResourceHandleMac.mm: (WebCore::ResourceHandle::didSendBodyDataDelegateExists):

2008-11-11  Eric Seidel  <eric@webkit.org>

        Reviewed by Antti Koivisto and Sam Weinig.

        Clean up HTMLTokenizer a litle
        https://bugs.webkit.org/show_bug.cgi?id=22188

        Rename pendingScripts to m_pendingScripts
        Rename scriptNode to m_scriptNode make the type specific
        Rename pendingSrc to m_pendingSrc
        Rename currentPrependingSrc to m_currentPrependingSrc
        Rename noMoreData to m_noMoreData and cBuffer to m_cBuffer
        Remove long-since-dead kdDebug and qDebug calls
        Rename brokenComments to m_brokenComments
        Remove HTMLTokenizer includes and document the rest
        Rename src to m_src
        Rename parser to m_parser and make it an OwnPtr
        Rename inWrite to m_inWrite and jsProxy to scriptController
        Rename brokenServer to m_brokenServer
        Rename buffer to m_buffer and dest to m_dest
        Rename size to m_bufferSize
        Rename attrName to m_attrName
        Rename searchStopper to m_searchStopper and searchStopperLen to m_searchStopperLen
        Rename scriptCode* to m_scriptCode* and change scriptCodeMax to m_scriptCodeCapacity
        Rename scriptStartLineno to m_currentScriptTagStartLineNumber and tagStartLineno to m_currentTagStartLineNumber
        Rename scriptSrc to m_scriptTagSrcAttrValue and scriptSrcCharset to m_scriptTagCharsetAttrValue -- a bit unwieldy, but more precise
        Rename flat to selfClosingTag
        Rename currToken to m_currentToken

        * css/CSSParser.cpp:
        * dom/XMLTokenizer.cpp:
        * dom/XMLTokenizerLibxml2.cpp:
        * html/HTMLDocument.cpp:
        * html/HTMLElement.cpp:
        * html/HTMLFormControlElement.cpp:
        * html/HTMLParser.h:
        * html/HTMLTokenizer.cpp:
        (WebCore::Token::addAttribute):
        (WebCore::HTMLTokenizer::HTMLTokenizer):
        (WebCore::HTMLTokenizer::reset):
        (WebCore::HTMLTokenizer::begin):
        (WebCore::HTMLTokenizer::processListing):
        (WebCore::HTMLTokenizer::parseSpecial):
        (WebCore::HTMLTokenizer::scriptHandler):
        (WebCore::HTMLTokenizer::scriptExecution):
        (WebCore::HTMLTokenizer::parseComment):
        (WebCore::HTMLTokenizer::parseServer):
        (WebCore::HTMLTokenizer::parseProcessingInstruction):
        (WebCore::HTMLTokenizer::parseText):
        (WebCore::HTMLTokenizer::parseEntity):
        (WebCore::HTMLTokenizer::parseTag):
        (WebCore::HTMLTokenizer::write):
        (WebCore::HTMLTokenizer::processingData):
        (WebCore::HTMLTokenizer::end):
        (WebCore::HTMLTokenizer::finish):
        (WebCore::HTMLTokenizer::processToken):
        (WebCore::HTMLTokenizer::processDoctypeToken):
        (WebCore::HTMLTokenizer::~HTMLTokenizer):
        (WebCore::HTMLTokenizer::enlargeBuffer):
        (WebCore::HTMLTokenizer::enlargeScriptBuffer):
        (WebCore::HTMLTokenizer::notifyFinished):
        (WebCore::HTMLTokenizer::setSrc):
        * html/HTMLTokenizer.h:
        (WebCore::Token::Token):
        (WebCore::Token::reset):
        (WebCore::HTMLTokenizer::processingContentWrittenByScript):
        (WebCore::HTMLTokenizer::htmlParser):
        (WebCore::HTMLTokenizer::checkBuffer):
        (WebCore::HTMLTokenizer::checkScriptBuffer):
        * html/HTMLViewSourceDocument.h:
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::leftRelOffset):
        (WebCore::RenderBlock::rightRelOffset):
        (WebCore::RenderBlock::lineWidth):
        * xml/XSLTProcessor.cpp:

2008-11-11  Sam Weinig  <sam@webkit.org>

        Reviewed by Dan Bernstein.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=22189
        Track CachedScript decoded data

        We now track the decoded size of CachedScripts in the Cache allowing
        them to accounted for when deciding when to evict data.  The decoded
        data itself can be evicted when Cache pressure gets high enough through
        CachedScript::destroyDecodedData.

        * loader/CachedResource.h:
        (WebCore::CachedResource::allClientsRemoved):
        (WebCore::CachedResource::destroyDecodedData):
        * loader/CachedScript.cpp:
        (WebCore::CachedScript::script):
        (WebCore::CachedScript::data):
        (WebCore::CachedScript::destroyDecodedData):
        * loader/CachedScript.h:

2008-11-11  Cameron Zwarich  <zwarich@apple.com>

        Reviewed by Geoff Garen.

        Remove pointless dependencies on the now-deleted kjs directory and
        mentions of it in comments that are no longer relevant.

        * WebCore.pro:
        * webcore-base.bkl:

2008-11-11  Dan Bernstein  <mitz@apple.com>

        Reviewed by Adam Roben.

        WebCore part of adding a master volume control for media elements in a WebView

        * WebCore.base.exp: Exported WebCore::Page::setMediaVolume().
        * dom/Document.cpp:
        (WebCore::Document::mediaVolumeDidChange): Added. Called by the Page
        when the media volume is changed.
        (WebCore::Document::registerForMediaVolumeCallbacks): Added. Allows
        elements to register for a callback when the media volume is changed.
        (WebCore::Document::unregisterForMediaVolumeCallbacks): Added. Allows
        elements to unregister for the callback.
        * dom/Document.h:
        * dom/Element.h:
        (WebCore::Element::mediaVolumeDidChange): Added an empty implementation.
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::HTMLMediaElement): Added a call to
        registerForMediaVolumeCallbacks().
        (WebCore::HTMLMediaElement::~HTMLMediaElement): Added a call to
        unregisterForMediaVolumeCallbacks().
        (WebCore::HTMLMediaElement::updateVolume): Changed to multiply the
        element's intrinsic volume by the master volume from the page.
        (WebCore::HTMLMediaElement::mediaVolumeDidChange): Added. Calls
        updateVolume().
        * html/HTMLMediaElement.h:
        * page/Page.cpp:
        (WebCore::Page::Page): Initialize m_mediaVolume to 1.
        (WebCore::Page::setMediaVolume): Added. Calls mediaVolumeDidChange() on
        every document in the page when the master volume changes.
        * page/Page.h:
        (WebCore::Page::mediaVolume): Added this getter.

2008-11-11  David Hyatt  <hyatt@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=22182

        Fix problems with scrollbars when the OS setting for clicks in the track jumping the thumb to that location
        is turned on.  Make sure to only jump the thumb if the click happens in the track.  Also fix some math
        errors when jumping the thumb that cause dragging after the jump to incorrectly jump the thumb again.

        Reviewed by Adele

        * platform/Scrollbar.cpp:
        (WebCore::Scrollbar::mouseDown):

2008-11-11  Beth Dakin  <bdakin@apple.com>

        Reviewed by Darin Adler.

        Fix for <rdar://problem/5089327> Too much indentation when pasting
        quoted paragraphs

        This patch re-addresses pasting blockquotes into blockquotes. It
        backs out most of revision 38273. 38273 fixed the bug by inserting
        the pasted content as a sibling blockquote node to the pre-existing
        blockquote node. The problem with that is that by default,
        blockquotes have a giant margin, so visually, this can be weird.
        This patch instead inserts the pasted content as siblings of the
        the content already inside the outer blockquote, and then removes
        the blockquote node from the pasted content itself, so that it
        doesn't nest itself into the outer blockquote.
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::doApply):

        Move contains() from Element to Node since there is nothing
        Element-specific about it.
        * dom/Element.cpp:
        * dom/Element.h:
        * dom/Node.cpp:
        (WebCore::Node::contains):
        * dom/Node.h:

2008-11-11  David Hyatt  <hyatt@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=17997

        Stop using the new Leopard API tiling call for scaled tiles when drawing background images.  The method
        is buggy.  Fall back to using the slower (and more correct) pattern tiling that Tiger still uses.  This
        is a Leopard-only workaround, since the API has been fixed on Snow Leopard.

        Reviewed by John Sullivan

        * platform/graphics/cg/ImageCG.cpp:
        (WebCore::Image::drawPattern):

2008-11-10  David Hyatt  <hyatt@apple.com>

        Disable the Aqua look for menu lists when full page zoom is turned on.  Because the control is buggy
        when scaling and because it's impossible to paint into an offscreen bitmap without completely rewriting
        how we draw the control on Mac, our only real option for now is to just switch to our styled look when zoomed.

        Reviewed by Adam Roben

        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::isControlStyled):

2008-11-11  Darin Adler  <darin@apple.com>

        Reviewed by Dan Bernstein.

        - https://bugs.webkit.org/show_bug.cgi?id=22160
        speculative fix for <rdar://problem/5995450> Nil deref because nextLinePosition
        (previousLinePosition, too) uses a nil node

        * editing/visible_units.cpp:
        (WebCore::nextLinePosition): Use RenderObject::node instead of RenderObject::element
        to check editingIgnoresContent. It makes sense to use the associated DOM node for
        this, even in cases of anonymous content, and it avoids the case where element() can
        be 0.
        (WebCore::previousLinePosition): Ditto.

2008-11-11  Dirk Schulze  <vbs85@gmx.de>

        Reviewed by Darin Adler.

        Removed default: in applySpreadMethod. This causes the problems
        in radial gradients. We don't need CAIRO_EXTEND_NONE in SVG, Canvas
        or CSS.

        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::applySpreadMethod):

2008-11-11  Ariya Hidayat  <ariya.hidayat@trolltech.com>

        Reviewed by Tor Arne Vestbø.

        Fix crash when rendering the file chooser.
        Also proper implementation for multi-selected files.

        * platform/qt/FileChooserQt.cpp:
        (WebCore::FileChooser::basenameForWidth):

2008-11-11  Dirk Schulze  <vbs85@gmx.de>

        Reviewed by Oliver Hunt.

        PatternCairo needs to invert the pattern matrix because
        of transformation from user space to pattern space.
        Give a identity matrix to pattern for Qt and Cairo. Because the
        context is transformed already.

        [CAIRO][QT] Canvas transformations applied twice to Patterns
        https://bugs.webkit.org/show_bug.cgi?id=21555

        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::fillPath):
        (WebCore::GraphicsContext::strokePath):
        * platform/graphics/cairo/PatternCairo.cpp:
        (WebCore::Pattern::createPlatformPattern):
        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::GraphicsContext::strokePath):
        (WebCore::GraphicsContext::fillRect):

2008-11-10  Stephanie Lewis  <slewis@apple.com>

        Reviewed by Dan Bernstein.

        Clear the image source cache even if we haven't decoded any of the image data.
        We use the image source cache when calculating layout.

        * loader/Cache.cpp:
        (WebCore::Cache::pruneDeadResources):
        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::destroyDecodedData):

2008-11-10  Adam Roben  <aroben@apple.com>

        Fix Bug 22161: Assertion failure in RenderThemeWin::systemColor when
        loading microsoftpdc.com

        <https://bugs.webkit.org/show_bug.cgi?id=22161>

        Reviewed by Dan Bernstein.

        Test: fast/css/outline-invert-assertion.html

        * rendering/RenderThemeWin.cpp:
        (WebCore::RenderThemeWin::systemColor): If we can't determine a good
        Win32 system color to use, defer to RenderTheme instead of asserting.
        This matches what RenderThemeMac does.

2008-11-10  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by Beth Dakin.

        <rdar://problem/4037481> REGRESSION (Mail): pasting quoted text
        into quoted text yields double-quoting

        Don't nest inserted content in Mail blockquotes.  Perform a
        BreakBlockquoteCommand if we're in
        one and insert the incoming fragment between the split blockquotes.

        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::shouldMerge): Renamed from ->
        source and to -> destination.
        (WebCore::ReplaceSelectionCommand::doApply):

2008-11-10  Adam Roben  <aroben@apple.com>

        Fix Bug 22158: Would like to turn on WebCore logging channels via an
        environment variable

        <https://bugs.webkit.org/show_bug.cgi?id=22158>

        Logging channels can now be enabled by setting the WebCoreLogLevel
        environment variable to a hexadecimal number.

        Reviewed by Anders Carlsson.

        * WebCore.vcproj/WebCore.vcproj: Added LoggingWin.cpp.
        * platform/win/LoggingWin.cpp: Copied from WebCore/platform/mac/LoggingMac.mm.
        (WebCore::initializeWithUserDefault): Read in the WebCoreLogLevel
        environment variable, parse its value as a hexadecimal number, and
        turn the channel on/off based on whether the mask bit is set.
        (WebCore::InitializeLoggingChannelsIfNecessary): Initialize each
        logging channel in turn.

2008-11-10  Darin Adler  <darin@apple.com>

        Reviewed by Adam Roben.

        - fix https://bugs.webkit.org/show_bug.cgi?id=22103
          Changing fonts in preferences does not immediately update WebViews

        This broke when the meaning of FrameView::invalidate changed.
        I changed setNeedsReapplyStyles to no longer depend on invalidate.

        * dom/Document.cpp: (WebCore::Document::shouldScheduleLayout):
        Removed the part of this function that duplicated what's already in
        FrameView::needsLayout, since the copy here left out a few key things.
        For example, it didn't handle the fact that "needs reapply styles"
        counts as needing layout.

        * page/Frame.cpp: (WebCore::Frame::setNeedsReapplyStyles): This called
        FrameView::invalidate before. There were two things wrong with that.
        1) It requested that the entire view repaint even if the style change
        didn't necessitate that. 2) FrameView::invalidate no longer causes any
        repainting at all in certain cases, because of Hyatt's changes to how
        widgets and the host window are involved in the repainting process.
        So call FrameView::scheduleRelayout instead, which is more precisely
        what we want and need here.

        * page/FrameView.cpp:
        (WebCore::FrameView::scheduleRelayout): Add a call to needsLayout here
        so that Document::shouldScheduleLayout doesn't have to replicate the
        logic that's in needsLayout and can instead rely on the fact that it
        was already called.
        (WebCore::FrameView::needsLayout): Tweaked the comments and formatting
        in this function.

2008-11-10  Darin Adler  <darin@apple.com>

        Reviewed by Adam Roben.

        - speculative fix for <rdar://problem/5557243> crashes in Safari at
          WebCore::HTMLSelectElement::updateListBoxSelection + 280

        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::updateListBoxSelection):
        Check index against size of vector before indexing into the vector.

2008-11-10  Tom Cooksey  <thomas.cooksey@trolltech.com>

        Reviewed by Tor Arne Vestbø.

        Fix QtWebkit build failure on arm.

        pen.widthF() is a qreal, which means it's a float on arm.

        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::GraphicsContext::setLineDash):

2008-11-10  Morten Sørvig  <msorvig@trolltech.com>

        Reviewed by Simon Hausmann.

        Improve mouse wheel scolling on Qt/Cocoa.
        Cocoa differs from Carbon (and other platforms I think) in that the
        mouse wheel events we get have a much higher acceleration factor.

        This submit switches over to scroll-per-pixel from scroll-per-line
        for most of our scrolling views. This matches the native views
        and works well with the increased acceleration.

        * platform/qt/WheelEventQt.cpp:

2008-11-09  Cameron Zwarich  <zwarich@apple.com>

        Reviewed by Darin Adler.

        Bug 19541: Null pointer in showModalDialog()
        <https://bugs.webkit.org/show_bug.cgi?id=19541>

        Add null frame->page() checks to JSDOMWindowBase::canShowModalDialog()
        and JSDOMWindowBase::canShowModalDialogNow()C

        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::canShowModalDialog):
        (WebCore::canShowModalDialogNow):

2008-11-09  Darin Adler  <darin@apple.com>

        - try to fix Windows build

        * platform/graphics/Color.cpp: For some reason MSVC doesn't follow the rules
        about needed a separate definition for static const integer data members.
        Until I get to the bottom of this, put the definitions inside an ifdef.

2008-11-09  David Kilzer  <ddkilzer@apple.com>

        BUILD FIX: Qt build broke after r38235.

        Added HAVE(ACCESSIBILITY) header guards to platform implementation
        source files.

        * page/gtk/AccessibilityObjectAtk.cpp: Added HAVE(ACCESSIBILITY)
        guards.
        * page/gtk/AccessibilityObjectWrapperAtk.cpp: Ditto.
        * page/qt/AccessibilityObjectQt.cpp: Ditto.
        * page/win/AccessibilityObjectWin.cpp: Ditto.
        * page/wx/AccessibilityObjectWx.cpp: Ditto.

2008-11-09  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=22104
        Javascript URL percent encoding/decoding broken by some characters

        Test: fast/loader/javascript-url-encoding-2.html

        * platform/KURL.cpp: (WebCore::encodeRelativeString): Don't try to break down javascript URLs.

2008-11-09  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed and tweaked by Darin Adler.

        * platform/graphics/Color.cpp: Added definitions for the static data members
        in this class. Static data members need a definition, even when they are the
        simple integer constant kind that can be initialized in the header.

2008-11-08  Antti Koivisto  <antti@apple.com>

        Reviewed by Sam Weinig.

        Fix https://bugs.webkit.org/show_bug.cgi?id=22141
        REGRESSION: Safari error page is not fully styled when loaded from cache

        Reset text decoder on flush so it does not pass through the BOM when it is reused.

        Test: fast/encoding/css-cached-bom.html

        * loader/TextResourceDecoder.cpp:
        (WebCore::TextResourceDecoder::flush):

2008-11-08  Kevin Ollivier  <kevino@theolliviers.com>

        Reviewed by Mark Rowe.

        Send URL errors to stderr rather than stdout. While debugging wx DumpRenderTree,
        it was causing these errors to end up in the page's text representation.

        * platform/network/curl/ResourceHandleManager.cpp:
        (WebCore::ResourceHandleManager::downloadTimerCallback):

2008-11-08  Kevin Ollivier  <kevino@theolliviers.com>

        wx build fixes after addition of JSCore parser and bycompiler dirs.

        * webcore-base.bkl:
        * webcore-wx.bkl:

2008-11-08  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein

        https://bugs.webkit.org/show_bug.cgi?id=21906

        Override addFocusRingRects() in RenderTextControl to avoid
        the RenderFlow behavior of recursing on descendent renderers.
        RenderTextControl should only ever need a simple focus rect.

        This fixes focus ring issues with transforms on text controls.

        Test: fast/transforms/transformed-focused-text-input.html

        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::addFocusRingRects):
        * rendering/RenderTextControl.h:

2008-11-08  Dimitri Dupuis-Latour  <dupuislatour@apple.com>

        Make sure the icon thumbnail width/height is at least 1px in
        the Web Inspector's resource panel.

        <rdar://problem/5988888>

        Reviewed by Tim Hatcher.

        * inspector/front-end/inspector.css:

2008-11-08  David Kilzer  <ddkilzer@apple.com>

        Bug 22137: PLATFORM(MAC) build broken with HAVE(ACCESSIBILITY) disabled

        <https://bugs.webkit.org/show_bug.cgi?id=22137>

        Reviewed by Darin Adler.

        * page/AccessibilityObject.h:
        (WebCore::AccessibilityObject::accessibilityIgnoreAttachment):
        Provide a default implementation when HAVE(ACCESSIBILITY) is false.
        * page/mac/AXObjectCacheMac.mm: Added HAVE(ACCESSIBILITY) guard.
        * page/mac/AccessibilityObjectMac.mm: Ditto.
        * page/mac/AccessibilityObjectWrapper.mm: Ditto.

2008-11-08  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        - WebCore part of adding WebPreferences for controlling databases and local storage

        * WebCore.base.exp: Exported Settings::setDatabasesEnabled() and
        Settings::setLocalStorageEnabled().
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::localStorage): Changed to return 0 if local storage
        is disabled in settings.
        (WebCore::DOMWindow::openDatabase): Changed to return 0 if databases
        are disabled in settings.
        * page/Settings.cpp:
        (WebCore::Settings::Settings): Initialize m_databasesEnabled and
        m_localStorageEnabled.
        (WebCore::Settings::setDatabasesEnabled): Added.
        (WebCore::Settings::setLocalStorageEnabled): Added.
        * page/Settings.h:
        (WebCore::Settings::databasesEnabled): Added.
        (WebCore::Settings::localStorageEnabled): Added.

2008-11-07  Alp Toker  <alp@nuanti.com>

        Fix build with bleeding edge GTK+ versions. GTK+ and other libraries
        now require that only their top-level header file is included.

        Patch tested and still builds fine with older GTK+ versions (back to
        2.8).

        Future WebKit GTK+ contributions are required to adhere to this
        policy.

        * platform/gtk/FileSystemGtk.cpp:
        * platform/gtk/KeyEventGtk.cpp:
        * platform/gtk/MouseEventGtk.cpp:
        * platform/gtk/WheelEventGtk.cpp:
        * platform/gtk/gtkdrawing.h:
        * plugins/gtk/gtk2xtbin.c:
        * plugins/gtk/gtk2xtbin.h:

2008-11-07  Anders Carlsson  <andersca@apple.com>

        Reviewed by Kevin Decker

        Explicitly initialize the NPDrawingModelCoreAnimation.

        * bridge/npapi.h:

2008-11-07  Alp Toker  <alp@nuanti.com>

        autotools fix. Always use the configured perl binary (which may be
        different to the one in $PATH) when generating sources.

        * GNUmakefile.am:

2008-11-07  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein

        https://bugs.webkit.org/show_bug.cgi?id=22122

        Use a stack-based object to simplify the pushLayoutState/popLayoutState
        code. LayoutStateMaintainer either pushes in the constructor, or allows
        an explicit push() later. Both cases require an explicit pop().

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::layoutBlock):
        (WebCore::RenderBlock::layoutOnlyPositionedObjects):
        * rendering/RenderContainer.cpp:
        (WebCore::RenderContainer::layout):
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::layoutBlock):
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::layout):
        * rendering/RenderTableRow.cpp:
        (WebCore::RenderTableRow::layout):
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::setCellWidths):
        (WebCore::RenderTableSection::calcRowHeight):
        (WebCore::RenderTableSection::layoutRows):
        * rendering/RenderView.h:
        (WebCore::LayoutStateMaintainer::LayoutStateMaintainer):
        (WebCore::LayoutStateMaintainer::~LayoutStateMaintainer):
        (WebCore::LayoutStateMaintainer::pop):
        (WebCore::LayoutStateMaintainer::push):
        (WebCore::LayoutStateMaintainer::didPush):

2008-11-07  Tor Arne Vestbø  <tavestbo@trolltech.com>

        Fix the QtWebKit build on Mac

        * platform/qt/TemporaryLinkStubs.cpp:
        (PluginView::invalidateRect):

2008-11-07  Tor Arne Vestbø  <tavestbo@trolltech.com>

        Rubber-stamped by Simon Hausmann.

        Don't allow Phonon's invisible video widget to keep the app running

        * platform/graphics/qt/MediaPlayerPrivatePhonon.cpp:
        (WebCore::MediaPlayerPrivate::MediaPlayerPrivate):

2008-11-07  Henrik Hartz  <henrik.hartz@nokia.com>

        Reviewed by Simon Hausmann.

        Fix valgrind warning about uninitialized lastStop variable.

        * platform/graphics/qt/GradientQt.cpp:
        (WebCore::Gradient::platformGradient):

2008-11-07  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Maciej Stachowiak.

        Fix layout test brokenness following r38211.

        * page/EventHandler.cpp: (WebCore::EventHandler::handleAccessKey):
        Restore old Shift key behavior. We ignore Shift key state when matching access keys (which
        matches neither IE nor Firefox), and this patch made WebKit behave like Firefox
        inadvertently. This may or may not be a good thing, but it's certainly not something that
        should change by accident.

2008-11-06  Antti Koivisto  <antti@apple.com>

        Eh, this trivial last minute change was wrong.

        * loader/CachedCSSStyleSheet.cpp:
        (WebCore::CachedCSSStyleSheet::sheetText):

2008-11-06  Antti Koivisto  <antti@apple.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=22093

        Delaying the text decoding caused regression since the decoding
        also determines the encoding in case of @charset rule.

        Decode immediately in data() and keep the decoded string around
        during the checkNotify().

        * loader/CachedCSSStyleSheet.cpp:
        (WebCore::CachedCSSStyleSheet::sheetText):
        (WebCore::CachedCSSStyleSheet::data):
        * loader/CachedCSSStyleSheet.h:

2008-11-06  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=22097
        Expose MessageEvent constructor on WorkerContext

        * bindings/js/JSWorkerContext.cpp:
        (WebCore::jsWorkerContextMessageEvent):
        (WebCore::setJSWorkerContextMessageEvent):

2008-11-06  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=21107
        <rdar://problem/6264219> New access key combination conflicts with VoiceOver

        * page/EventHandler.h:
        * page/gtk/EventHandlerGtk.cpp:
        (WebCore::EventHandler::accessKeyModifiers):
        * page/qt/EventHandlerQt.cpp:
        (WebCore::EventHandler::accessKeyModifiers):
        * page/win/EventHandlerWin.cpp:
        (WebCore::EventHandler::accessKeyModifiers):
        * page/wx/EventHandlerWx.cpp:
        (WebCore::EventHandler::accessKeyModifiers):
        Access access key modifiers via a function, not a static variable.

        * page/mac/EventHandlerMac.mm: (WebCore::EventHandler::accessKeyModifiers):
        Use Ctrl when VoiceOver is enabled, because a conflict with Emacs-style key bindings is
        less troublesome than one with VO keys.

        * page/EventHandler.cpp: (WebCore::EventHandler::handleAccessKey):
        Also fix an access key matching bug introduced in r32424 - Any superset of specified
        modifier set invoked access keys. We can use simple equality comparison instead because
        CapsLock is not part of modifiers(), so it doesn't need to be ignored explicitly.

2008-11-06  Anders Carlsson  <andersca@apple.com>

        Reviewed by Kevin Decker.

        https://bugs.webkit.org/show_bug.cgi?id=22115
        NPN_HasPropertyUPP and NPN_HasMethodUPP entries in NPNetscapeFuncs are NULL

        Export _NPN_HasMethod and _NPN_HasProperty.

        * WebCore.NPAPI.exp:

2008-11-06  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Antti Koivisto

        https://bugs.webkit.org/show_bug.cgi?id=15678

        Fix transformed menu selects to show the popup in the correct
        location.

        * rendering/RenderMenuList.cpp:
        (WebCore::RenderMenuList::showPopup):

2008-11-06  David Kilzer  <ddkilzer@apple.com>

        BUILD FIX: Backed out r38189 (and r38203) for Xcode 3.0.

        Apparently older versions of gcc have issues with this patch.
        Backing out a second time until the issues are resolved.

2008-11-06  Julien Chaffraix  <jchaffraix@pleyo.com>

        Reviewed by Maciej Stachowiak.

        Bug 21106: .in format discussed changes
        https://bugs.webkit.org/show_bug.cgi?id=21106

        Include the namespace into the interfaceName.

        * dom/make_names.pl: Do not append the namespace when
        using the interfaceName.
        * html/HTMLTagNames.in: Added namespace prefix for custom
        interfaceName.
        * svg/svgtags.in: Ditto.

2008-11-06  Cameron Zwarich  <zwarich@apple.com>

        Reviewed by Geoff Garen.

        Move the remaining files in the kjs subdirectory of JavaScriptCore to
        a new parser subdirectory, and remove the kjs subdirectory entirely.

        * ForwardingHeaders/kjs: Removed.
        * ForwardingHeaders/kjs/Parser.h: Removed.
        * ForwardingHeaders/kjs/SavedBuiltins.h: Removed.
        * ForwardingHeaders/kjs/SourceCode.h: Removed.
        * ForwardingHeaders/kjs/SourceProvider.h: Removed.
        * ForwardingHeaders/parser: Added.
        * ForwardingHeaders/parser/Parser.h: Copied from ForwardingHeaders/kjs/Parser.h.
        * ForwardingHeaders/parser/SourceCode.h: Copied from ForwardingHeaders/kjs/SourceCode.h.
        * ForwardingHeaders/parser/SourceProvider.h: Copied from ForwardingHeaders/kjs/SourceProvider.h.
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * bindings/js/StringSourceProvider.h:
        * bindings/js/WorkerScriptController.cpp:
        * bridge/NP_jsobject.cpp:
        * bridge/jni/jni_jsobject.mm:
        * bridge/testbindings.pro:
        * inspector/JavaScriptDebugServer.cpp:

2008-11-06  David Kilzer  <ddkilzer@apple.com>

        BUILD WAS NOT BROKEN: Rolling r38189 back in.

        Please perform a clean build if you see crashes.

2008-11-06  David Kilzer  <ddkilzer@apple.com>

        BUILD FIX: Backed out r38189 since it apparently broke the world.

2008-11-06  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Beth Dakin.

        Bug 22112: if a <body> has contenteditable=true, it should report a writable AXValue
        https://bugs.webkit.org/show_bug.cgi?id=22112

        Test: accessibility/content-editable.html

        * page/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::isReadOnly):

2008-11-06  Sam Weinig  <sam@webkit.org>

        Reviewed by Alice Liu.

        Fix failed assert at launch caused by unintialized data member on the mac.

        * platform/network/mac/NetworkStateNotifierMac.cpp:
        (WebCore::NetworkStateNotifier::NetworkStateNotifier):

2008-11-06  Steve Falkenburg  <sfalken@apple.com>

        Fix failed assert at launch caused by unintialized data member.

        Reviewed by Maciej Stachowiak.

        * platform/network/win/NetworkStateNotifierWin.cpp:
        (WebCore::NetworkStateNotifier::NetworkStateNotifier):

2008-11-06  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Antti Koivisto

        https://bugs.webkit.org/show_bug.cgi?id=22109
        Make <input type="range"> work correctly with transforms

        Test: fast/forms/slider-transformed.html

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::defaultEventHandler):
            Compute a correct local point when the event is retargeted
        * rendering/RenderSlider.cpp:
        (WebCore::HTMLSliderThumbElement::defaultEventHandler):
            Compute m_initialClickPoint in slider-local coords, so that
            deltas are computed correctly with transforms
        (WebCore::RenderSlider::mouseEventIsInThumb):
            Rather than computing an absolute bounds for the thumb,
            convert the point to local coords and compare it with the border box.

2008-11-06  Greg Bolsinga  <bolsinga@apple.com>

        Reviewed by Darin Adler.

        Bug 21810: Remove use of static C++ objects that are destroyed at exit time (destructors)
        https://bugs.webkit.org/show_bug.cgi?id=21810

        * bindings/js/GCController.cpp:
        (WebCore::gcController): Changed to leak an object to avoid an exit-time destructor.
        * bindings/js/JSDOMBinding.cpp:
        (WebCore::wrapperSet): Ditto
        * bindings/js/JSInspectedObjectWrapper.cpp:
        (WebCore::wrappers): Ditto
        * bindings/js/JSInspectorCallbackWrapper.cpp:
        (WebCore::wrappers): Ditto
        * bridge/runtime_root.cpp:
        (JSC::Bindings::rootObjectSet): Ditto
        * css/CSSMutableStyleDeclaration.cpp:
        (WebCore::CSSMutableStyleDeclaration::removeProperty): Ditto
        * css/CSSPrimitiveValue.cpp:
        (WebCore::CSSPrimitiveValue::cssText): Ditto
        * css/CSSSelector.cpp:
        (WebCore::CSSSelector::extractPseudoType): Ditto
        * css/CSSStyleSelector.cpp:
        (WebCore::screenEval): Ditto
        (WebCore::printEval): Ditto
        * dom/DOMImplementation.cpp:
        (WebCore::isSVG10Feature): Ditto
        (WebCore::isSVG11Feature): Ditto
        (WebCore::DOMImplementation::isXMLMIMEType): Ditto
        * dom/Document.cpp:
        (WebCore::Document::hasPrefixNamespaceMismatch): Ditto
        * dom/ScriptElement.cpp:
        (WebCore::isSupportedJavaScriptLanguage): Ditto
        * editing/ApplyStyleCommand.cpp:
        (WebCore::styleSpanClassString): Ditto
        * editing/HTMLInterchange.cpp:
        (WebCore::): Ditto
        * editing/IndentOutdentCommand.cpp:
        (WebCore::indentBlockquoteString): Ditto
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::isInterchangeNewlineNode): Ditto
        (WebCore::isInterchangeConvertedSpaceSpan): Ditto
        * editing/htmlediting.cpp:
        (WebCore::stringWithRebalancedWhitespace): Ditto
        (WebCore::nonBreakingSpaceString): Ditto
        * editing/markup.cpp:
        (WebCore::appendAttributeValue): Ditto
        (WebCore::appendEscapedContent): Ditto
        (WebCore::shouldAddNamespaceAttr): Ditto
        (WebCore::appendNamespace): Ditto
        (WebCore::appendStartMarkup): Ditto
        (WebCore::createMarkup): Ditto
        * html/HTMLButtonElement.cpp:
        (WebCore::HTMLButtonElement::type): Ditto
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::isRecognizedTagName): Ditto
        (WebCore::inlineTagList): Ditto
        (WebCore::blockTagList): Ditto
        * html/HTMLFieldSetElement.cpp:
        (WebCore::HTMLFieldSetElement::type): Ditto
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::type): Ditto
        * html/HTMLKeygenElement.cpp:
        (WebCore::HTMLKeygenElement::type): Ditto
        * html/HTMLLegendElement.cpp:
        (WebCore::HTMLLegendElement::type): Ditto
        * html/HTMLOptGroupElement.cpp:
        (WebCore::HTMLOptGroupElement::type): Ditto
        * html/HTMLOptionElement.cpp:
        (WebCore::HTMLOptionElement::type): Ditto
        * html/HTMLParser.cpp:
        (WebCore::HTMLParser::getNode): Ditto
        (WebCore::HTMLParser::isHeaderTag): Ditto
        (WebCore::HTMLParser::isResidualStyleTag): Ditto
        (WebCore::HTMLParser::isAffectedByResidualStyle): Ditto
        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::type): Ditto
        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::type): Ditto
        * inspector/InspectorController.cpp:
        (WebCore::platform): Ditto
        * inspector/JavaScriptDebugServer.cpp:
        (WebCore::JavaScriptDebugServer::shared): Ditto
        * inspector/JavaScriptProfile.cpp:
        (WebCore::profileCache): Ditto
        * inspector/JavaScriptProfileNode.cpp:
        (WebCore::profileNodeCache): Ditto
        * loader/FrameLoader.cpp:
        (WebCore::localSchemes): Ditto
        * loader/appcache/ApplicationCacheStorage.cpp:
        (WebCore::cacheStorage): Ditto
        * loader/archive/ArchiveFactory.cpp:
        (WebCore::archiveMIMETypes): Ditto
        * loader/icon/IconDatabase.cpp:
        (WebCore::IconDatabase::defaultDatabaseFilename): Ditto
        * page/EventHandler.cpp:
        (WebCore::EventHandler::dragState): Ditto
        * page/Frame.cpp:
        (WebCore::createRegExpForLabels): Ditto
        (WebCore::keepAliveSet): Ditto
        * page/Page.cpp:
        (WebCore::Page::groupName): Ditto
        * page/SecurityOrigin.cpp:
        (WebCore::isDefaultPortForProtocol): Ditto
        (WebCore::SecurityOrigin::databaseIdentifier): Ditto
        * page/mac/FrameMac.mm:
        (WebCore::regExpForLabels): Ditto
        * platform/KURL.cpp:
        (WebCore::blankURL): Ditto
        * platform/graphics/FontCache.cpp:
        (WebCore::alternateFamilyName): Ditto
        * platform/graphics/mac/FontCacheMac.mm:
        (WebCore::FontCache::getSimilarFontPlatformData): Ditto
        (WebCore::FontCache::getLastResortFallbackFont): Ditto
        * platform/mac/ScrollbarThemeMac.mm:
        (WebCore::ScrollbarTheme::nativeTheme): Ditto
        * platform/mac/ThemeMac.mm:
        (WebCore::platformTheme): Ditto
        * platform/mac/ThreadCheck.mm:
        (WebCoreReportThreadViolation): Ditto
        * platform/network/NetworkStateNotifier.cpp:
        (WebCore::networkStateNotifier): Ditto
        * platform/network/mac/FormDataStreamMac.mm:
        (WebCore::getStreamFormDataMap): Ditto
        (WebCore::getStreamResourceHandleMap): Ditto
        * platform/network/mac/ResourceResponseMac.mm:
        (WebCore::ResourceResponse::platformLazyInit): Ditto
        * platform/text/TextEncoding.cpp:
        (WebCore::TextEncoding::isJapanese): Ditto
        * rendering/RenderBlock.cpp:
        (WebCore::continuationOutlineTable): Ditto
        * rendering/RenderCounter.cpp:
        (WebCore::counterMaps): Ditto
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::layoutVerticalBox): Ditto
        * rendering/RenderListItem.cpp:
        (WebCore::RenderListItem::markerText): Ditto
        * rendering/RenderScrollbarTheme.cpp:
        (WebCore::RenderScrollbarTheme::renderScrollbarTheme): Ditto
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::systemFont): Ditto
        * rendering/bidi.cpp:
        (WebCore::RenderBlock::checkLinesForTextOverflow): Ditto
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::initialDashboardRegions): Ditto
        (WebCore::RenderStyle::noneDashboardRegions): Ditto
        * storage/LocalStorage.cpp:
        (WebCore::localStorageMap): Ditto
        * svg/SVGAnimateMotionElement.cpp:
        (WebCore::SVGAnimateMotionElement::rotateMode): Ditto
        * svg/SVGAnimationElement.cpp:
        (WebCore::SVGAnimationElement::calcMode): Ditto
        (WebCore::SVGAnimationElement::attributeType): Ditto
        (WebCore::SVGAnimationElement::isAdditive): Ditto
        (WebCore::SVGAnimationElement::isAccumulated): Ditto
        * svg/SVGLangSpace.cpp:
        (WebCore::SVGLangSpace::xmlspace): Ditto
        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::contentScriptType): Ditto
        (WebCore::SVGSVGElement::contentStyleType): Ditto
        * svg/SVGStyleElement.cpp:
        (WebCore::SVGStyleElement::type): Ditto
        (WebCore::SVGStyleElement::media): Ditto
        * svg/SVGTextContentElement.cpp:
        (WebCore::SVGTextContentElement::parseMappedAttribute): Ditto
        * svg/animation/SVGSMILElement.cpp:
        (WebCore::SVGSMILElement::parseClockValue): Ditto
        (WebCore::SVGSMILElement::restart): Ditto
        (WebCore::SVGSMILElement::fill): Ditto
        (WebCore::SVGSMILElement::repeatCount): Ditto
        (WebCore::SVGSMILElement::notifyDependentsIntervalChanged): Ditto
        * svg/graphics/SVGResource.cpp:
        (WebCore::clientMap): Ditto
        * svg/graphics/SVGResourceMarker.cpp:
        (WebCore::SVGResourceMarker::draw): Ditto
        * xml/XMLHttpRequest.cpp:
        (WebCore::preflightResultCache): Ditto
        (WebCore::isSafeRequestHeader): Ditto
        (WebCore::isOnAccessControlResponseHeaderWhitelist): Ditto
        * xml/XPathExpressionNode.cpp:
        (WebCore::XPath::Expression::evaluationContext): Ditto
        * xml/XPathParser.cpp:
        (WebCore::XPath::isAxisName): Ditto
        (WebCore::XPath::isNodeTypeName): Ditto
        * xml/XPathValue.cpp:
        (WebCore::XPath::Value::toNodeSet): Ditto

2008-11-06  Tor Arne Vestbø  <tavestbo@trolltech.com>

        Rubber-stamped by Simon Hausmann.

        Remove a bunch of unused methods in the Qt media element implementation

        * platform/graphics/qt/MediaPlayerPrivatePhonon.cpp:
        (WebCore::MediaPlayerPrivate::MediaPlayerPrivate):
        * platform/graphics/qt/MediaPlayerPrivatePhonon.h:

2008-11-05  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dave Hyatt

        https://bugs.webkit.org/show_bug.cgi?id=21870

        Implement absoluteToLocal() to convert a point from absolute
        to local coordinates, optionally taking transforms into account.

        Use this to set offsetX/offsetY in mouse events, thus fixing
        offsetX/offsetY in events on elements with transforms.

        Test: fast/events/offsetX-offsetY.html

        * dom/MouseRelatedEvent.cpp:
        (WebCore::MouseRelatedEvent::receivedTarget):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::localToAbsolute):
        (WebCore::RenderBox::absoluteToLocal):
        (WebCore::RenderBox::offsetFromContainer):
        * rendering/RenderBox.h:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::absoluteToLocal):
        * rendering/RenderObject.h:
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::localToAbsolute):
        (WebCore::RenderTableCell::absoluteToLocal):
        * rendering/RenderTableCell.h:
        * rendering/RenderView.cpp:
        (WebCore::RenderView::absoluteToLocal):
        * rendering/RenderView.h:

2008-11-06  Alp Toker  <alp@nuanti.com>

        Reviewed by Cameron Zwarich.

        https://bugs.webkit.org/show_bug.cgi?id=22067
        [GTK] Sun Java plugin segfaults at PluginPackage::createPackage()

        null-check symbols loaded from plugin modules, initialize the function
        table (like Win already does) and update it with the latest
        additions. Adjust whitespace for easy diff'ing with the Win port code
        from which it was forked.

        This fixes crashes with libnspr4.so and any other plugins that don't
        provide the symbols we expect.

        * plugins/gtk/PluginPackageGtk.cpp:
        (WebCore::PluginPackage::fetchInfo):
        (WebCore::PluginPackage::load):

2008-11-06  Kristian Amlie  <kristian.amlie@nokia.com>

        Reviewed by Simon Hausmann.

        Removed dead (and broken) code from an ancient Symbian port.

        * config.h:
        * platform/text/AtomicString.h:
        * platform/text/PlatformString.h:

2008-11-06  Kristian Amlie  <kristian.amlie@nokia.com>

        Reviewed by Simon Hausmann.

        Use QLibrary as PlatformModule when compiling with Qt for S60.

        * platform/FileSystem.h:

2008-11-06  Kristian Amlie  <kristian.amlie@nokia.com>

        Reviewed by Simon Hausmann.

        Compile fix for Symbian.
        The snprintf function is defined in stdio.h, the inclusion
        of snprintf.h inside this PLATFORM(SYMBIAN) block does not
        compile.

        * config.h:

2008-11-06  Kristian Amlie  <kristian.amlie@nokia.com>

        Reviewed by Simon Hausmann.

        Disable webkit plugins for Symbian.

        * WebCore.pro:

2008-11-06  Tor Arne Vestbø  <tavestbo@trolltech.com>

        Fix build break in debug mode when XSLT is not enabled

        * loader/Cache.cpp:
        (WebCore::Cache::dumpStats):

2008-11-06  Tor Arne Vestbø  <tavestbo@trolltech.com>

        Reviewed by Simon Hausmann.

        Repaint video on UpdateRequest to prevent recursive painting

        Calling QWidget::render() to update the video generates a paint
        event that's then picked up by the event filter once more :(

        We're really only interested in updates from Phonon, which we
        get through the UpdateRequest for each new frame.

        * platform/graphics/qt/MediaPlayerPrivatePhonon.cpp:
        (WebCore::MediaPlayerPrivate::eventFilter):

2008-11-06  Cameron Zwarich  <zwarich@apple.com>

        Not reviewed.

        Fix the WebCore build for some platforms by changing build scripts to
        account for the recent move of the create_hash_table script from the kjs
        subdirectory of JavaScriptCore to the root directory.

        * WebCore.pro:
        * make-generated-sources.sh:

2008-11-06  Cameron Zwarich  <zwarich@apple.com>

        Not reviewed.

        Fix a case-sensitivity issue in Mac forwarding headers. Strangely
        enough, this does not always cause the build to break, even with a
        case-sensitive filesystem.

        * ForwardingHeaders/runtime/Interpreter.h:

2008-11-05  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Maciej Stachowiak.

        https://bugs.webkit.org/show_bug.cgi?id=22083
        MessageEvents cannot be used across threads

        * dom/Event.idl:
        * dom/MessageEvent.idl:
        Add a NoStaticTables attribute - MessageEvent is used in worker threads, so static tables
        won't work.

        * dom/MessagePort.cpp:
        (WebCore::MessagePort::EventData::EventData):
        (WebCore::MessagePort::EventData::~EventData):
        (WebCore::MessagePort::clone):
        (WebCore::MessagePort::postMessage):
        (WebCore::MessagePort::startConversation):
        (WebCore::MessagePort::dispatchMessages):
        * dom/MessagePort.h:
        Don't create a MessageEvent until dispatch time - messages can be posted across threads,
        but MessageEvents are tied to the thread that they were created in.

2008-11-05  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=22066
        Implement Worker global object

        * DerivedSources.make: Added WorkerLocation IDL and JSWorkerContext lookup table.

        * WebCore.xcodeproj/project.pbxproj: Only adding files to Mac project for now, as Worker
        support is still disabled by default.

        * bindings/js/JSDOMGlobalObject.cpp: (WebCore::toJSDOMGlobalObject): Implemented Worker case.

        * bindings/js/JSMessageChannelConstructor.cpp:
        (WebCore::JSMessageChannelConstructor::JSMessageChannelConstructor): Ditto.

        * bindings/js/JSWorkerContext.cpp: Added.
        * bindings/js/JSWorkerContext.h: Added.
        * bindings/js/WorkerScriptController.cpp: Added.
        * bindings/js/WorkerScriptController.h: Added.
        * dom/WorkerContext.cpp: Added.
        * dom/WorkerContext.h: Added.
        Added an implementation of worker contexts.

        * dom/DedicatedWorker.cpp:
        (WebCore::DedicatedWorker::startLoad): Fixed a lifetime bug I saw on my tests.
        (WebCore::DedicatedWorker::notifyFinished): Create a thread. Currently, object ownership
        and lifetime is not clear at all.

        * dom/WorkerLocation.cpp: Added.
        * dom/WorkerLocation.h: Added.
        * dom/WorkerLocation.idl: Added.
        Added WorkerLocation, which is one of the objects available to workers.

        * dom/WorkerThread.cpp: Added.
        (WebCore::WorkerThread::WorkerThread):
        (WebCore::WorkerThread::start):
        (WebCore::WorkerThread::workerThreadStart):
        (WebCore::WorkerThread::workerThread):
        * dom/WorkerThread.h: Added.
        (WebCore::WorkerThread::create):
        Run some code in a worker thread (no message loop yet).

2008-11-05  Antti Koivisto  <antti@apple.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=22093
        Don't keep decoded stylesheet data in cache

        <rdar://problem/6343588>

        Don't keep decoded stylesheet string around in the cache. There are no sharing benefits and
        performance benefits are negligible (no measured PLT impact). Reduces memory consumption of
        style sheet data in cache by 2/3 in common case.

        * loader/CachedCSSStyleSheet.cpp:
        (WebCore::CachedCSSStyleSheet::sheetText):
        (WebCore::CachedCSSStyleSheet::data):
        * loader/CachedCSSStyleSheet.h:

2008-11-05  David Kilzer  <ddkilzer@apple.com>

        Bug 21596: WebCore::Cache should use parsed Pragma and Cache-Control headers

        <https://bugs.webkit.org/show_bug.cgi?id=21596>

        Reviewed by Antti.

        This patch adds real parsing for Pragma and Cache-Control headers
        based on RFC 2616, Sections 2, 14.9 and 14.32.  It also adds some
        new String and StringImpl methods to assist with the parsing.

        * loader/Cache.cpp:
        (WebCore::Cache::dumpStats): Added.  Convenience method for dumping
        stats outside of Safari.
        * loader/Cache.h: Declared dumpStats().

        * loader/CachedResource.cpp:
        (WebCore::CachedResource::mustRevalidate): Updated to use
        ResourceResponseBase::cacheControlDirectives() instead of substring
        matching of the entire Cache-Control header.

        * loader/loader.cpp:
        (WebCore::Loader::Host::didReceiveResponse): Used the local
        'resource' variable instead of 'request->cachedResource()'.

        * platform/network/ResourceResponseBase.cpp:
        (WebCore::ResourceResponseBase::setHTTPHeaderField): Set
        m_haveParsedCacheControlHeader to false when a "Cache-Control"
        header is set.  Ditto for m_haveParsedPragmaHeader and "Pragma".
        (WebCore::ResourceResponseBase::parsePragmaDirectives): Added.
        Provides parsed Pragma header directives.
        (WebCore::ResourceResponseBase::parseCacheControlDirectives): Added.
        Provides parsed Cache-Control header directives.
        (WebCore::isCacheHeaderSeparator): Added.  Returns true if a
        character is a separator character per RFC 2616, Section 2.2, else
        returns false.
        (WebCore::isControlCharacter): Added.  Returns true if a character
        is a control character per RFC 2616 Section 2.2, else returns false.
        (WebCore::trimToNextSeparator): Added.  Returns a string truncated
        at the first separator character per isCacheHeaderSeparator().
        (WebCore::parseCacheHeader): Added.  This is the main parsing
        routine for both Cache-Control and Pragma headers.
        (WebCore::parseCacheControlDirectiveValues): Added.  This splits
        certain Cache-Control directive values into a vector of strings.
        * platform/network/ResourceResponseBase.h:
        (WebCore::CacheControlDirectiveMap): Added.  Typedef for a parsed
        Cache-Control header.
        (WebCore::PragmaDirectiveMap): Added.  Typedef for a parsed Pragma
        header.
        (WebCore::ResourceResponseBase::parsePragmaDirectives): Added
        declaration.
        (WebCore::ResourceResponseBase::parseCacheControlDirectives): Ditto.
        (WebCore::ResourceResponseBase::m_haveParsedCacheControlHeader):
        Added.  Boolean to describe when the "Cache-Control" header needs to
        be reparsed.
        (WebCore::ResourceResponseBase::m_haveParsedPragmaHeader):  Added.
        Boolean to describe when the "Pragma" header needs to be reparsed.
        (WebCore::ResourceResponseBase::m_cacheControlDirectiveMap): Added.
        Cached map to hold parsed "Cache-Control" headers.
        (WebCore::ResourceResponseBase::m_pragmaDirectiveMap): Added.
        Cached map to hold parsed "Pragma" headers.

        * platform/text/PlatformString.h:
        (WebCore::String::find): Added.  Returns the first match based on
        the character-matching function pointer passed in.
        (WebCore::String::removeCharacters): Added declaration.
        (WebCore::find): Added.  Inline method that takes a character-
        matching function pointer.  Called by StringImpl::find().
        * platform/text/String.cpp:
        (WebCore::String::removeCharacters): Added.  Calls
        StringImpl::removeCharacters().
        * platform/text/StringImpl.cpp:
        (WebCore::StringImpl::removeCharacters): Added.  Returns a string
        with all characters removed that match the character-matching
        function pointer passed in.  If there is no change to the string, it
        returns itself.  Based heavily on StringImpl::simplifyWhitespace().
        (WebCore::StringImpl::find): Added.  Calls WebCore::find().
        * platform/text/StringImpl.h:
        (WebCore::FindMatchFunctionPtr): Added.  Typedef for a character-
        matching function pointer.
        (WebCore::StringImpl::removeCharacters): Added declaration.
        (WebCore::StringImpl::find): Ditto.

2008-11-05  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by Beth Dakin.

        <rdar://problem/5480736> In Mail and Gmail, copied indented text pastes with line break

        As a rule, we don't allow merges out of blockquotes.  In the bug, we are inserting a text node
        between two blockquotes.  Because the start merge moves the text node into a blockquote, when we
        determine whether or not we should do the end merge, it incorrectly appears as though the end merge
        is merging out of a blockquote.  The fix is to determine whether or not we should do the end merge
        before we do the start merge, so that the start merge doesn't effect our decision.

        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::ReplaceSelectionCommand): Initialize the new boolean.
        (WebCore::ReplaceSelectionCommand::mergeEndIfNeeded): Moved code from doApply() here for clarity.
        (WebCore::ReplaceSelectionCommand::doApply): Set m_shouldMergeEnd before we do the start merge.
        * editing/ReplaceSelectionCommand.h: Added m_shouldMergeEnd.

2008-11-05  Cameron Zwarich  <zwarich@apple.com>

        Not reviewed.

        Speculatively fix the Windows build, even though these changes may not
        actually matter for anything in the build, because the Windows bots are
        behind.

        * WebCore.vcproj/WebCore.vcproj:

2008-11-05  Cameron Zwarich  <zwarich@apple.com>

        Not reviewed.

        Fix the Qt build.

        * bridge/qt/qt_class.cpp:
        * bridge/qt/qt_runtime.h:

2008-11-05  Cameron Zwarich  <zwarich@apple.com>

        Rubber-stamped by Sam Weinig.

        Move more files to the runtime subdirectory of JavaScriptCore.

        * ForwardingHeaders/kjs/collector.h: Removed.
        * ForwardingHeaders/kjs/completion.h: Removed.
        * ForwardingHeaders/kjs/identifier.h: Removed.
        * ForwardingHeaders/kjs/interpreter.h: Removed.
        * ForwardingHeaders/kjs/lookup.h: Removed.
        * ForwardingHeaders/kjs/operations.h: Removed.
        * ForwardingHeaders/kjs/protect.h: Removed.
        * ForwardingHeaders/kjs/ustring.h: Removed.
        * ForwardingHeaders/runtime/Collector.h: Copied from ForwardingHeaders/kjs/collector.h.
        * ForwardingHeaders/runtime/Completion.h: Copied from ForwardingHeaders/kjs/completion.h.
        * ForwardingHeaders/runtime/Identifier.h: Copied from ForwardingHeaders/kjs/identifier.h.
        * ForwardingHeaders/runtime/Interpreter.h: Copied from ForwardingHeaders/kjs/interpreter.h.
        * ForwardingHeaders/runtime/Lookup.h: Copied from ForwardingHeaders/kjs/lookup.h.
        * ForwardingHeaders/runtime/Operations.h: Copied from ForwardingHeaders/kjs/operations.h.
        * ForwardingHeaders/runtime/Protect.h: Copied from ForwardingHeaders/kjs/protect.h.
        * ForwardingHeaders/runtime/UString.h: Copied from ForwardingHeaders/kjs/ustring.h.
        * bindings/js/GCController.cpp:
        * bindings/js/JSCustomPositionCallback.h:
        * bindings/js/JSCustomPositionErrorCallback.h:
        * bindings/js/JSCustomSQLStatementCallback.h:
        * bindings/js/JSCustomSQLStatementErrorCallback.h:
        * bindings/js/JSCustomSQLTransactionErrorCallback.h:
        * bindings/js/JSCustomVoidCallback.h:
        * bindings/js/JSDOMBinding.h:
        * bindings/js/JSDOMWindowBase.h:
        * bindings/js/JSEventListener.h:
        * bindings/js/ScheduledAction.h:
        * bindings/js/ScriptController.cpp:
        * bindings/js/ScriptController.h:
        * bindings/objc/WebScriptObject.mm:
        * bindings/scripts/CodeGeneratorJS.pm:
        * bridge/NP_jsobject.cpp:
        * bridge/c/c_class.cpp:
        * bridge/jni/jni_class.cpp:
        * bridge/jni/jni_jsobject.mm:
        * bridge/npruntime.cpp:
        * bridge/runtime_root.h:
        * history/CachedPage.h:
        * html/CanvasRenderingContext2D.cpp:
        * html/HTMLCanvasElement.cpp:
        * inspector/InspectorController.cpp:
        * inspector/JavaScriptCallFrame.cpp:
        * page/Console.cpp:
        * page/Page.cpp:
        * platform/text/AtomicString.cpp:
        * platform/text/PlatformString.h:

2008-11-05  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Fix https://bugs.webkit.org/show_bug.cgi?id=22085
        The Plugin JS object should expose item() and namedItem() methods to match Firefox

        * bindings/js/JSPluginCustom.cpp:
        (WebCore::JSPlugin::nameGetter):
        * plugins/Plugin.cpp:
        (WebCore::Plugin::namedItem):
        * plugins/Plugin.h:
        * plugins/Plugin.idl:

2008-11-05  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Maciej Stachowiak.

        https://bugs.webkit.org/show_bug.cgi?id=21060
        Range#surroundContents incorrectly throws BAD_BOUNDARYPOINTS_ERR

        Test: fast/dom/Range/surroundContents-check-boundary-points.html

        * dom/Range.cpp: (WebCore::Range::surroundContents): Fix BAD_BOUNDARYPOINTS_ERR checks.

2008-11-05  Anders Carlsson  <andersca@apple.com>

        Reviewed by Dan Bernstein.

        Remove two global destructors from CoreTextController.

        * platform/graphics/mac/CoreTextController.cpp:
        (WebCore::CoreTextController::collectCoreTextRunsForCharacters):

2008-11-05  Darin Fisher  <darin@chromium.org>

        Reviewed by Darin Adler.

        CRASH at Scrollbar::invalidateRect due to null m_client
        https://bugs.webkit.org/show_bug.cgi?id=22080

        * platform/Scrollbar.cpp:
        (WebCore::Scrollbar::isWindowActive):
        (WebCore::Scrollbar::invalidateRect):

2008-11-04  Sam Weinig  <sam@webkit.org>

        Reviewed by Simon Hausmann.

        Fix https://bugs.webkit.org/show_bug.cgi?id=21648
        navigator.mimeTypes and navigator.plugins don't expose item and namedItem to JS

        - Also adds constructors for Plugin, PluginArray, MimeType and MimeTypeArray.

        * bindings/js/JSMimeTypeArrayCustom.cpp:
        (WebCore::JSMimeTypeArray::nameGetter):
        * bindings/js/JSPluginArrayCustom.cpp:
        (WebCore::JSPluginArray::nameGetter):
        * page/DOMWindow.idl:
        * plugins/MimeType.idl:
        * plugins/MimeTypeArray.cpp:
        (WebCore::MimeTypeArray::namedItem):
        * plugins/MimeTypeArray.h:
        * plugins/MimeTypeArray.idl:
        * plugins/Plugin.idl:
        * plugins/PluginArray.cpp:
        (WebCore::PluginArray::namedItem):
        * plugins/PluginArray.h:
        * plugins/PluginArray.idl:

2008-11-05  Steve Falkenburg  <sfalken@apple.com>

        Build fix.

        * plugins/PluginPackage.cpp:

2008-11-05  Jeff Cook  <cookiecaper@gmail.com>

        Reviewed by Simon Hausmann and Tor Arne.

        Fix crash in the Qt port when unloading swfdec and Flash 10
        by reordering window destruction and plugin stop.

        See https://bugs.webkit.org/show_bug.cgi?id=20779

        * plugins/qt/PluginViewQt.cpp:
        (WebCore::PluginView::stop):

2008-11-05  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Tor Arne Vestbø

        Fix loading of Flash 10 in the Qt port by faking the toolkit to be Gtk.

        Otherwise Flash refuses to load and function :(

        * plugins/PluginPackage.cpp:
        (WebCore::PluginPackage::determineQuirks):
        * plugins/PluginQuirkSet.h:
        (WebCore::):
        * plugins/qt/PluginViewQt.cpp:
        (WebCore::PluginView::getValue):

2008-11-05  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Tor Arne Vestbø

        Unify determineQuirks between the Qt and the Gtk PluginPackage.
        Share the code for parsing the module version from the description.
        This is currently used to determine Flash based quirks.

        * plugins/PluginPackage.cpp:
        (WebCore::PluginPackage::createPackage):
        (WebCore::PluginPackage::determineQuirks):
        (WebCore::PluginPackage::determineModuleVersionFromDescription):
        * plugins/PluginPackage.h:
        * plugins/gtk/PluginPackageGtk.cpp:
        (WebCore::PluginPackage::fetchInfo):
        * plugins/qt/PluginPackageQt.cpp:
        (WebCore::PluginPackage::fetchInfo):

2008-11-04  Cameron Zwarich  <zwarich@apple.com>

        Rubber-stamped by Sam Weinig.

        Move kjs/dtoa.h to the wtf subdirectory of JavaScriptCore.

        * ForwardingHeaders/kjs/dtoa.h: Removed.
        * ForwardingHeaders/wtf/dtoa.h: Copied from ForwardingHeaders/kjs/dtoa.h.
        * css/CSSParser.cpp:
        * platform/text/String.cpp:
        * platform/text/StringImpl.cpp:

2008-11-04  Jonathan Haas  <myrdred@gmail.com>

        Addiitonal tweaks and patch prep by Pamela Greene <pam@chromium.org>

        Reviewed by Darin Adler.

        Fixed an issue which could cause memory corruption using ToT libxml.
        See https://bugs.webkit.org/show_bug.cgi?id=15715

        Test: fast/xsl/xslt-nested-stylesheets.xml

        * xml/XSLImportRule.cpp:
        (WebCore::XSLImportRule::setXSLStyleSheet): Set parent rather than owner document
        * xml/XSLStyleSheet.cpp:
        (WebCore::XSLStyleSheet::XSLStyleSheet): Initialize m_parentStyleSheet
        (WebCore::XSLStyleSheet::parseString): Make all child stylesheets use parent's dictionary
        (WebCore::XSLStyleSheet::setParentStyleSheet): Added
        * xml/XSLStyleSheet.h: Added m_parentStyleSheet member

2008-11-04  Simon Fraser  <simon.fraser@apple.com>

        No review.

        Improved buid fix: include MathExtras.h to get roundf on all platforms.

        * platform/graphics/FloatPoint.h:

2008-11-04  Brady Eidson  <beidson@apple.com>

        Reviewed by John Sullivan

        Add a simple "visited" method to HistoryItem for use by global history

        * WebCore.base.exp:

        * history/HistoryItem.cpp:
        (WebCore::HistoryItem::visited):  Update the title on the item, set last visited time,
          and bump the visit count.  All things that should happen when a url is visited again!
        * history/HistoryItem.h:

2008-11-04  Jan Michael Alonzo  <jmalonzo@webkit.org>

        Build fix. Not reviewed.

        * platform/graphics/FloatPoint.h: include math.h.
        reported by zdobersek in #webkit.

2008-11-04  Darin Fisher  <darin@chromium.org>

        Reviewed by Anders Carlsson.

        No need to clobber all ResourceRequest fields in FrameLoader::reload()
        https://bugs.webkit.org/show_bug.cgi?id=21949

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::reload):

2008-11-04  Darin Adler  <darin@apple.com>

        Reviewed by Tim Hatcher.

        * storage/Database.cpp:
        (WebCore::databaseVersionKey): Tweaked formatting.

2008-11-03  Darin Adler  <darin@apple.com>

        Reviewed by Tim Hatcher.

        - https://bugs.webkit.org/show_bug.cgi?id=22061
          create script to check for exit-time destructors

        * WebCore.xcodeproj/project.pbxproj: Added a script
        phase that runs the check-for-exit-time-destructors script.

        * html/HTMLAttributeNames.in: Removed some unused attribute names.

        * html/HTMLEmbedElement.cpp:
        (WebCore::HTMLEmbedElement::parseMappedAttribute): Removed code that
        sets the write-only m_pluginPage.
        * html/HTMLEmbedElement.h: Ditto.

        * platform/mac/CursorMac.mm:
        (WebCore::leakNamedCursor): Changed to return a Cursor&.
        (WebCore::pointerCursor): Changed to leak an object to avoid an
        exit-time destructor.
        (WebCore::crossCursor): Ditto.
        (WebCore::handCursor): Ditto.
        (WebCore::moveCursor): Ditto.
        (WebCore::verticalTextCursor): Ditto.
        (WebCore::cellCursor): Ditto.
        (WebCore::contextMenuCursor): Ditto.
        (WebCore::aliasCursor): Ditto.
        (WebCore::zoomInCursor): Ditto.
        (WebCore::zoomOutCursor): Ditto.
        (WebCore::copyCursor): Ditto.
        (WebCore::noneCursor): Ditto.
        (WebCore::progressCursor): Ditto.
        (WebCore::noDropCursor): Ditto.
        (WebCore::notAllowedCursor): Ditto.
        (WebCore::iBeamCursor): Ditto.
        (WebCore::waitCursor): Ditto.
        (WebCore::helpCursor): Ditto.
        (WebCore::eastResizeCursor): Ditto.
        (WebCore::northResizeCursor): Ditto.
        (WebCore::northEastResizeCursor): Ditto.
        (WebCore::northWestResizeCursor): Ditto.
        (WebCore::southResizeCursor): Ditto.
        (WebCore::southEastResizeCursor): Ditto.
        (WebCore::southWestResizeCursor): Ditto.
        (WebCore::westResizeCursor): Ditto.
        (WebCore::northSouthResizeCursor): Ditto.
        (WebCore::eastWestResizeCursor): Ditto.
        (WebCore::northEastSouthWestResizeCursor): Ditto.
        (WebCore::northWestSouthEastResizeCursor): Ditto.
        (WebCore::columnResizeCursor): Ditto.
        (WebCore::rowResizeCursor): Ditto.
        (WebCore::grabCursor): Ditto.
        (WebCore::grabbingCursor): Ditto.

        * storage/Database.cpp:
        (WebCore::guidMutex): Changed to leak an object to avoid an
        exit-time destructor. Also added a comment explaining why it's
        thread safe.
        (WebCore::guidToVersionMap): Ditto.
        (WebCore::guidToDatabaseMap): Ditto.
        (WebCore::Database::databaseInfoTableName): Ditto.
        (WebCore::databaseVersionKey): Ditto.
        (WebCore::Database::getVersionFromDatabase): Ditto.
        (WebCore::Database::setVersionInDatabase): Ditto.
        (WebCore::guidForOriginAndName): Ditto.
        * storage/DatabaseTracker.cpp:
        (WebCore::DatabaseTracker::tracker): Ditto.
        (WebCore::notificationMutex): Ditto.
        (WebCore::notificationQueue): Ditto.
        (WebCore::DatabaseTracker::notifyDatabasesChanged): Ditto.

2008-11-04  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dave Hyatt

        https://bugs.webkit.org/show_bug.cgi?id=21941

        Rename absolutePosition() to localToAbsolute(), and add the ability
        to optionally take transforms into account (which will eventually be the
        default behavior).

        * WebCore.base.exp:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::getUpperLeftCorner):
        (WebCore::ContainerNode::getLowerRightCorner):
        (WebCore::ContainerNode::getRect):
        * dom/ContainerNode.h:
        * dom/MouseRelatedEvent.cpp:
        (WebCore::MouseRelatedEvent::receivedTarget):
        * dom/Node.cpp:
        (WebCore::Node::getRect):
        * editing/SelectionController.cpp:
        (WebCore::SelectionController::layout):
        (WebCore::SelectionController::caretRect):
        * editing/visible_units.cpp:
        (WebCore::previousLinePosition):
        (WebCore::nextLinePosition):
        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::isKeyboardFocusable):
        (WebCore::HTMLAnchorElement::defaultEventHandler):
        * html/HTMLAreaElement.cpp:
        (WebCore::HTMLAreaElement::getRect):
        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::x):
        (WebCore::HTMLImageElement::y):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::defaultEventHandler):
        * html/HTMLInputElement.h:
        * page/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::boundingBoxRect):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleDrag):
        * platform/graphics/FloatPoint.h:
        (WebCore::roundedIntPoint):
        * platform/graphics/IntSize.h:
        (WebCore::IntSize::expand):
        * rendering/LayoutState.cpp:
        (WebCore::LayoutState::LayoutState):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::layoutBlock):
        (WebCore::RenderBlock::paintObject):
        (WebCore::RenderBlock::selectionGapRects):
        (WebCore::RenderBlock::fillBlockSelectionGaps):
        (WebCore::RenderBlock::nodeAtPoint):
        (WebCore::RenderBlock::positionForCoordinates):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::localToAbsolute):
        (WebCore::RenderBox::computeAbsoluteRepaintRect):
        (WebCore::RenderBox::caretRect):
        * rendering/RenderBox.h:
        (WebCore::RenderBox::relativePositionOffset):
        * rendering/RenderContainer.cpp:
        (WebCore::RenderContainer::addLineBoxRects):
        * rendering/RenderFlow.cpp:
        (WebCore::RenderFlow::absoluteClippedOverflowRect):
        (WebCore::RenderFlow::caretRect):
        (WebCore::RenderFlow::addFocusRingRects):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateLayerPosition):
        (WebCore::RenderLayer::convertToLayerCoords):
        (WebCore::RenderLayer::addScrolledContentOffset):
        (WebCore::RenderLayer::subtractScrolledContentOffset):
        (WebCore::RenderLayer::scrollRectToVisible):
        * rendering/RenderLayer.h:
        (WebCore::RenderLayer::scrolledContentOffset):
        (WebCore::RenderLayer::relativePositionOffset):
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::panScroll):
        (WebCore::RenderListBox::scrollToward):
        * rendering/RenderListMarker.cpp:
        (WebCore::RenderListMarker::selectionRect):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::absoluteBoundingBoxRect):
        (WebCore::RenderObject::computeAbsoluteRepaintRect):
        (WebCore::RenderObject::localToAbsolute):
        (WebCore::RenderObject::addDashboardRegions):
        (WebCore::RenderObject::absoluteContentBox):
        (WebCore::RenderObject::absoluteOutlineBox):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::localToAbsoluteForContent):
        * rendering/RenderPart.cpp:
        (WebCore::RenderPart::updateWidgetPosition):
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::selectionRect):
        * rendering/RenderSVGInlineText.cpp:
        (WebCore::RenderSVGInlineText::computeAbsoluteRectForRange):
        * rendering/RenderSVGText.cpp:
        (WebCore::RenderSVGText::absoluteRects):
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::localToAbsolute):
        * rendering/RenderTableCell.h:
        * rendering/RenderText.cpp:
        (WebCore::RenderText::addLineBoxRects):
        (WebCore::RenderText::caretRect):
        (WebCore::RenderText::selectionRect):
        * rendering/RenderVideo.cpp:
        (WebCore::RenderVideo::updatePlayer):
        * rendering/RenderView.cpp:
        (WebCore::RenderView::localToAbsolute):
        * rendering/RenderView.h:
        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::updateWidgetPosition):
        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::getScreenCTM):

2008-11-03  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Simon Hausmann.

        Add methods for getting and setting user data on History Item.
        This change is limited to QT port only. Tests were added in
        the patch for https://bugs.webkit.org/show_bug.cgi?id=21864.

        Minor change by Simon: made the functions inline and added a missing
        const.

        * history/HistoryItem.h:

2008-11-01  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=22030
        Make EventNames usable from multiple threads

        * platform/text/AtomicString.cpp:
        (WebCore::stringTable):
        (WebCore::AtomicString::add):
        (WebCore::AtomicString::remove):
        (WebCore::AtomicString::find):
        (WebCore::AtomicString::init):
        * platform/text/AtomicString.h:
        Atomic string table is now per-thread. Individual strings cannot be shared between threads,
        so global AtomicString constants cannot be used from threads other than the main one.

        * dom/EventNames.cpp:
        (WebCore::EventNames::EventNames):
        (WebCore::eventNames):
        (WebCore::EventNames::init):
        * dom/EventNames.h:
        Made EventNames a ThreadSpecific struct. Individual event names are now accessed as
        eventNames().fooEvent, not EventNames::fooEvent. This makes EventNames usable from all
        threads.

        * WebCore.base.exp:
        * bindings/js/JSDOMWindowBase.cpp:
        * bindings/js/JSEventListener.cpp:
        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::processingUserGesture):
        * dom/BeforeTextInsertedEvent.cpp:
        (WebCore::BeforeTextInsertedEvent::BeforeTextInsertedEvent):
        * dom/BeforeUnloadEvent.cpp:
        (WebCore::BeforeUnloadEvent::BeforeUnloadEvent):
        * dom/CharacterData.cpp:
        (WebCore::CharacterData::dispatchModifiedEvent):
        * dom/ContainerNode.cpp:
        (WebCore::dispatchChildInsertionEvents):
        (WebCore::dispatchChildRemovalEvents):
        * dom/DedicatedWorker.cpp:
        (WebCore::DedicatedWorker::dispatchErrorEvent):
        * dom/Document.cpp:
        (WebCore::Document::implicitClose):
        (WebCore::Document::setFocusedNode):
        (WebCore::Document::addListenerTypeIfNeeded):
        (WebCore::Document::removeWindowInlineEventListenerForType):
        (WebCore::Document::addWindowEventListener):
        (WebCore::Document::removeWindowEventListener):
        (WebCore::Document::finishedParsing):
        * dom/EventTargetNode.cpp:
        (WebCore::EventTargetNode::dispatchGenericEvent):
        (WebCore::EventTargetNode::dispatchSubtreeModifiedEvent):
        (WebCore::EventTargetNode::dispatchWindowEvent):
        (WebCore::EventTargetNode::dispatchUIEvent):
        (WebCore::EventTargetNode::dispatchSimulatedClick):
        (WebCore::EventTargetNode::dispatchMouseEvent):
        (WebCore::EventTargetNode::dispatchFocusEvent):
        (WebCore::EventTargetNode::dispatchBlurEvent):
        (WebCore::EventTargetNode::defaultEventHandler):
        (WebCore::EventTargetNode::on*): (multiple methods)
        (WebCore::EventTargetNode::setOn*): (multiple methods)
        * dom/KeyboardEvent.cpp:
        (WebCore::eventTypeForKeyboardEventType):
        (WebCore::KeyboardEvent::keyCode):
        (WebCore::KeyboardEvent::charCode):
        * dom/MessageEvent.cpp:
        (WebCore::MessageEvent::MessageEvent):
        * dom/MessagePort.cpp:
        (WebCore::MessagePort::dispatchMessages):
        (WebCore::MessagePort::dispatchCloseEvent):
        * dom/MouseEvent.cpp:
        (WebCore::MouseEvent::isDragEvent):
        (WebCore::MouseEvent::toElement):
        (WebCore::MouseEvent::fromElement):
        * dom/OverflowEvent.cpp:
        (WebCore::OverflowEvent::OverflowEvent):
        * dom/TextEvent.cpp:
        (WebCore::TextEvent::TextEvent):
        * dom/WebKitAnimationEvent.cpp:
        (WebCore::WebKitAnimationEvent::WebKitAnimationEvent):
        (WebCore::WebKitAnimationEvent::~WebKitAnimationEvent):
        (WebCore::WebKitAnimationEvent::initWebKitAnimationEvent):
        (WebCore::WebKitAnimationEvent::animationName):
        (WebCore::WebKitAnimationEvent::elapsedTime):
        * dom/WebKitTransitionEvent.cpp:
        (WebCore::WebKitTransitionEvent::WebKitTransitionEvent):
        (WebCore::WebKitTransitionEvent::~WebKitTransitionEvent):
        (WebCore::WebKitTransitionEvent::initWebKitTransitionEvent):
        (WebCore::WebKitTransitionEvent::propertyName):
        (WebCore::WebKitTransitionEvent::elapsedTime):
        * dom/WheelEvent.cpp:
        (WebCore::WheelEvent::WheelEvent):
        (WebCore::WheelEvent::initWheelEvent):
        * dom/XMLTokenizerLibxml2.cpp:
        * dom/XMLTokenizerQt.cpp:
        * editing/DeleteButton.cpp:
        (WebCore::DeleteButton::defaultEventHandler):
        * editing/EditCommand.cpp:
        * editing/Editor.cpp:
        (WebCore::Editor::canDHTMLCut):
        (WebCore::Editor::canDHTMLCopy):
        (WebCore::Editor::canDHTMLPaste):
        (WebCore::Editor::tryDHTMLCopy):
        (WebCore::Editor::tryDHTMLCut):
        (WebCore::Editor::tryDHTMLPaste):
        (WebCore::dispatchEditableContentChangedEvents):
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplacementFragment::ReplacementFragment):
        * editing/SelectionController.cpp:
        (WebCore::SelectionController::setFocused):
        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::defaultEventHandler):
        * html/HTMLBodyElement.cpp:
        (WebCore::HTMLBodyElement::parseMappedAttribute):
        * html/HTMLButtonElement.cpp:
        (WebCore::HTMLButtonElement::parseMappedAttribute):
        (WebCore::HTMLButtonElement::defaultEventHandler):
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::parseMappedAttribute):
        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::onChange):
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::handleLocalEvents):
        (WebCore::HTMLFormElement::prepareSubmit):
        (WebCore::HTMLFormElement::reset):
        (WebCore::HTMLFormElement::parseMappedAttribute):
        * html/HTMLFrameElementBase.cpp:
        (WebCore::HTMLFrameElementBase::parseMappedAttribute):
        * html/HTMLFrameSetElement.cpp:
        (WebCore::HTMLFrameSetElement::parseMappedAttribute):
        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::parseMappedAttribute):
        * html/HTMLImageLoader.cpp:
        (WebCore::HTMLImageLoader::dispatchLoadEvent):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::parseMappedAttribute):
        (WebCore::HTMLInputElement::setValueFromRenderer):
        (WebCore::HTMLInputElement::preDispatchEventHandler):
        (WebCore::HTMLInputElement::postDispatchEventHandler):
        (WebCore::HTMLInputElement::defaultEventHandler):
        (WebCore::HTMLInputElement::onSearch):
        * html/HTMLLabelElement.cpp:
        (WebCore::HTMLLabelElement::defaultEventHandler):
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::load):
        (WebCore::HTMLMediaElement::mediaPlayerNetworkStateChanged):
        (WebCore::HTMLMediaElement::setReadyState):
        (WebCore::HTMLMediaElement::progressEventTimerFired):
        (WebCore::HTMLMediaElement::seek):
        (WebCore::HTMLMediaElement::setDefaultPlaybackRate):
        (WebCore::HTMLMediaElement::setPlaybackRate):
        (WebCore::HTMLMediaElement::play):
        (WebCore::HTMLMediaElement::pause):
        (WebCore::HTMLMediaElement::setVolume):
        (WebCore::HTMLMediaElement::setMuted):
        (WebCore::HTMLMediaElement::mediaPlayerTimeChanged):
        (WebCore::HTMLMediaElement::documentWillBecomeInactive):
        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::parseMappedAttribute):
        * html/HTMLOptionElement.cpp:
        * html/HTMLScriptElement.cpp:
        (WebCore::HTMLScriptElement::parseMappedAttribute):
        (WebCore::HTMLScriptElement::dispatchLoadEvent):
        (WebCore::HTMLScriptElement::dispatchErrorEvent):
        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::parseMappedAttribute):
        (WebCore::HTMLSelectElement::defaultEventHandler):
        (WebCore::HTMLSelectElement::menuListDefaultEventHandler):
        (WebCore::HTMLSelectElement::listBoxDefaultEventHandler):
        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::parseMappedAttribute):
        (WebCore::HTMLTextAreaElement::defaultEventHandler):
        * html/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::notifyFinished):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::stopLoading):
        (WebCore::FrameLoader::canCachePage):
        * loader/ImageDocument.cpp:
        (WebCore::ImageEventListener::handleEvent):
        * loader/ImageLoader.cpp:
        * loader/MediaDocument.cpp:
        (WebCore::MediaDocument::defaultEventHandler):
        * loader/appcache/DOMApplicationCache.cpp:
        (WebCore::DOMApplicationCache::callCheckingListener):
        (WebCore::DOMApplicationCache::callErrorListener):
        (WebCore::DOMApplicationCache::callNoUpdateListener):
        (WebCore::DOMApplicationCache::callDownloadingListener):
        (WebCore::DOMApplicationCache::callProgressListener):
        (WebCore::DOMApplicationCache::callUpdateReadyListener):
        (WebCore::DOMApplicationCache::callCachedListener):
        * page/AccessibilityObject.cpp:
        * page/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::mouseButtonListener):
        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::handleContextMenuEvent):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::on*): (multiple methods)
        (WebCore::DOMWindow::setOn*): (multiple methods)
        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleMousePressEvent):
        (WebCore::EventHandler::handleMouseDoubleClickEvent):
        (WebCore::EventHandler::handleMouseMoveEvent):
        (WebCore::EventHandler::handleMouseReleaseEvent):
        (WebCore::EventHandler::updateDragAndDrop):
        (WebCore::EventHandler::cancelDragAndDrop):
        (WebCore::EventHandler::performDragAndDrop):
        (WebCore::EventHandler::updateMouseEventTargetNode):
        (WebCore::EventHandler::dispatchMouseEvent):
        (WebCore::EventHandler::sendContextMenuEvent):
        (WebCore::EventHandler::canMouseDownStartSelect):
        (WebCore::EventHandler::canMouseDragExtendSelect):
        (WebCore::EventHandler::defaultKeyboardEventHandler):
        (WebCore::EventHandler::dragSourceMovedTo):
        (WebCore::EventHandler::dragSourceEndedAt):
        (WebCore::EventHandler::handleDrag):
        (WebCore::EventHandler::handleTextInputEvent):
        * page/FocusController.cpp:
        * page/Frame.cpp:
        (WebCore::Frame::sendResizeEvent):
        (WebCore::Frame::sendScrollEvent):
        * page/Page.cpp:
        (WebCore::networkStateChanged):
        * page/animation/AnimationBase.cpp:
        (WebCore::AnimationBase::updateStateMachine):
        (WebCore::AnimationBase::animationTimerCallbackFired):
        (WebCore::AnimationBase::primeEventTimers):
        * page/animation/ImplicitAnimation.cpp:
        (WebCore::ImplicitAnimation::onAnimationEnd):
        (WebCore::ImplicitAnimation::sendTransitionEvent):
        * page/animation/KeyframeAnimation.cpp:
        (WebCore::KeyframeAnimation::onAnimationStart):
        (WebCore::KeyframeAnimation::onAnimationIteration):
        (WebCore::KeyframeAnimation::onAnimationEnd):
        (WebCore::KeyframeAnimation::sendAnimationEvent):
        * page/gtk/EventHandlerGtk.cpp:
        * page/mac/EventHandlerMac.mm:
        (WebCore::isKeyboardOptionTab):
        * page/mac/FrameMac.mm:
        * page/qt/EventHandlerQt.cpp:
        (WebCore::isKeyboardOptionTab):
        * plugins/PluginView.cpp:
        * plugins/gtk/PluginViewGtk.cpp:
        * plugins/qt/PluginViewQt.cpp:
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginView::handleKeyboardEvent):
        (WebCore::PluginView::handleMouseEvent):
        * rendering/MediaControlElements.cpp:
        (WebCore::MediaControlMuteButtonElement::defaultEventHandler):
        (WebCore::MediaControlPlayButtonElement::defaultEventHandler):
        (WebCore::MediaControlSeekButtonElement::defaultEventHandler):
        (WebCore::MediaControlTimelineElement::defaultEventHandler):
        (WebCore::MediaControlFullscreenButtonElement::defaultEventHandler):
        * rendering/RenderFrameSet.cpp:
        (WebCore::RenderFrameSet::userResize):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::scrollToOffset):
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::valueChanged):
        * rendering/RenderMedia.cpp:
        (WebCore::RenderMedia::forwardEvent):
        * rendering/RenderObject.cpp:
        * rendering/RenderSlider.cpp:
        (WebCore::HTMLSliderThumbElement::defaultEventHandler):
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::forwardEvent):
        (WebCore::RenderTextControl::selectionChanged):
        * rendering/RenderWidget.cpp:
        * rendering/TextControlInnerElements.cpp:
        (WebCore::TextControlInnerTextElement::defaultEventHandler):
        (WebCore::SearchFieldResultsButtonElement::defaultEventHandler):
        (WebCore::SearchFieldCancelButtonElement::defaultEventHandler):
        * storage/LocalStorageArea.cpp:
        (WebCore::LocalStorageArea::dispatchStorageEvent):
        * storage/SessionStorageArea.cpp:
        (WebCore::SessionStorageArea::dispatchStorageEvent):
        * svg/SVGAElement.cpp:
        (WebCore::SVGAElement::defaultEventHandler):
        * svg/SVGDocument.cpp:
        (WebCore::SVGDocument::dispatchZoomEvent):
        (WebCore::SVGDocument::dispatchScrollEvent):
        * svg/SVGElement.cpp:
        (WebCore::SVGElement::parseMappedAttribute):
        (WebCore::hasLoadListener):
        (WebCore::SVGElement::sendSVGLoadEventIfPossible):
        * svg/SVGElementInstance.cpp:
        (WebCore::SVGElementInstance::on*): (multiple methods)
        (WebCore::SVGElementInstance::setOn*): (multiple methods)
        * svg/SVGImageLoader.cpp:
        (WebCore::SVGImageLoader::dispatchLoadEvent):
        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::parseMappedAttribute):
        * svg/SVGScriptElement.cpp:
        (WebCore::SVGScriptElement::dispatchErrorEvent):
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::dispatchReadyStateChangeEvent):
        (WebCore::XMLHttpRequest::dispatchAbortEvent):
        (WebCore::XMLHttpRequest::dispatchErrorEvent):
        (WebCore::XMLHttpRequest::dispatchLoadEvent):
        (WebCore::XMLHttpRequest::dispatchLoadStartEvent):
        (WebCore::XMLHttpRequest::dispatchProgressEvent):
        * xml/XMLHttpRequestUpload.cpp:
        (WebCore::XMLHttpRequestUpload::dispatchAbortEvent):
        (WebCore::XMLHttpRequestUpload::dispatchErrorEvent):
        (WebCore::XMLHttpRequestUpload::dispatchLoadEvent):
        (WebCore::XMLHttpRequestUpload::dispatchLoadStartEvent):
        (WebCore::XMLHttpRequestUpload::dispatchProgressEvent):
        * xml/XPathResult.cpp:
        (WebCore::XPathResult::XPathResult):
        (WebCore::XPathResult::~XPathResult):
        (WebCore::XPathResult::invalidateIteratorState):
        Access event names via eventNames() function.

2008-11-04  Cameron Zwarich  <zwarich@apple.com>

        Reviewed by Mark Rowe.

        Delete unused forwarding headers.

        * ForwardingHeaders/kjs/Activation.h: Removed.
        * ForwardingHeaders/kjs/Register.h: Removed.
        * ForwardingHeaders/kjs/RegisterID.h: Removed.

2008-11-04  Cameron Zwarich  <zwarich@apple.com>

        Not reviewed.

        Fix stupid typo in previous build fix.

        * bindings/js/JSStorageCustom.cpp:
        * bindings/scripts/CodeGeneratorJS.pm:
        * bridge/NP_jsobject.cpp:

2008-11-03  Cameron Zwarich  <zwarich@apple.com>

        Not reviewed.

        Fix the build for all non-Mac platforms.

        * ForwardingHeaders/kjs/PropertyNameArray.h: Removed.
        * ForwardingHeaders/runtime/PropertyNameArray.h: Copied from ForwardingHeaders/kjs/PropertyNameArray.h.
        * bindings/js/JSStorageCustom.cpp:
        * bindings/scripts/CodeGeneratorJS.pm:
        * bridge/NP_jsobject.cpp:

2008-11-03  Cameron Zwarich  <zwarich@apple.com>

        Not reviewed.

        Fix the wxWindows build.

        * bridge/c/c_instance.cpp:

2008-11-03  Cameron Zwarich  <zwarich@apple.com>

        Rubber-stamped by Maciej Stachowiak.

        Move more files into the runtime subdirectory of JavaScriptCore.

        * ForwardingHeaders/kjs/ArgList.h: Removed.
        * ForwardingHeaders/kjs/CollectorHeapIterator.h: Removed.
        * ForwardingHeaders/kjs/ExecState.h: Removed.
        * ForwardingHeaders/kjs/InitializeThreading.h: Removed.
        * ForwardingHeaders/kjs/JSGlobalData.h: Removed.
        * ForwardingHeaders/kjs/JSLock.h: Removed.
        * ForwardingHeaders/kjs/SymbolTable.h: Removed.
        * ForwardingHeaders/runtime/ArgList.h: Copied from ForwardingHeaders/kjs/ArgList.h.
        * ForwardingHeaders/runtime/CollectorHeapIterator.h: Copied from ForwardingHeaders/kjs/CollectorHeapIterator.h.
        * ForwardingHeaders/runtime/ExecState.h: Copied from ForwardingHeaders/kjs/ExecState.h.
        * ForwardingHeaders/runtime/InitializeThreading.h: Copied from ForwardingHeaders/kjs/InitializeThreading.h.
        * ForwardingHeaders/runtime/JSGlobalData.h: Copied from ForwardingHeaders/kjs/JSGlobalData.h.
        * ForwardingHeaders/runtime/JSLock.h: Copied from ForwardingHeaders/kjs/JSLock.h.
        * ForwardingHeaders/runtime/SymbolTable.h: Copied from ForwardingHeaders/kjs/SymbolTable.h.
        * bindings/js/GCController.cpp:
        * bindings/js/JSCustomPositionCallback.cpp:
        * bindings/js/JSCustomPositionErrorCallback.cpp:
        * bindings/js/JSCustomSQLStatementCallback.cpp:
        * bindings/js/JSCustomSQLStatementErrorCallback.cpp:
        * bindings/js/JSCustomSQLTransactionCallback.cpp:
        * bindings/js/JSCustomSQLTransactionErrorCallback.cpp:
        * bindings/js/JSCustomVoidCallback.cpp:
        * bindings/js/JSCustomXPathNSResolver.cpp:
        * bindings/js/JSDOMWindowBase.cpp:
        * bindings/js/JSEventCustom.cpp:
        * bindings/js/JSEventListener.cpp:
        * bindings/js/JSNodeFilterCondition.cpp:
        * bindings/js/ScheduledAction.cpp:
        * bindings/js/ScriptController.cpp:
        * bindings/js/ScriptControllerMac.mm:
        * bindings/objc/WebScriptObject.mm:
        * bridge/NP_jsobject.cpp:
        * bridge/c/c_class.cpp:
        * bridge/c/c_instance.cpp:
        * bridge/c/c_runtime.cpp:
        * bridge/c/c_utility.cpp:
        * bridge/jni/jni_class.cpp:
        * bridge/jni/jni_instance.cpp:
        * bridge/jni/jni_jsobject.mm:
        * bridge/jni/jni_objc.mm:
        * bridge/jni/jni_runtime.cpp:
        * bridge/jni/jni_runtime.h:
        * bridge/jni/jni_utility.cpp:
        * bridge/npruntime.cpp:
        * bridge/objc/objc_instance.mm:
        * bridge/objc/objc_runtime.mm:
        * bridge/objc/objc_utility.mm:
        * bridge/runtime.cpp:
        * dom/Document.cpp:
        * dom/Node.cpp:
        * dom/NodeFilter.cpp:
        * dom/NodeIterator.cpp:
        * dom/TreeWalker.cpp:
        * history/CachedPage.cpp:
        * inspector/InspectorController.cpp:
        * inspector/JavaScriptCallFrame.cpp:
        * inspector/JavaScriptCallFrame.h:
        * inspector/JavaScriptDebugServer.cpp:
        * inspector/JavaScriptProfileNode.cpp:
        * loader/FrameLoader.cpp:
        * loader/icon/IconDatabase.cpp:
        * page/Console.cpp:
        * page/Page.cpp:
        * page/mac/FrameMac.mm:
        * plugins/PluginView.cpp:
        * plugins/gtk/PluginViewGtk.cpp:
        * plugins/qt/PluginViewQt.cpp:
        * plugins/win/PluginViewWin.cpp:
        * storage/Database.cpp:
        * xml/XMLHttpRequest.cpp:

2008-11-03  Cameron Zwarich  <zwarich@apple.com>

        Reviewed by Sam Weinig.

        Remove the forwarding header for FunctionCallProfile, because it was
        renamed to ProfileNode in r33466.

        * ForwardingHeaders/kjs/FunctionCallProfile.h: Removed.

2008-11-03  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dave Hyatt

        https://bugs.webkit.org/show_bug.cgi?id=22026

        When computing the bounds of the transparency layer, we need to
        map the clipRect through the enclosing transform.

        Test: fast/layers/opacity-transforms.html

        * rendering/RenderLayer.cpp:
        (WebCore::transparencyClipBox):

2008-11-03  Kevin Decker  <kdecker@apple.com>

        Reviewed by Anders Carlsson.

        https://bugs.webkit.org/show_bug.cgi?id=22053

        Added additional support needed for the NPDrawingModelCoreAnimation drawing model.

        * bridge/npapi.h:

2008-11-03  Xan Lopez  <xan@gnome.org>

        Reviewed by Alp Toker.

        Update parseDataUrl() function in the libsoup http backend with
        the one from the curl backend which has recent correctness and crash
        fixes.

        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::parseDataUrl):

2008-11-03  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Alp Toker.

        https://bugs.webkit.org/show_bug.cgi?id=22041
        Fix CURL crashes on the test suite

        Fix segfault with setDefersLoading(). Do not call into curl when we
        don't have a CURL handle.

        It is attempted to defer the loading before the load has been
        started (no curl handle was allocated yet). If that happens then
        just remember that. ResourceHandleManager::startJob is already taking
        care of this and in initResourceHandle the the downloading will
        be paused if needed.

        Fixes fast/loader/simultaneous-reloads-assert.html

        * platform/network/curl/ResourceHandleCurl.cpp:
        (WebCore::ResourceHandle::setDefersLoading):

2008-11-03  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Alp Toker.

        https://bugs.webkit.org/show_bug.cgi?id=22041
        Fix CURL crashes on the test suite

        Do not send "no data" to WebCore in parseDataUrl().

        Fixes assert on fast/tokenizer/image-empty-crash.html

        * platform/network/curl/ResourceHandleManager.cpp:
        (WebCore::parseDataUrl):

2008-11-02  Xan Lopez  <xan@gnome.org>

        Reviewed by Holger Freyther.

        https://bugs.webkit.org/show_bug.cgi?id=22009
        HTML5 Video with GStreamer pulls gnome-vfs without using it

        * platform/graphics/gtk/MediaPlayerPrivateGStreamer.cpp:
        Remove gnome-vfs include.

2008-11-01  Adam Barth  <abarth@webkit.org>

        Reviewed by Sam Weinig.

        Be sure to check the final URLs of requested resources to make sure we
        don't get fooled by HTTP redirects.

        https://bugs.webkit.org/show_bug.cgi?id=21963

        Tests: http/tests/security/xss-DENIED-xsl-document-redirect.xml
               http/tests/security/xss-DENIED-xsl-external-entity-redirect.xml

        * dom/XMLTokenizerLibxml2.cpp:
        (WebCore::openFunc):
        * loader/DocLoader.cpp:
        (WebCore::DocLoader::canRequest):
        (WebCore::DocLoader::requestResource):
        * loader/DocLoader.h:
        * xml/XSLTProcessor.cpp:
        (WebCore::docLoaderFunc):

2008-11-01  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=22001
        AtomicStringImpl* keys of event listener maps can outlive their strings

        Test: fast/events/destroyed-atomic-string.html

        * dom/MessagePort.cpp:
        (WebCore::MessagePort::addEventListener):
        (WebCore::MessagePort::removeEventListener):
        (WebCore::MessagePort::dispatchEvent):
        * dom/MessagePort.h:
        * loader/appcache/DOMApplicationCache.cpp:
        (WebCore::DOMApplicationCache::addEventListener):
        (WebCore::DOMApplicationCache::removeEventListener):
        (WebCore::DOMApplicationCache::dispatchEvent):
        * loader/appcache/DOMApplicationCache.h:
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::addEventListener):
        (WebCore::XMLHttpRequest::removeEventListener):
        (WebCore::XMLHttpRequest::dispatchEvent):
        * xml/XMLHttpRequest.h:
        * xml/XMLHttpRequestUpload.cpp:
        (WebCore::XMLHttpRequestUpload::addEventListener):
        (WebCore::XMLHttpRequestUpload::removeEventListener):
        (WebCore::XMLHttpRequestUpload::dispatchEvent):
        * xml/XMLHttpRequestUpload.h:
        Changed EventListenersMap to use AtomicString as key (instead of AtomicStringImpl*).

2008-10-31  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=21998
        Use JSDOMGlobalObject in EventListener-related bindings

        * dom/MessagePort.idl: Auto-generate bindings for onclose and onmessage.

        * bindings/scripts/CodeGeneratorJS.pm: Use JSDOMGlobalObject instead of JSDOMWindow in JS
        bindings for inline event handlers.

        * bindings/js/JSDOMApplicationCacheCustom.cpp:
        (WebCore::JSDOMApplicationCache::addEventListener):
        (WebCore::JSDOMApplicationCache::removeEventListener):
        * bindings/js/JSEventTargetNodeCustom.cpp:
        (WebCore::JSEventTargetNode::addEventListener):
        (WebCore::JSEventTargetNode::removeEventListener):
        * bindings/js/JSMessagePortCustom.cpp:
        (WebCore::JSMessagePort::removeEventListener):
        * bindings/js/JSSVGElementInstanceCustom.cpp:
        (WebCore::JSSVGElementInstance::addEventListener):
        (WebCore::JSSVGElementInstance::removeEventListener):
        * bindings/js/JSXMLHttpRequestCustom.cpp:
        (WebCore::JSXMLHttpRequest::addEventListener):
        (WebCore::JSXMLHttpRequest::removeEventListener):
        * bindings/js/JSXMLHttpRequestUploadCustom.cpp:
        (WebCore::JSXMLHttpRequestUpload::addEventListener):
        (WebCore::JSXMLHttpRequestUpload::removeEventListener):
        Use ScriptExecutionContext and JSDOMGlobalObject in bindings.

        * dom/EventTarget.h:
        * dom/EventTargetNode.cpp:
        (WebCore::EventTargetNode::scriptExecutionContext):
        * dom/EventTargetNode.h:
        * dom/MessagePort.cpp:
        * dom/MessagePort.h:
        (WebCore::MessagePort::scriptExecutionContext):
        * loader/appcache/DOMApplicationCache.cpp:
        (WebCore::DOMApplicationCache::scriptExecutionContext):
        * loader/appcache/DOMApplicationCache.h:
        * svg/SVGElementInstance.cpp:
        (WebCore::SVGElementInstance::scriptExecutionContext):
        * svg/SVGElementInstance.h:
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::scriptExecutionContext):
        * xml/XMLHttpRequest.h:
        * xml/XMLHttpRequestUpload.cpp:
        (WebCore::XMLHttpRequestUpload::scriptExecutionContext):
        * xml/XMLHttpRequestUpload.h:
        Remove associatedFrame() method, and provide scriptExecutionContext() where it wasn't
        available yet.

2008-10-31  Cameron Zwarich  <zwarich@apple.com>

        Rubber-stamped by Geoff Garen.

        Rename SourceRange.h to SourceCode.h.

        * ForwardingHeaders/kjs/SourceCode.h: Copied from ForwardingHeaders/kjs/SourceRange.h.
        * ForwardingHeaders/kjs/SourceRange.h: Removed.
        * bindings/js/StringSourceProvider.h:
        * bridge/NP_jsobject.cpp:

2008-10-31  Cameron Zwarich  <zwarich@apple.com>

        Reviewed by Darin Adler.

        Bug 22019: Move JSC::Interpreter::shouldPrintExceptions() to WebCore::Console
        <https://bugs.webkit.org/show_bug.cgi?id=22019>

        * WebCore.base.exp:
        * page/Console.cpp:
        (WebCore::printToStandardOut):
        (WebCore::Console::shouldPrintExceptions):
        (WebCore::Console::setShouldPrintExceptions):
        * page/Console.h:

2008-10-31  Dan Bernstein  <mitz@apple.com>

        Reviewed by John Sullivan.

        - WebCore part of <rdar://problem/6334641> Add WebView SPI for disabling document.cookie

        * dom/Document.cpp:
        (WebCore::Document::cookie): Added checking if cookies are disabled.
        (WebCore::Document::setCookie): Ditto.
        * page/Navigator.cpp:
        (WebCore::Navigator::cookieEnabled): Ditto.
        * page/Page.cpp:
        (WebCore::Page::Page): Initialize m_cookieEnabled to true.
        * page/Page.h:
        (WebCore::Page::cookieEnabled): Added.
        (WebCore::Page::setCookieEnabled): Added.

2008-10-31  Adele Peterson  <adele@apple.com>

        Reviewed by Darin Adler.

        WebCore Windows part of fix for <rdar://problem/5839256> FILE CONTROL: multi-file upload.
        https://bugs.webkit.org/show_bug.cgi?id=22008

        * platform/FileChooser.cpp: (WebCore::FileChooser::chooseIcon):
        Rename newIconForFile and newIconForFiles to createIconForFile and createIconForFiles.
        * platform/graphics/Icon.h: ditto.
        * platform/graphics/gtk/IconGtk.cpp:
        (WebCore::Icon::createIconForFile): ditto.
        (WebCore::Icon::createIconForFiles): ditto.
        * platform/graphics/mac/IconMac.mm:
        (WebCore::Icon::createIconForFile): ditto.
        (WebCore::Icon::createIconForFiles): ditto.
        * platform/graphics/qt/IconQt.cpp:
        (WebCore::Icon::createIconForFile): ditto.
        (WebCore::Icon::createIconForFiles): ditto.
        * platform/wx/TemporaryLinkStubs.cpp:
        (Icon::createIconForFile): ditto.
        (Icon::createIconForFiles): ditto.
        * platform/graphics/win/IconWin.cpp:
        (WebCore::Icon::createIconForFile): ditto.
        (WebCore::Icon::createIconForFiles): Add creation of an icon for multiple files.

        * rendering/RenderThemeWin.cpp: (WebCore::RenderThemeWin::paintSearchFieldResultsDecoration):
        Improve icon creation code to match new code in Icon::createIconForFiles

2008-10-31  Timothy Hatcher  <timothy@apple.com>

        Add manual tests that check breakpoints on a blockless body of "for" loops.

        https://bugs.webkit.org/show_bug.cgi?id=22004

        Reviewed by Darin Adler.

        * manual-tests/inspector/debugger-pause-on-for-in-statements.html: Added.
        * manual-tests/inspector/debugger-pause-on-for-statements.html: Added.

2008-10-31  Darin Adler  <darin@apple.com>

        - fix build

        * platform/win/WCDataObject.cpp: Added missing include of "config.h".

2008-10-30  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=21970
        Make MessagePort event dispatch work in workers

        * bindings/js/JSDOMGlobalObject.cpp:
        (WebCore::JSDOMGlobalObject::JSDOMGlobalObjectData::JSDOMGlobalObjectData):
        (WebCore::JSDOMGlobalObject::~JSDOMGlobalObject):
        (WebCore::JSDOMGlobalObject::findJSEventListener):
        (WebCore::JSDOMGlobalObject::findOrCreateJSEventListener):
        (WebCore::JSDOMGlobalObject::findJSUnprotectedEventListener):
        (WebCore::JSDOMGlobalObject::findOrCreateJSUnprotectedEventListener):
        (WebCore::JSDOMGlobalObject::jsEventListeners):
        (WebCore::JSDOMGlobalObject::jsInlineEventListeners):
        (WebCore::JSDOMGlobalObject::jsUnprotectedEventListeners):
        (WebCore::JSDOMGlobalObject::jsUnprotectedInlineEventListeners):
        (WebCore::JSDOMGlobalObject::setCurrentEvent):
        (WebCore::JSDOMGlobalObject::currentEvent):
        (WebCore::toJSDOMGlobalObject):
        * bindings/js/JSDOMGlobalObject.h:
        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::JSDOMWindowBaseData::JSDOMWindowBaseData):
        (WebCore::JSDOMWindowBase::~JSDOMWindowBase):
        (WebCore::JSDOMWindowBase::clearHelperObjectProperties):
        * bindings/js/JSDOMWindowBase.h:
        Moved event listener tracking from JSDOMWindow to JSDOMGlobalObject.

        * bindings/js/JSEventListener.cpp:
        (WebCore::JSAbstractEventListener::handleEvent):
        (WebCore::JSUnprotectedEventListener::JSUnprotectedEventListener):
        (WebCore::JSUnprotectedEventListener::~JSUnprotectedEventListener):
        (WebCore::JSUnprotectedEventListener::globalObject):
        (WebCore::JSUnprotectedEventListener::clearGlobalObject):
        (WebCore::JSEventListener::JSEventListener):
        (WebCore::JSEventListener::~JSEventListener):
        (WebCore::JSEventListener::globalObject):
        (WebCore::JSEventListener::clearGlobalObject):
        (WebCore::JSLazyEventListener::JSLazyEventListener):
        (WebCore::JSLazyEventListener::parseCode):
        * bindings/js/JSEventListener.h:
        (WebCore::JSUnprotectedEventListener::create):
        (WebCore::JSEventListener::create):
        (WebCore::JSLazyEventListener::create):
        Changed to use JSDOMGlobalObject and ScriptExecutionContext.

        * bindings/js/JSMessagePortCustom.cpp:
        (WebCore::JSMessagePort::startConversation):
        (WebCore::JSMessagePort::addEventListener):
        (WebCore::JSMessagePort::removeEventListener):
        (WebCore::JSMessagePort::setOnmessage):
        (WebCore::JSMessagePort::setOnclose):
        Updated bindings to work with JSDOMGlobalObject. Next step is to make code generator emit
        such code, and stop using a custom implementation for JSMessagePort inline event handler
        getters and setters.

        * dom/Document.cpp:
        (WebCore::Document::virtualURL):
        * dom/Document.h:
        * dom/ScriptExecutionContext.h:
        Expose url() method on ScriptExecutionContext (necessary for compiling scripts in
        JSLazyEventListener).

2008-10-31  Cameron Zwarich  <zwarich@apple.com>

        Not reviewed.

        Speculative wxWindows build fix.

        * webcore-base.bkl:

2008-10-30  Mark Rowe  <mrowe@apple.com>

        Reviewed by Jon Homeycutt.

        Explicitly default to building for only the native architecture in debug and release builds.

        * Configurations/DebugRelease.xcconfig:

2008-10-30  Cameron Zwarich  <zwarich@apple.com>

        Rubber-stamped by Sam Weinig.

        Create a debugger directory in JavaScriptCore and move the relevant
        files to it.

        * ForwardingHeaders/debugger: Added.
        * ForwardingHeaders/debugger/Debugger.h: Copied from ForwardingHeaders/kjs/debugger.h.
        * ForwardingHeaders/debugger/DebuggerCallFrame.h: Copied from ForwardingHeaders/kjs/DebuggerCallFrame.h.
        * ForwardingHeaders/kjs/DebuggerCallFrame.h: Removed.
        * ForwardingHeaders/kjs/debugger.h: Removed.
        * WebCore.pro:
        * bindings/js/ScriptController.cpp:
        * inspector/JavaScriptCallFrame.cpp:
        * inspector/JavaScriptCallFrame.h:
        * inspector/JavaScriptDebugServer.cpp:
        * inspector/JavaScriptDebugServer.h:

2008-10-30  Tony Chang <tony@chromium.org>

        Fix 2 Windows theme bugs:
        1) Checkboxes marked readonly were rendered incorrectly
        2) If a button has focus and is pressed, it was rendered
           as focused rather than pressed.

        https://bugs.webkit.org/show_bug.cgi?id=21859

        Reviewed by Dave Hyatt.

        * rendering/RenderThemeWin.cpp:
        (WebCore::RenderThemeWin::determineState):
        (WebCore::RenderThemeWin::determineButtonState):

2008-10-30  Benjamin K. Stuhl  <bks24@cornell.edu>

        gcc 4.3.3/linux-x86 generates "suggest parentheses around && within ||"
        warnings; add some parentheses to disambiguate things. No functional
        changes, so no tests.

        https://bugs.webkit.org/show_bug.cgi?id=21973
        Add parentheses to clean up some gcc warnings

        Reviewed by Dan Bernstein.

        * platform/graphics/Font.h:
        (WebCore::Font::treatAsZeroWidthSpace):

2008-10-30  Aaron Boodman  <aa@chromium.org>

        Added an explicit dependency on HashMap.h. It was getting pulled in via
        <kjs/identifier.h> in the case of JSC, causing errors for the Chromium port.

        Reviewed by Darin Adler.

        * platform/text/PlatformString.h:

2008-10-30  Greg Bolsinga  <bolsinga@apple.com>

        Reviewed by Sam Weinig

        https://bugs.webkit.org/show_bug.cgi?id=21967

        For some platforms the GeolocationService must be suspended and resumed.

        * page/Geolocation.cpp:
        (WebCore::Geolocation::clearWatch): now uses Geolocation::hasListeners()
        (WebCore::Geolocation::suspend): calls GeolocationService::suspend() if there are listeners
        (WebCore::Geolocation::resume): calls GeolocationService::resume() if there are listeners
        (WebCore::Geolocation::geolocationServicePositionChanged): now uses Geolocation::hasListeners()
        * page/Geolocation.h:
        (WebCore::Geolocation::hasListeners): Indicates of the Geolocation has interested GeolocationService listeners
        * platform/GeolocationService.h:
        (WebCore::GeolocationService::suspend): empty implementation
        (WebCore::GeolocationService::resume): empty implementation

2008-10-30  Greg Bolsinga  <bolsinga@apple.com>

        Reviewed by Sam Weinig

        https://bugs.webkit.org/show_bug.cgi?id=21966

        The Geolocation spec was updated on 10/27/2008. This brings WebCore up to date.
        http://dev.w3.org/geo/api/spec-source.html

        * page/Geolocation.cpp:
        (WebCore::Geolocation::GeoNotifier::GeoNotifier): PositionOptions' timeout now unsigned
        * page/Geoposition.cpp: velocity is now called speed
        (WebCore::Geoposition::toString):
        * page/Geoposition.h: velocity is now called speed
        (WebCore::Geoposition::create):
        (WebCore::Geoposition::speed):
        (WebCore::Geoposition::Geoposition):
        * page/Geoposition.idl: velocity is now called speed
        * page/PositionOptions.h: timeout is now unsigned
        (WebCore::PositionOptions::create):
        (WebCore::PositionOptions::timeout):
        (WebCore::PositionOptions::setTimeout):
        (WebCore::PositionOptions::PositionOptions):
        * page/PositionOptions.idl: timeout is now unsigned long

2008-10-30  Justin Garcia  <justin.garcia@apple.com>

        Also handle preserved newlines.

        * editing/BreakBlockquoteCommand.cpp:
        (WebCore::BreakBlockquoteCommand::doApply):

2008-10-30  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by Beth Dakin.

        <rdar://problem/6104369> Hitting return at the end of a quoted line creates an extraneous quoted line

        * editing/BreakBlockquoteCommand.cpp:
        (WebCore::BreakBlockquoteCommand::doApply):
        Don't store the endingSelection() in selection, just call endingSelection() in the few places it's
        needed.  This function is cheap since it just returns a reference to a Selection instead of creating one.
        Don't store an affinity.  In the one place that it was used, isLastVisiblePositionInNode(VisiblePosition(pos, affinity), topBlockquote),
        we now use visiblePos (in order to avoid VisiblePosition creation).
        Set pos after we delete the current selection (if there is one), and be consistent about what we set
        pos to.  Before, we upstream()ed it if there was a selection to delete and left it alone otherwise.  In fact...
        ...we need to use downstream() for pos so that when a caret is at the boundary between two nodes, pos is
        in the first node that we want to move.  This fixes the bug, since it lets code that checks for the case
        where the caret is between text and a br work correctly.

2008-10-30  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Darin Adler.

        Fix the Qt build.

        https://bugs.webkit.org/show_bug.cgi?id=21969

        * inspector/front-end/WebKit.qrc:
        * platform/graphics/qt/ImageBufferQt.cpp:
        (WebCore::ImageBufferData::ImageBufferData):
        (WebCore::ImageBuffer::ImageBuffer):
        (WebCore::ImageBuffer::context):
        (WebCore::ImageBuffer::image):
        (WebCore::ImageBuffer::toDataURL):

2008-10-30  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by Darin Adler.

        More preparation for:
        <rdar://problem/6104369> Hitting return at the end of a quoted line creates an extraneous quoted line

        * editing/BreakBlockquoteCommand.cpp:
        (WebCore::BreakBlockquoteCommand::doApply): Added comments.  Don't need to use newStartNode.  If the
        startNode needs to change, change it.  Afterwords, check to make sure that it hasn't left topBlockquote.
        This is slightly stricter than before, where we just made sure that it still had a topBlockquote.  This
        doesn't really fix a bug, since we can't really get into a situation where we move to a different
        topBlockquote, but it simplifies the code.

2008-10-30  Dirk Schulze  <vbs85@gmx.de>

        Reviewed by Alp Toker.

        https://bugs.webkit.org/show_bug.cgi?id=21883
        [CAIRO] globalAlpha has to be stored and restored

        Cairo's globalAlpha has to be stored and reloaded on calling
        save() and restore(). We use the power of GraphicsContextState for this.

        * platform/graphics/GraphicsContextPrivate.h:
        (WebCore::GraphicsContextState::GraphicsContextState):
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::fillPath):
        (WebCore::GraphicsContext::strokePath):
        (WebCore::GraphicsContext::setAlpha):
        (WebCore::GraphicsContext::getAlpha):
        * platform/graphics/cairo/GraphicsContextPlatformPrivateCairo.h:
        (WebCore::GraphicsContextPlatformPrivate::GraphicsContextPlatformPrivate):

2008-10-29  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Maciej Stachowiak.

        Rename "attachedToEventTargetNode" to "isInline".

        Inline (onXXX) attributes are used not just with event target nodes, but also with Window,
        XMLHttpRequest, MessagePort et al.

        Also renamed createHTMLEventHandler() (which was a leftover from earlier isHTMLEvent ->
        attachedToEventTargetNode rename made for SVG) to createInlineEventListener().
        And also renamed EventTargetNode, Document and Window "eventListenerForType" methods to
        "inlineEventListenerForType", as they work with inline listeners.

        * bindings/js/JSDOMApplicationCacheCustom.cpp:
        (WebCore::JSDOMApplicationCache::addEventListener):
        (WebCore::JSDOMApplicationCache::removeEventListener):
        * bindings/js/JSMessagePortCustom.cpp:
        (WebCore::JSMessagePort::setOnmessage):
        (WebCore::JSMessagePort::setOnclose):
        * bindings/js/JSXMLHttpRequestCustom.cpp:
        (WebCore::JSXMLHttpRequest::addEventListener):
        (WebCore::JSXMLHttpRequest::removeEventListener):
        * bindings/js/JSXMLHttpRequestUploadCustom.cpp:
        (WebCore::JSXMLHttpRequestUpload::addEventListener):
        (WebCore::JSXMLHttpRequestUpload::removeEventListener):
        Pass a correct value for this argument - callers used to be confused, because they didn't
        consider themselves event target nodes. This doesn't affect behavior however, as the only
        difference between inline and non-inline event handlers is that the former treat
        "return false" as "event.preventDefault()", which is not important to any of these objects.

        * bindings/js/JSEventListener.cpp: (WebCore::JSLazyEventListener::parseCode):
        Assert that isInline is true instead of checking its value, as the constructor of this class
        always sets it to true.

        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::~JSDOMWindowBase):
        (WebCore::JSDOMWindowBase::findJSEventListener):
        (WebCore::JSDOMWindowBase::findOrCreateJSEventListener):
        (WebCore::JSDOMWindowBase::findJSUnprotectedEventListener):
        (WebCore::JSDOMWindowBase::findOrCreateJSUnprotectedEventListener):
        (WebCore::JSDOMWindowBase::jsInlineEventListeners):
        (WebCore::JSDOMWindowBase::jsUnprotectedInlineEventListeners):
        * bindings/js/JSDOMWindowBase.h:
        * bindings/js/JSEventListener.cpp:
        (WebCore::JSAbstractEventListener::handleEvent):
        (WebCore::JSAbstractEventListener::isInline):
        (WebCore::JSUnprotectedEventListener::JSUnprotectedEventListener):
        (WebCore::JSUnprotectedEventListener::~JSUnprotectedEventListener):
        (WebCore::JSEventListener::JSEventListener):
        (WebCore::JSEventListener::~JSEventListener):
        (WebCore::JSLazyEventListener::parseCode):
        * bindings/js/JSEventListener.h:
        (WebCore::JSAbstractEventListener::JSAbstractEventListener):
        (WebCore::JSUnprotectedEventListener::create):
        (WebCore::JSEventListener::create):
        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::createInlineEventHandler):
        * bindings/js/ScriptController.h:
        * dom/Document.cpp:
        (WebCore::Document::setWindowInlineEventListenerForType):
        (WebCore::Document::windowInlineEventListenerForType):
        (WebCore::Document::removeWindowInlineEventListenerForType):
        (WebCore::Document::createEventListener):
        (WebCore::Document::setWindowInlineEventListenerForTypeAndAttribute):
        * dom/Document.h:
        * dom/EventListener.h:
        (WebCore::EventListener::isInline):
        * dom/EventTargetNode.cpp:
        (WebCore::EventTargetNode::removeInlineEventListenerForType):
        (WebCore::EventTargetNode::setInlineEventListenerForType):
        (WebCore::EventTargetNode::setInlineEventListenerForTypeAndAttribute):
        (WebCore::EventTargetNode::inlineEventListenerForType):
        (WebCore::EventTargetNode::on*): (many methods)
        (WebCore::EventTargetNode::setOn*): (many methods)
        * dom/EventTargetNode.h:
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplacementFragment::ReplacementFragment):
        * html/HTMLBodyElement.cpp:
        (WebCore::HTMLBodyElement::parseMappedAttribute):
        * html/HTMLButtonElement.cpp:
        (WebCore::HTMLButtonElement::parseMappedAttribute):
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::parseMappedAttribute):
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::parseMappedAttribute):
        * html/HTMLFrameElementBase.cpp:
        (WebCore::HTMLFrameElementBase::parseMappedAttribute):
        * html/HTMLFrameSetElement.cpp:
        (WebCore::HTMLFrameSetElement::parseMappedAttribute):
        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::parseMappedAttribute):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::parseMappedAttribute):
        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::parseMappedAttribute):
        * html/HTMLScriptElement.cpp:
        (WebCore::HTMLScriptElement::parseMappedAttribute):
        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::parseMappedAttribute):
        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::parseMappedAttribute):
        * page/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::mouseButtonListener):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::setInlineEventListenerForType):
        (WebCore::DOMWindow::inlineEventListenerForType):
        (WebCore::DOMWindow::on*): (many methods)
        (WebCore::DOMWindow::setOn*): (many methods)
        * page/DOMWindow.h:
        * svg/SVGElement.cpp:
        (WebCore::SVGElement::parseMappedAttribute):
        * svg/SVGElementInstance.cpp:
        (WebCore::SVGElementInstance::on*): (many methods)
        (WebCore::SVGElementInstance::setOn*): (many methods)
        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::parseMappedAttribute):
        Rename things, as described above.

2008-10-29  Gustavo Noronha Silva  <gns@gnome.org>

        Reviewed and slightly changed by Holger Freyther.

        Added all the files that need to be installed for the Inspector to
        work.

        * GNUmakefile.am: Invoke the shell to get the files.

2008-10-29  Andrew Scherkus  <scherkus@chromium.org>

        Reviewed by Darin Adler

        Add MediaPlayerPrivateChromium to MediaPlayer
        https://bugs.webkit.org/show_bug.cgi?id=21930

        * platform/graphics/MediaPlayer.cpp:

2008-10-29  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by Darin Adler.

        Some preparation for:
        <rdar://problem/6104369> Hitting return at the end of a quoted line creates an extraneous quoted line

        Added an early return to avoid a level of if-nesting.  No other changes.  We probably don't
        need to rebalance whitespace before the early return but for now don't risk any change in behavior
        I'll revisit that later.

        * editing/BreakBlockquoteCommand.cpp:
        (WebCore::BreakBlockquoteCommand::doApply):

2008-10-29  Kevin Ollivier  <kevino@theolliviers.com>

        wx build fixes after addition of runtime and ImageBuffer changes.

        * platform/graphics/wx/ImageBufferData.h: Added.
        * platform/graphics/wx/ImageBufferWx.cpp:
        (WebCore::ImageBufferData::ImageBufferData):
        (WebCore::ImageBuffer::ImageBuffer):
        (WebCore::ImageBuffer::context):
        * webcore-base.bkl:

2008-10-29  Brett Wilson  <brettw@chromium.org>

        Reviewed by Darin Adler
        https://bugs.webkit.org/attachment.cgi?id=24745

        Allow Skia implementations to get text style changed notifications.

        * platform/graphics/GraphicsContext.cpp:

2008-10-29  Timothy Hatcher  <timothy@apple.com>

        Add a manual test that checks breakpoints on a blockless body of
        an "else" statement.

        https://bugs.webkit.org/show_bug.cgi?id=21944

        Reviewed by Maciej Stachowiak.

        * manual-tests/inspector/debugger-pause-on-else-statements.html: Added.

2008-10-29  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=21921
        MessagePort messages are dispatched to documents that are not fully active

        Covered by corrected fast/events/message-port-inactive-document.html

        * bindings/js/JSEventListener.cpp:
        (WebCore::JSAbstractEventListener::handleEvent): Don't dispatch messages to contexts
        that are not fully active.

2008-10-29  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=21922
        Expose MessagePort global constructor

        Covered by existing dumper tests.

        * dom/MessagePort.idl:
        * page/DOMWindow.idl:

2008-10-29  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=21924
        HashTable internal index is not always deleted

        * bindings/js/JSDOMBinding.cpp: (WebCore::DOMObjectHashTableMap::~DOMObjectHashTableMap):
        Call deleteTable for HashTables that are being deleted.

2008-10-28  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=21923
        Create an abstraction for script execution context

        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        Added ScriptExecutionContext.{h,cpp}.

        * bindings/js/JSAudioConstructor.cpp:
        (WebCore::JSAudioConstructor::JSAudioConstructor):
        * bindings/js/JSAudioConstructor.h:
        * bindings/js/JSImageConstructor.cpp:
        (WebCore::JSImageConstructor::JSImageConstructor):
        * bindings/js/JSImageConstructor.h:
        * bindings/js/JSOptionConstructor.cpp:
        (WebCore::JSOptionConstructor::JSOptionConstructor):
        * bindings/js/JSOptionConstructor.h:
        * bindings/js/JSXMLHttpRequestConstructor.cpp:
        (WebCore::JSXMLHttpRequestConstructor::JSXMLHttpRequestConstructor):
        * bindings/js/JSXMLHttpRequestConstructor.h:
        Pass ScriptExecutionContext instead of Document to make getDOMConstructor() happy.
        Since these objects can only work within documents now, it is immediately converted back
        to Document.

        * bindings/js/JSMessageChannelConstructor.cpp:
        (WebCore::JSMessageChannelConstructor::JSMessageChannelConstructor):
        (WebCore::JSMessageChannelConstructor::construct):
        * bindings/js/JSMessageChannelConstructor.h:
        (WebCore::JSMessageChannelConstructor::scriptExecutionContext):
        MessageChannel needs to be supported in workers right away, so the constructor operates with
        it directly.

        * dom/ActiveDOMObject.cpp:
        (WebCore::ActiveDOMObject::ActiveDOMObject):
        (WebCore::ActiveDOMObject::~ActiveDOMObject):
        (WebCore::ActiveDOMObject::contextDestroyed):
        * dom/ActiveDOMObject.h:
        (WebCore::ActiveDOMObject::scriptExecutionContext):
        * bindings/js/JSDOMBinding.cpp:
        (WebCore::markActiveObjectsForContext):
        (WebCore::markCrossHeapDependentObjectsForContext):
        Use ScriptExecutionContext instead of Document, now that ActiveDOMObject and MessagePort
        tracking is handled by ScriptExecutionContext.

        * bindings/js/JSDOMBinding.h: (WebCore::getDOMPrototype): Moved to JSDOMGlobalObject.

        * bindings/js/JSDOMGlobalObject.h:
        (WebCore::getDOMConstructor): Moved to this file, as constructors live in JSDOMGlobalObject.
        Also, the two-argument version that used to be in JSDOMWindowBase.cpp need to be accessible
        to worker context implementation.
        (WebCore::scriptExecutionContext): Added a pure virtual method to access
        ScriptExecutionContext, implemented by subclasses.

        * bindings/js/JSDOMWindowBase.h:
        * bindings/js/JSDOMWindowBase.cpp: (WebCore::JSDOMWindowBase::scriptExecutionContext):
        Implement by returning the associated document. Note that this method currently gives bogus
        results after navigation - DOMWindow Frame reference is not zeroed out, so we get a document
        that is currently in the frame, not the one associated with this window.

        * bindings/js/JSDedicatedWorkerConstructor.cpp: Removed unnecessary include of DOMWindow.h.

        * bindings/js/JSDocumentCustom.cpp: (WebCore::JSDocument::mark):
        Call markActiveObjectsForContext() by its new name.

        * dom/DedicatedWorker.cpp:
        (WebCore::DedicatedWorker::DedicatedWorker):
        (WebCore::DedicatedWorker::document):
        * dom/DedicatedWorker.h:
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::document):
        * xml/XMLHttpRequest.h:
        Added a document() function that upcasts ScriptExecutionContext, as these objects only work
        within documents currently (at least for XMLHttpRequest, this will change soon though).

        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::Document::~Document):
        Moved active object and MessagePort tracking up to ScriptExecutionContext, to share code
        with workers.

        * dom/Document.h:
        (WebCore::Document::isDocument):
        (WebCore::Document::refScriptExecutionContext):
        (WebCore::Document::derefScriptExecutionContext):
        Inherit from ScriptExecutionContext.

        * dom/MessageChannel.cpp:
        (WebCore::MessageChannel::MessageChannel):
        * dom/MessageChannel.h:
        (WebCore::MessageChannel::create):
        Use ScriptExecutionContext instead of Document.

        * dom/MessagePort.cpp:
        (WebCore::CloseMessagePortTimer::CloseMessagePortTimer): Make m_port a RefPtr, because
        MessagePort doesn't ref() itself when posting this event any more (this is a fix for an
        unrelated issue that was causing random crashes in layout tests).
        (WebCore::MessagePort::MessagePort):
        (WebCore::MessagePort::~MessagePort):
        (WebCore::MessagePort::associatedFrame):
        (WebCore::MessagePort::clone):
        (WebCore::MessagePort::postMessage):
        (WebCore::MessagePort::startConversation):
        (WebCore::MessagePort::start):
        (WebCore::MessagePort::contextDestroyed):
        (WebCore::MessagePort::dispatchMessages):
        * dom/MessagePort.h:
        (WebCore::MessagePort::create):
        (WebCore::MessagePort::scriptExecutionContext):
        Use ScriptExecutionContext instead of Document. This is a step toward making MessagePort
        work in worker contexts - we need to also make some its method thread safe for cross-thread
        messaging, and make event dispatching thread safe.

        * dom/ScriptExecutionContext.cpp: Added.
        * dom/ScriptExecutionContext.h: Added.
        ActiveDOMObject and MessagePort tracking is moved from Document.
        It is debatable whether ScriptExecutionContext should be a parent of Document or DOMWindow,
        but as I'm just moving Document code, and it is Document that is the main context object
        in our implementation currently.
        Changing ScriptExecutionContext to be a parent of DOMWindow causes a number of bugs that
        seem non-trivial to fix, and isn't really a part of this task.

2008-10-28  Alp Toker  <alp@nuanti.com>

        List newly-added ImageBufferData.h in build system.

        * GNUmakefile.am:

2008-10-28  Alp Toker  <alp@nuanti.com>

        Reviewed by Cameron Zwarich.

        De-list unused WebCore ForwardingHeaders to fix the dist target.

        * GNUmakefile.am:

2008-10-28  Cameron Zwarich  <zwarich@apple.com>

        Not reviewed.

        Attempt to fix the Windows build by generating Forwardingheaders for the
        runtime directory in JavaScriptCore.

        * WebCore.vcproj/WebCore.vcproj:

2008-10-28  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/5188560> REGRESSION: Spell checker doesn't clear spelling/grammar marker after error is marked as Ignored

        * editing/Editor.cpp:
        (WebCore::Editor::ignoreSpelling): Remove misspelling markers from the word.
        (WebCore::Editor::learnSpelling): Added a FIXME about <rdar://problem/5396072>, which
        will probably require a change more complicated than just marking the learned word as
        misspelled.  I'll address it with a separate patch.
        * editing/EditorCommand.cpp:
        (WebCore::executeIgnoreSpelling): Added.
        (WebCore::CommandEntry::): Added an entry for IgnoreSpelling.

2008-10-28  Cameron Zwarich  <zwarich@apple.com>

        Reviewed by Mark Rowe.

        Move ForwardingHeaders to their correct location after the creation of
        the runtime directory in JavaScriptCore.

        * ForwardingHeaders/kjs/ArrayPrototype.h: Removed.
        * ForwardingHeaders/kjs/BooleanObject.h: Removed.
        * ForwardingHeaders/kjs/CallData.h: Removed.
        * ForwardingHeaders/kjs/ConstructData.h: Removed.
        * ForwardingHeaders/kjs/DateInstance.h: Removed.
        * ForwardingHeaders/kjs/Error.h: Removed.
        * ForwardingHeaders/kjs/FunctionConstructor.h: Removed.
        * ForwardingHeaders/kjs/FunctionPrototype.h: Removed.
        * ForwardingHeaders/kjs/InternalFunction.h: Removed.
        * ForwardingHeaders/kjs/JSArray.h: Removed.
        * ForwardingHeaders/kjs/JSFunction.h: Removed.
        * ForwardingHeaders/kjs/JSGlobalObject.h: Removed.
        * ForwardingHeaders/kjs/JSNumberCell.h: Removed.
        * ForwardingHeaders/kjs/JSObject.h: Removed.
        * ForwardingHeaders/kjs/JSString.h: Removed.
        * ForwardingHeaders/kjs/JSValue.h: Removed.
        * ForwardingHeaders/kjs/ObjectPrototype.h: Removed.
        * ForwardingHeaders/kjs/PropertyMap.h: Removed.
        * ForwardingHeaders/kjs/PrototypeFunction.h: Removed.
        * ForwardingHeaders/kjs/StringObject.h: Removed.
        * ForwardingHeaders/kjs/StringObjectThatMasqueradesAsUndefined.h: Removed.
        * ForwardingHeaders/kjs/StringPrototype.h: Removed.
        * ForwardingHeaders/kjs/StructureID.h: Removed.
        * ForwardingHeaders/runtime: Added.
        * ForwardingHeaders/runtime/ArrayPrototype.h: Copied from ForwardingHeaders/kjs/ArrayPrototype.h.
        * ForwardingHeaders/runtime/BooleanObject.h: Copied from ForwardingHeaders/kjs/BooleanObject.h.
        * ForwardingHeaders/runtime/CallData.h: Copied from ForwardingHeaders/kjs/CallData.h.
        * ForwardingHeaders/runtime/ConstructData.h: Copied from ForwardingHeaders/kjs/ConstructData.h.
        * ForwardingHeaders/runtime/DateInstance.h: Copied from ForwardingHeaders/kjs/DateInstance.h.
        * ForwardingHeaders/runtime/Error.h: Copied from ForwardingHeaders/kjs/Error.h.
        * ForwardingHeaders/runtime/FunctionConstructor.h: Copied from ForwardingHeaders/kjs/FunctionConstructor.h.
        * ForwardingHeaders/runtime/FunctionPrototype.h: Copied from ForwardingHeaders/kjs/FunctionPrototype.h.
        * ForwardingHeaders/runtime/InternalFunction.h: Copied from ForwardingHeaders/kjs/InternalFunction.h.
        * ForwardingHeaders/runtime/JSArray.h: Copied from ForwardingHeaders/kjs/JSArray.h.
        * ForwardingHeaders/runtime/JSFunction.h: Copied from ForwardingHeaders/kjs/JSFunction.h.
        * ForwardingHeaders/runtime/JSGlobalObject.h: Copied from ForwardingHeaders/kjs/JSGlobalObject.h.
        * ForwardingHeaders/runtime/JSNumberCell.h: Copied from ForwardingHeaders/kjs/JSNumberCell.h.
        * ForwardingHeaders/runtime/JSObject.h: Copied from ForwardingHeaders/kjs/JSObject.h.
        * ForwardingHeaders/runtime/JSString.h: Copied from ForwardingHeaders/kjs/JSString.h.
        * ForwardingHeaders/runtime/JSValue.h: Copied from ForwardingHeaders/kjs/JSValue.h.
        * ForwardingHeaders/runtime/ObjectPrototype.h: Copied from ForwardingHeaders/kjs/ObjectPrototype.h.
        * ForwardingHeaders/runtime/PropertyMap.h: Copied from ForwardingHeaders/kjs/PropertyMap.h.
        * ForwardingHeaders/runtime/PrototypeFunction.h: Copied from ForwardingHeaders/kjs/PrototypeFunction.h.
        * ForwardingHeaders/runtime/StringObject.h: Copied from ForwardingHeaders/kjs/StringObject.h.
        * ForwardingHeaders/runtime/StringObjectThatMasqueradesAsUndefined.h: Copied from ForwardingHeaders/kjs/StringObjectThatMasqueradesAsUndefined.h.
        * ForwardingHeaders/runtime/StringPrototype.h: Copied from ForwardingHeaders/kjs/StringPrototype.h.
        * ForwardingHeaders/runtime/StructureID.h: Copied from ForwardingHeaders/kjs/StructureID.h.
        * bindings/js/JSCSSStyleDeclarationCustom.cpp:
        * bindings/js/JSCanvasRenderingContext2DCustom.cpp:
        * bindings/js/JSClipboardCustom.cpp:
        * bindings/js/JSConsoleCustom.cpp:
        * bindings/js/JSCustomPositionCallback.h:
        * bindings/js/JSCustomPositionErrorCallback.h:
        * bindings/js/JSCustomSQLStatementCallback.h:
        * bindings/js/JSCustomSQLStatementErrorCallback.h:
        * bindings/js/JSCustomSQLTransactionErrorCallback.h:
        * bindings/js/JSCustomVoidCallback.h:
        * bindings/js/JSCustomXPathNSResolver.h:
        * bindings/js/JSDOMBinding.cpp:
        * bindings/js/JSDOMBinding.h:
        * bindings/js/JSDOMGlobalObject.h:
        * bindings/js/JSDOMWindowBase.cpp:
        * bindings/js/JSDOMWindowCustom.cpp:
        * bindings/js/JSDOMWindowShell.cpp:
        * bindings/js/JSDatabaseCustom.cpp:
        * bindings/js/JSEventListener.cpp:
        * bindings/js/JSEventTarget.h:
        * bindings/js/JSHTMLDocumentCustom.cpp:
        * bindings/js/JSHistoryCustom.cpp:
        * bindings/js/JSInspectedObjectWrapper.cpp:
        * bindings/js/JSJavaScriptCallFrameCustom.cpp:
        * bindings/js/JSLocationCustom.cpp:
        * bindings/js/JSNodeFilterCondition.h:
        * bindings/js/JSQuarantinedObjectWrapper.cpp:
        * bindings/js/JSQuarantinedObjectWrapper.h:
        * bindings/js/JSXMLHttpRequestCustom.cpp:
        * bindings/js/JSXMLHttpRequestUploadCustom.cpp:
        * bindings/objc/WebScriptObject.mm:
        * bindings/objc/WebScriptObjectPrivate.h:
        * bindings/scripts/CodeGeneratorJS.pm:
        * bridge/NP_jsobject.cpp:
        * bridge/c/c_instance.cpp:
        * bridge/c/c_utility.cpp:
        * bridge/c/c_utility.h:
        * bridge/jni/jni_instance.cpp:
        * bridge/jni/jni_jsobject.h:
        * bridge/jni/jni_jsobject.mm:
        * bridge/jni/jni_runtime.cpp:
        * bridge/jni/jni_utility.cpp:
        * bridge/jni/jni_utility.h:
        * bridge/objc/objc_instance.mm:
        * bridge/objc/objc_runtime.h:
        * bridge/objc/objc_runtime.mm:
        * bridge/objc/objc_utility.h:
        * bridge/objc/objc_utility.mm:
        * bridge/runtime.h:
        * bridge/runtime_array.cpp:
        * bridge/runtime_array.h:
        * bridge/runtime_method.cpp:
        * bridge/runtime_method.h:
        * bridge/runtime_object.cpp:
        * bridge/runtime_object.h:
        * bridge/runtime_root.cpp:
        * inspector/JavaScriptCallFrame.cpp:
        * inspector/JavaScriptProfile.cpp:
        * inspector/JavaScriptProfile.h:
        * inspector/JavaScriptProfileNode.cpp:
        * inspector/JavaScriptProfileNode.h:
        * loader/FrameLoader.cpp:
        * page/Console.cpp:
        * plugins/PluginView.cpp:
        * plugins/gtk/PluginViewGtk.cpp:
        * plugins/qt/PluginViewQt.cpp:
        * plugins/win/PluginViewWin.cpp:

2008-10-28  Adele Peterson  <adele@apple.com>

        Windows build fix.  This removes Cairo include directories from non-Cairbo build configurations.

        * WebCore.vcproj/WebCore.vcproj:

2008-10-28  Adele Peterson  <adele@apple.com>

        Windows build fix.

        * platform/graphics/ImageBuffer.h:
        (WebCore::ImageBuffer::create):

2008-10-28  Cameron Zwarich  <zwarich@apple.com>

        Not reviewed.

        Roll out a mistaken attempt at fixing the GTK build in r37947.

        * GNUmakefile.am:

2008-10-28  Adele Peterson  <adele@apple.com>

        Reviewed by John Sullivan.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=21880
        "files" string for multifile uploads needs to be localized

        * page/mac/WebCoreViewFactory.h:
        * platform/LocalizedStrings.h:
        * platform/gtk/FileChooserGtk.cpp: (WebCore::FileChooser::basenameForWidth):
        * platform/gtk/LocalizedStringsGtk.cpp: (WebCore::multipleFileUploadText):
        * platform/mac/FileChooserMac.mm: (WebCore::FileChooser::basenameForWidth):
        * platform/mac/LocalizedStringsMac.mm: (WebCore::multipleFileUploadText):
        * platform/qt/Localizations.cpp: (WebCore::multipleFileUploadText):
        * platform/wx/LocalizedStringsWx.cpp: (WebCore::multipleFileUploadText):

2008-10-28  Brett Wilson  <brettw@chromium.org>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=21816

        Remove platform ifdefs in ImageBuffer.h by moving platform specific code
        into a new PlatformImageBuffer class. Move the static create function
        into the header because it can be cross-platform. Initialization now
        happens in the cunstructor which sets a flag that create uses to know
        whether it should return null or not. I also made passing of IntSize
        more consistent (always by reference).

        This change also changes the ifdefs in GraphicsContext to allow Skia
        ports to implement text drawing modes.

        * platform/graphics/ImageBuffer.h:
        (WebCore::ImageBuffer::create):
        (WebCore::ImageBuffer::size):
        * platform/graphics/cairo/ImageBufferCairo.cpp:
        (WebCore::ImageBufferData::ImageBufferData):
        (WebCore::ImageBuffer::ImageBuffer):
        (WebCore::ImageBuffer::~ImageBuffer):
        (WebCore::ImageBuffer::image):
        (WebCore::ImageBuffer::getImageData):
        (WebCore::ImageBuffer::putImageData):
        * platform/graphics/cairo/ImageBufferData.h:
        * platform/graphics/cg/ImageBufferCG.cpp:
        (WebCore::ImageBufferData::ImageBufferData):
        (WebCore::ImageBuffer::ImageBuffer):
        (WebCore::ImageBuffer::~ImageBuffer):
        (WebCore::ImageBuffer::getImageData):
        (WebCore::ImageBuffer::putImageData):
        * platform/graphics/cg/ImageBufferData.h:
        * platform/graphics/qt/ImageBufferData.h:
        * platform/graphics/qt/ImageBufferQt.cpp:
        (WebCore::ImageBufferData::ImageBufferData):
        (WebCore::ImageBuffer::ImageBuffer):
        (WebCore::ImageBuffer::~ImageBuffer):

2008-10-28  Cameron Zwarich  <zwarich@apple.com>

        Not reviewed.

        Fix the GTK build.

        * GNUmakefile.am:

2008-10-28  Cameron Zwarich  <zwarich@apple.com>

        Not reviewed.

        Another Qt build fix.

        * WebCore.pro:

2008-10-28  Greg Bolsinga  <bolsinga@apple.com>

        Reviewed by David Kilzer.

        https://bugs.webkit.org/show_bug.cgi?id=21932
        Add non-pointer constant lookups to SoftLinking.h

        * platform/mac/SoftLinking.h:

2008-10-28  Greg Bolsinga  <bolsinga@apple.com>

        Reviewed by David Kilzer.

        https://bugs.webkit.org/show_bug.cgi?id=2192
        Missing semi-colons in Geoposition.idl

        * page/Geoposition.idl: Add missing semi-colons

2008-10-28  Timothy Hatcher  <timothy@apple.com>

        Make the Profiles panel in the Web Inspector have an enable screen.
        Profiling now needs to be enabled before console.profile() works.

        <rdar://problem/6211578> Make the JavaScript profiler opt-in, so it does
        not slow down JavaScript all the time

        Reviewed by Darin Adler and Kevin McCullough.

        * English.lproj/localizedStrings.js: New strings.
        * WebCore.base.exp: New and changed exports.
        * WebCore.vcproj/WebCore.vcproj: Add the PanelEnablerView.js file.
        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::supportsProfiling): Call InspectorController:profilerEnabled.
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController): Initialize the m_startProfiling
        Timer to call InspectorController::startUserInitiatedProfiling.
        (WebCore::InspectorController::startUserInitiatedProfilingSoon): Start a one-shot timer
        that calls InspectorController::startUserInitiatedProfiling.
        (WebCore::InspectorController::startUserInitiatedProfiling): Recompile all JavaScript
        and enable the profiler if the profiler was not enabled.
        (WebCore::InspectorController::stopUserInitiatedProfiling): Rearrange code for readability.
        (WebCore::InspectorController::enableProfiler): Recompile all the JavaScript functions
        if the skipRecompile argument is false. Call the profilerWasEnabled script function.
        (WebCore::InspectorController::disableProfiler): Recompile all the JavaScript functions.
        Call the profilerWasEnabled script function.
        (WebCore::InspectorController::disableDebugger): Set m_attachDebuggerWhenShown to false,
        so it won't be started later.
        * inspector/InspectorController.h:
        (WebCore::InspectorController::profilerEnabled): Return enabled() && m_profilerEnabled.
        * inspector/front-end/Images/debuggingButtons.png: Remove.
        * inspector/front-end/Images/enableButtons.png: Added.
        * inspector/front-end/Images/profilesSilhouette.png: Added.
        * inspector/front-end/Images/scriptsSilhouette.png: Added.
        * inspector/front-end/PanelEnablerView.js: Added.
        (WebInspector.PanelEnablerView):
        (WebInspector.PanelEnablerView.prototype._enableButtonCicked): Fire the "enable clicked"
        event so listeners can do their thing.
        (WebInspector.PanelEnablerView.prototype._windowResized): Test if the icon should be hidden.
        * inspector/front-end/ProfilesPanel.js:
        (WebInspector.ProfilesPanel): Create the PanelEnablerView and the strings needed for it.
        (WebInspector.ProfilesPanel.prototype.get statusBarItems): Include the enableToggleButton.
        (WebInspector.ProfilesPanel.prototype.profilerWasEnabled): Call reset and populateInterface.
        (WebInspector.ProfilesPanel.prototype.profilerWasDisabled): Call reset.
        (WebInspector.ProfilesPanel.prototype.reset): Call _updateInterface.
        (WebInspector.ProfilesPanel.prototype.setRecordingProfile): Moved in the code, no changes.
        (WebInspector.ProfilesPanel.prototype._updateInterface): Update the toggle button and
        show/hide other buttons. Also show/hide the PanelEnablerView.
        (WebInspector.ProfilesPanel.prototype._enableProfiling): Call _toggleProfiling if not enabled.
        (WebInspector.ProfilesPanel.prototype._toggleProfiling): Call InspectorController's
        disableProfiler or enableProfiler.
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel): Replace the overlay element with a PanelEnablerView. Replace the
        debuggingButton with the enableToggleButton.
        (WebInspector.ScriptsPanel.prototype.get statusBarItems): Replace the debuggingButton with
        the enableToggleButton.
        (WebInspector.ScriptsPanel.prototype._updateDebuggerButtons): Hide/show the pauseOnExceptionButton
        when needed. Replace the overlay element with a PanelEnablerView. Replace the debuggingButton
        with the enableToggleButton.
        (WebInspector.ScriptsPanel.prototype._enableDebugging): Call _toggleDebugging when not enabled.
        (WebInspector.ScriptsPanel.prototype._toggleDebugging): Remove the call to _clearInterface,
        since reset is called from debuggerWasEnabled and debuggerWasDisabled.
        * inspector/front-end/View.js: Inherit from WebInspector.Object.
        * inspector/front-end/WebKit.qrc: Add the PanelEnablerView.js file.
        * inspector/front-end/inspector.css: New styles for the PanelEnablerView.
        * inspector/front-end/inspector.html: Add the PanelEnablerView.js file.
        * inspector/front-end/inspector.js:
        (WebInspector.profilerWasEnabled): Added. Calls the ProfilesPanel.
        (WebInspector.profilerWasDisabled): Ditto.
        * page/Console.cpp:
        (WebCore::Console::error): Remove null check for m_frame, since m_frame isn't used.
        (WebCore::Console::info): Ditto.
        (WebCore::Console::log): Ditto.
        (WebCore::Console::assertCondition): Ditto.
        (WebCore::Console::dirxml): Remove null check for m_frame and use this->page().
        (WebCore::Console::count): Ditto.
        (WebCore::Console::profile): Return early if InspectorController::profilerEnabled is false.
        (WebCore::Console::profileEnd): Ditto.
        (WebCore::Console::warn): Remove null check for m_frame, since m_frame isn't used.
        * page/Settings.cpp:
        (WebCore::Settings::Settings): Remove initialization of m_didInitializeDeveloperExtrasEnabled.
        (WebCore::Settings::setDeveloperExtrasEnabled): Remove code that recompiled functions.
        Now just sets the member boolean.
        * page/Settings.h: Remove m_didInitializeDeveloperExtrasEnabled.

2008-10-28  Timothy Hatcher  <timothy@apple.com>

        Rename a few methods related to attaching and detaching the debugger. Also
        adds stub methods for enabling and disabling the profiler.

        * Rename attachDebugger to enableDebugger.
        * Rename detachDebugger to disableDebugger.
        * Rename the debuggerAttached getter to debuggerEnabled.
        * Rename the debuggerAttached callback to debuggerWasEnabled.
        * Rename the debuggerDetached callback to debuggerWasDisabled.

        Reviewed by Darin Adler.

        * WebCore.base.exp:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        (WebCore::InspectorController::setWindowVisible):
        (WebCore::InspectorController::windowScriptObjectAvailable):
        (WebCore::InspectorController::close):
        (WebCore::InspectorController::enableProfiler):
        (WebCore::InspectorController::disableProfiler):
        (WebCore::InspectorController::enableDebugger):
        (WebCore::InspectorController::disableDebugger):
        (WebCore::InspectorController::pauseInDebugger):
        (WebCore::InspectorController::resumeDebugger):
        (WebCore::InspectorController::stepOverStatementInDebugger):
        (WebCore::InspectorController::stepIntoStatementInDebugger):
        (WebCore::InspectorController::stepOutOfFunctionInDebugger):
        * inspector/InspectorController.h:
        (WebCore::InspectorController::profilerEnabled):
        (WebCore::InspectorController::debuggerEnabled):
        * inspector/front-end/BreakpointsSidebarPane.js:
        (WebInspector.BreakpointsSidebarPane.prototype.addBreakpoint):
        (WebInspector.BreakpointsSidebarPane.prototype.removeBreakpoint):
        (WebInspector.BreakpointsSidebarPane.prototype._breakpointEnableChanged):
        * inspector/front-end/Object.js:
        * inspector/front-end/ProfilesPanel.js:
        (WebInspector.ProfilesPanel):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel):
        (WebInspector.ScriptsPanel.prototype.get statusBarItems):
        (WebInspector.ScriptsPanel.prototype.debuggerWasEnabled):
        (WebInspector.ScriptsPanel.prototype.debuggerWasDetached):
        (WebInspector.ScriptsPanel.prototype.reset):
        (WebInspector.ScriptsPanel.prototype.canShowResource):
        (WebInspector.ScriptsPanel.prototype._updatePauseOnExceptionsButton):
        (WebInspector.ScriptsPanel.prototype._updateDebuggerButtons):
        (WebInspector.ScriptsPanel.prototype._toggleDebugging):
        * inspector/front-end/View.js:
        * inspector/front-end/inspector.css:
        * inspector/front-end/inspector.html:
        * inspector/front-end/inspector.js:
        (WebInspector.addResource):
        (WebInspector.debuggerWasEnabled):
        (WebInspector.debuggerWasDisabled):

2008-10-28  Timothy Hatcher  <timothy@apple.com>

        Fix an exception when searching the Resources panel while there
        and resources queued to be added to the list.

        Reviewed by Kevin McCullough.

        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourcesPanel.prototype.searchCanceled): Null check
        the _resourcesTreeElement property.
        (WebInspector.ResourcesPanel.prototype.performSearch): Ditto.

2008-10-28  Alp Toker  <alp@nuanti.com>

        GTK+ build fix for older versions of Pango where PANGO_VERSION_CHECK
        isn't defined.

        * platform/graphics/gtk/FontGtk.cpp:
        (WebCore::getDefaultPangoLayout):
        * platform/graphics/gtk/FontPlatformDataPango.cpp:

2008-10-28  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=21893
        Character set is incorrect for external scripts in XHTML pages

        <rdar://problem/6317451> Incorrect encoding for text in a popup at http://xpoint.ru/

        Test: fast/encoding/external-script-charset.xhtml

        Expose scriptCharset() function on all ScriptElements, and call it from XML tokenizer.

        * dom/ScriptElement.h:
        * dom/XMLTokenizerLibxml2.cpp:
        (WebCore::XMLTokenizer::endElementNs):
        * dom/XMLTokenizerQt.cpp:
        (WebCore::XMLTokenizer::parseEndElement):
        * html/HTMLScriptElement.h:
        * svg/SVGScriptElement.cpp:
        (WebCore::SVGScriptElement::scriptCharset):
        * svg/SVGScriptElement.h:

2008-10-28  Alp Toker  <alp@nuanti.com>

        Include copyright license files in the autotools dist target and
        exclude unused zlib headers.

        Change suggested by Mike Hommey.

        * GNUmakefile.am:

2008-10-27  Sam Weinig  <sam@webkit.org>

        Reviewed by Maciej Stachowiak.

        Clear the window shell when destroying a page to allow documents
        which have no way of being reached anymore, to be torn down.

        * page/Frame.cpp:
        (WebCore::Frame::pageDestroyed):

2008-10-27  Kevin Watters  <kevinwatters@gmail.com>

        Reviewed by Kevin Ollivier.

        Update the active state as well as the focused state as both need to be true
        for the caret to be drawn.

        https://bugs.webkit.org/show_bug.cgi?id=21900

        * WebView.cpp:
        (wxWebView::OnSetFocus):
        (wxWebView::OnKillFocus):

2008-10-27  Kevin Ollivier  <kevino@theolliviers.com>

        wx build fix on Linux/GTK. Enable support for #include <JavaScriptCore/XYZ.h> style includes.

        * webcore-wx.bkl:

2008-10-27  Michael Knaup  <michael.knaup@mac.com>

        Reviewed and tweaked by Darin Adler.

        - https://bugs.webkit.org/show_bug.cgi?id=8988

        Bug 8988: Add support for Mozilla CSS custom cursors.
        Added -webkit-grab and -webkit-grabbing cursor suppport
        for the Mac, dummy implementations for other platforms.

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue): Updated since the
        -webkit-grabbing cursor is now the last one.

        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue): Added
        CURSOR_WEBKIT_GRAB and CURSOR_WEBKIT_GRABBING.

        * css/CSSValueKeywords.in: Added -webkit-grab and
        -webkit-grabbing.

        * manual-tests/cursor.html: Added -webkit-zoom-in,
        webkit-zoom-out, -webkit-grab, and -webkit-grabbing.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::selectCursor): Added
        CURSOR_WEBKIT_GRAB and CURSOR_WEBKIT_GRABBING.

        * platform/Cursor.h: Added grabCursor and grabbingCursor.

        * platform/gtk/CursorGtk.cpp:
        (WebCore::grabCursor): Added.
        (WebCore::grabbingCursor): Added.
        * platform/mac/CursorMac.mm:
        (WebCore::grabCursor): Added.
        (WebCore::grabbingCursor): Added.
        * platform/qt/CursorQt.cpp:
        (WebCore::grabCursor): Added.
        (WebCore::grabbingCursor): Added.
        * platform/win/CursorWin.cpp:
        (WebCore::grabCursor): Added.
        (WebCore::grabbingCursor): Added.
        * platform/wx/CursorWx.cpp:
        (WebCore::grabCursor): Added.
        (WebCore::grabbingCursor): Added.

        * rendering/style/RenderStyleConstants.h:
        Added CURSOR_WEBKIT_GRAB and CURSOR_WEBKIT_GRABBING.
        Also broke ECursor out into a single constant per line.
        Also added a couple of comments.

2008-10-27  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Darin Adler.

        * svg/SVGAnimatedTemplate.h: needed a HashMap define

2008-10-21  Eric Seidel  <eric@webkit.org>

        Reviewed by Dave Hyatt.

        Infinite recursion crash in WebCore::RenderSVGRoot::absoluteClippedOverflowRect on a <stop> element outside of a gradient block
        https://bugs.webkit.org/show_bug.cgi?id=20400

        Test: svg/custom/stop-crash.svg

        * WebCore.xcodeproj/project.pbxproj:
        * rendering/RenderSVGGradientStop.h:
        (WebCore::RenderSVGGradientStop::absoluteClippedOverflowRect):

2008-10-27  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        No need to call release if the connection is null.

        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::start):

2008-10-27  Anders Carlsson  <andersca@apple.com>

        Reviewed by Kevin Decker.

        <rdar://problem/6322650> Crash in fast/loader/simultaneous-reloads-assert.html

        Make sure to null check the NSURLConnection object.

        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::start):
        (WebCore::ResourceHandle::setDefersLoading):

2008-10-27  Alexey Proskuryakov  <ap@webkit.org>

        Fix non-Mac builds.

        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCoreSources.bkl:
        Renamed JSHTMLOptionElementConstructor to JSOptionConstructor.

2008-10-26  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=21886
        window.HTMLOptionElement == "[object HTMLElementConstructor]" instead of HTMLOptionElementConstructor

        Test: fast/dom/HTMLOptionElement/option-prototype.html

        We now have separate objects for window.Option and window.HTMLOptionElement - the latter
        "constructor" cannot be used to construct anything. This matches Firefox behavior.

        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSDOMWindowBase.cpp:
        (jsDOMWindowBaseOption):
        * bindings/js/JSHTMLOptionElementConstructor.cpp: Removed.
        * bindings/js/JSHTMLOptionElementConstructor.h: Removed.
        * bindings/js/JSOptionConstructor.cpp: Copied from WebCore/bindings/js/JSHTMLOptionElementConstructor.cpp.
        * bindings/js/JSOptionConstructor.h: Copied from WebCore/bindings/js/JSHTMLOptionElementConstructor.h.
        * html/HTMLOptionElement.idl:
        Renamed JSHTMLOptionElementConstructor to JSOptionConstructor.

        * html/HTMLOptionElement.idl: Generate a constructor.

2008-10-25  Geoffrey Garen  <ggaren@apple.com>

        Not reviewed.

        Try to fix Mac debug build on the buildbot.

        * platform/FileChooser.cpp:
        (WebCore::FileChooserClient::~FileChooserClient):
        * platform/FileChooser.h: Moved destructor to .cpp file, to avoid a
        weak exported symbol.

2008-10-25  Jade Han  <jade.han@nokia.com>

        Reviewed by Anders.

        Enable custom properties for Qt runtime objects in QtWebKit

        https://bugs.webkit.org/show_bug.cgi?id=21813

        * bridge/runtime_object.cpp:
        (JSC::RuntimeObjectImp::getOwnPropertySlot):
        (JSC::RuntimeObjectImp::put):

2008-10-24  Sam Weinig  <sam@webkit.org>

        Fix windows build.

        * page/Chrome.cpp:
        * page/Chrome.h:

2008-10-24  Sam Weinig  <sam@webkit.org>

        Fix Qt build.

        * platform/qt/FileChooserQt.cpp:

2008-10-24  Sam Weinig  <sam@webkit.org>

        Reviewed by Dan Bernstein.

        Fix https://bugs.webkit.org/show_bug.cgi?id=21759
        Layering violation: FileChooser should not depend on Document/Frame/Page

        Move file choosing into WebKit ChromeClient.

        * loader/EmptyClients.h:
        (WebCore::EmptyChromeClient::runOpenPanel):
        * page/Chrome.cpp:
        (WebCore::Chrome::runOpenPanel):
        * page/Chrome.h:
        * page/ChromeClient.h:
        * page/mac/ChromeMac.mm:
        * platform/FileChooser.h:
        * platform/mac/FileChooserMac.mm:
        * platform/qt/FileChooserQt.cpp:
        * platform/win/FileChooserWin.cpp:
        * platform/wx/TemporaryLinkStubs.cpp:
        * rendering/RenderFileUploadControl.cpp:
        (WebCore::RenderFileUploadControl::click):

2008-10-24  Kevin Ollivier  <kevino@theolliviers.com>

        wx build fix - add newIconForFiles stub.

        * platform/wx/TemporaryLinkStubs.cpp:
        (Icon::newIconForFiles):

2008-10-24  Kevin Watters  <kevinwatters@gmail.com>

        Reviewed by Kevin Ollivier.

        Use the CGFont metrics APIs for more accurate measurements, and tweak the y
        value the text is drawn at (it was a couple pixels off before because wx
        internally adds to the y value.

        https://bugs.webkit.org/show_bug.cgi?id=21853

        * platform/wx/wxcode/mac/carbon/fontprops.cpp:
        (wxFontProperties::wxFontProperties):
        * platform/wx/wxcode/mac/carbon/non-kerned-drawing.cpp:
        (WebCore::drawTextWithSpacing):

2008-10-24  Eric Seidel  <eric@webkit.org>

        Reviewed by Sam Weinig.

        Generate missing constructors and add test to prevent missing ones in the future
        https://bugs.webkit.org/show_bug.cgi?id=21846

        Test: fast/js/global-constructors.html

        * css/CSSStyleSheet.idl:
        * css/RGBColor.idl:
        * dom/NodeIterator.idl:
        * dom/TreeWalker.idl:
        * xml/XPathExpression.idl:

2008-10-24  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=21836
        REGRESSION: Sign-in on Fancast.com causes crash in Webkit nightly

        Test: http/tests/xmlhttprequest/detaching-frame.html

        * xml/XMLHttpRequest.cpp: (WebCore::XMLHttpRequest::dropProtection): Null check the window -
        even though XHR needs a context (AKA frame) to be serviced, the frame may be disconnected
        when dispatching the same callback that results in this function being called.

2008-10-24  David Kilzer  <ddkilzer@apple.com>

        Gtk build fix.

        * platform/gtk/TemporaryLinkStubs.cpp:
        (WebCore::setFocusRingColorChangeFunction): Removed in r37858.

2008-10-24  Mark Rowe  <mrowe@apple.com>

        Reviewed by Sam Weinig.

        <rdar://problem/6164952> Use constant kCGInterpolationMedium in GraphicsContextCG.cpp rather than hard-coded values.

        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::setImageInterpolationQuality):
        (WebCore::GraphicsContext::imageInterpolationQuality):

2008-10-24  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        <rdar://problem/5440917> Support NPN_Construct

        * WebCore.NPAPI.exp:
        Export _NPN_Construct.

        * bridge/NP_jsobject.cpp:
        (_NPN_Construct):
        Implement this.

        * bridge/c/c_instance.cpp:
        (JSC::Bindings::CInstance::supportsConstruct):
        (JSC::Bindings::CInstance::invokeConstruct):
        Have this call the appropriate NPClass method.

        * bridge/npruntime.h:
        Add NPN_Construct.

        * bridge/npruntime_impl.h:
        Add _NPN_Construct.

        * bridge/runtime.h:
        (JSC::Bindings::Instance::supportsConstruct):
        (JSC::Bindings::Instance::invokeConstruct):
        New methods.

        * bridge/runtime_object.cpp:
        (JSC::callRuntimeConstructor):
        Call the native instance.

        (JSC::RuntimeObjectImp::getConstructData):
        Implement this.

        * bridge/runtime_object.h:
        Add new method declarations.

        * plugins/gtk/PluginPackageGtk.cpp:
        (WebCore::PluginPackage::load):
        * plugins/qt/PluginPackageQt.cpp:
        (WebCore::PluginPackage::load):
        * plugins/win/PluginPackageWin.cpp:
        (WebCore::PluginPackage::load):
        Initialize m_pluginFuncs.construct.

2008-10-24  Adele Peterson  <adele@apple.com>

        Build fix.

        * platform/FileChooser.h: (WebCore::FileChooserClient::~FileChooserClient):
        * platform/graphics/mac/IconMac.mm: (WebCore::Icon::newIconForFiles):

2008-10-24  Greg Bolsinga  <bolsinga@apple.com>

        Fix GTK build break.

        Reviewed by David Kilzer.

        * GNUmakefile.am: Do not include .idl files whose generated files should not be
        compiled.

2008-10-24  David Kilzer  <ddkilzer@apple.com>

        Wx build fix.

        * platform/wx/TemporaryLinkStubs.cpp:
        (WebCore::setFocusRingColorChangeFunction): Removed in r37858.

2008-10-24  Adele Peterson  <adele@apple.com>

        Reviewed by Sam Weinig.

        WebCore part of fix for <rdar://problem/5839256> FILE CONTROL: multi-file upload.

        This change adds support for multiple file selection in an <input type="file"> control when the "multiple" attribute is used.
        This is consistent with the direction HTML5 will be going in the future.

        The initial implementation here will show "n files" as the text next to the control when multiple files are selected.  You can view
        the individual files in a tooltip for now.  Improvements to this control will come later.

        Web developers will be able to access the FileList from the HTMLInputElement element, where they can get a base name and a size for each file.
        These FileList Files can also be sent in an XMLHTTPRequest.

        * manual-tests/post-multi-file-upload.html: Added.
        * manual-tests/resources/multiFileResources: Added.
        * manual-tests/resources/multiFileResources/post-echo-and-notify-done.cgi: Added.
        * manual-tests/resources/multiFileResources/testFile1.html: Added.
        * manual-tests/resources/multiFileResources/testFile2.html: Added.
        * manual-tests/resources/multiFileResources/testFile3.html: Added.

        * WebCore.base.exp: Added support to export the new "chooseFilenames" method to be used in WebKit.

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::parseMappedAttribute): Add support for the multiple attribute.
        (WebCore::HTMLInputElement::value): Added comments.  The HTML5 spec says that value shouldn't apply for the file upload control,
        but we don't want to break the behavior for existing websites that may rely on this.
        (WebCore::HTMLInputElement::setValue): ditto.
        (WebCore::HTMLInputElement::setValueFromRenderer): This is no longer used for file upload controls. setFileListFromRenderer is used instead.
        (WebCore::HTMLInputElement::setFileListFromRenderer): Added.
        * html/HTMLInputElement.h:

        * page/Chrome.cpp: (WebCore::Chrome::setToolTip): Show a tooltip with the file name list for the multi-file upload control.

        * page/DragController.cpp: (WebCore::DragController::concludeDrag): Updated to support multiple files.

        * platform/FileChooser.cpp: Add support for maintaining a list of file paths that can be retrieved by the renderer.
        (WebCore::FileChooser::FileChooser):
        (WebCore::FileChooser::create):
        (WebCore::FileChooser::clear):
        (WebCore::FileChooser::chooseFile):
        (WebCore::FileChooser::chooseFiles):
        (WebCore::FileChooser::chooseIcon):
        * platform/FileChooser.h:
        (WebCore::FileChooser::filePaths):
        (WebCore::FileChooser::allowsMultipleFiles):

        * platform/graphics/Icon.h:
        * platform/graphics/mac/IconMac.mm: (WebCore::Icon::newIconForFiles): Returns a generic icon for multiple files.
        * platform/graphics/gtk/IconGtk.cpp: (WebCore::Icon::newIconForFiles): stubbed out.
        * platform/graphics/qt/IconQt.cpp: (WebCore::Icon::newIconForFiles): ditto.
        * platform/graphics/win/IconWin.cpp: (WebCore::Icon::newIconForFiles): ditto.

        * platform/gtk/FileChooserGtk.cpp: (WebCore::FileChooser::basenameForWidth):  Updated to deal with new filenames vector.
        * platform/mac/FileChooserMac.mm: (WebCore::FileChooser::basenameForWidth): ditto.
        * platform/qt/FileChooserQt.cpp:
        (WebCore::FileChooser::openFileChooser):
        (WebCore::FileChooser::basenameForWidth):
        * platform/win/FileChooserWin.cpp: (WebCore::FileChooser::basenameForWidth):

        * platform/network/mac/FormDataStreamMac.mm: (WebCore::disassociateStreamWithResourceHandle):
        Removed unnecessary assertion.  This can get hit when connectionDidFinishLoading and cancel
        both get called for the same ResourceHandle.  This getting called twice has no negative effect.

        * rendering/RenderFileUploadControl.cpp:
        (WebCore::RenderFileUploadControl::valueChanged):  Calls setFileListFromRenderer.
        (WebCore::RenderFileUploadControl::allowsMultipleFiles):  Added.
        (WebCore::RenderFileUploadControl::updateFromElement):  Uses the new filenames call from FileChooser.
        (WebCore::RenderFileUploadControl::receiveDroppedFiles):  Updated to support multiple files.
        * rendering/RenderFileUploadControl.h:

2008-10-23  Peter Kasting  <pkasting@google.com>

        Reviewed by David Hyatt.

        https://bugs.webkit.org/show_bug.cgi?id=21844
        Remove setFocusRingColorChangeFunction.

        * page/Page.cpp:
        (WebCore::Page::Page):
        * platform/graphics/Color.h:
        * platform/graphics/mac/ColorMac.mm:
        (WebCore::focusRingColor):
        * platform/graphics/qt/GraphicsContextQt.cpp:
        * platform/graphics/win/ColorSafari.cpp:

2008-10-24  David Kilzer  <ddkilzer@apple.com>

        Build fix for Qt.

        Reviewed by Greg.

        * WebCore.pro: Added missing *.idl files.

2008-10-24  Greg Bolsinga  <bolsinga@apple.com>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=21475

        Provide support for the Geolocation API

        http://dev.w3.org/geo/api/spec-source.html

        Test: geolocation/geolocation-not-implemented.html

        * DerivedSources.make:
        * GNUmakefile.am: Added Geolocation support
        * WebCore.pro: Added Geolocation support
        * WebCore.vcproj/WebCore.vcproj: Added Geolocation support
        * WebCore.xcodeproj/project.pbxproj: Added Geolocation support
        * WebCoreSources.bkl: Added Geolocation support
        * bindings/js/JSCustomPositionCallback.cpp: Added.
        (WebCore::JSCustomPositionCallback::JSCustomPositionCallback):
        (WebCore::JSCustomPositionCallback::handleEvent):
        * bindings/js/JSCustomPositionCallback.h: Added.
        (WebCore::JSCustomPositionCallback::create):
        * bindings/js/JSCustomPositionErrorCallback.cpp: Added.
        (WebCore::JSCustomPositionErrorCallback::JSCustomPositionErrorCallback):
        (WebCore::JSCustomPositionErrorCallback::handleEvent):
        * bindings/js/JSCustomPositionErrorCallback.h: Added.
        (WebCore::JSCustomPositionErrorCallback::create):
        * bindings/js/JSDOMBinding.cpp: move markDOMObjectWrapper here from JSDOMWindowCustom
        (WebCore::markDOMObjectWrapper):
        * bindings/js/JSDOMBinding.h: move markDOMObjectWrapper here from JSDOMWindowCustom
        * bindings/js/JSDOMWindowCustom.cpp: move markDOMObjectWrapper to JSDOMBinding
        * bindings/js/JSGeolocationCustom.cpp: Added.
        (WebCore::JSGeolocation::getCurrentPosition):
        (WebCore::JSGeolocation::watchPosition):
        * bindings/js/JSNavigatorCustom.cpp: handle marking Geolocation
        (WebCore::JSNavigator::mark):
        * dom/Document.cpp:
        (WebCore::Document::Document):
        * dom/Document.h:
        (WebCore::Document::setUsingGeolocation):
        (WebCore::Document::usingGeolocation):
        * loader/FrameLoader.cpp: don't add to back forward cache if using Geolocation
        (WebCore::FrameLoader::canCachePage):
        * page/Geolocation.cpp: Added.
        (WebCore::Geolocation::GeoNotifier::GeoNotifier):
        (WebCore::Geolocation::GeoNotifier::timerFired):
        (WebCore::Geolocation::Geolocation):
        (WebCore::Geolocation::disconnectFrame):
        (WebCore::Geolocation::getCurrentPosition):
        (WebCore::Geolocation::watchPosition):
        (WebCore::Geolocation::clearWatch):
        (WebCore::Geolocation::stopUpdatingIfEmpty):
        (WebCore::Geolocation::sendErrorToOneShots):
        (WebCore::Geolocation::sendErrorToWatchers):
        (WebCore::Geolocation::sendPositionToOneShots):
        (WebCore::Geolocation::sendPositionToWatchers):
        (WebCore::Geolocation::handleError):
        (WebCore::Geolocation::geolocationServicePositionChanged):
        (WebCore::Geolocation::geolocationServiceErrorOccurred):
        * page/Geolocation.h: Added.
        (WebCore::Geolocation::create):
        (WebCore::Geolocation::~Geolocation):
        (WebCore::Geolocation::lastPosition):
        (WebCore::Geolocation::GeoNotifier::create):
        * page/Geolocation.idl: Added.
        * page/Geoposition.cpp: Added.
        (WebCore::Geoposition::toString):
        * page/Geoposition.h: Added.
        (WebCore::Geoposition::create):
        (WebCore::Geoposition::latitude):
        (WebCore::Geoposition::longitude):
        (WebCore::Geoposition::altitude):
        (WebCore::Geoposition::accuracy):
        (WebCore::Geoposition::altitudeAccuracy):
        (WebCore::Geoposition::heading):
        (WebCore::Geoposition::velocity):
        (WebCore::Geoposition::timestamp):
        (WebCore::Geoposition::Geoposition):
        * page/Geoposition.idl: Added.
        * page/Navigator.cpp:
        (WebCore::Navigator::disconnectFrame): disconnect Geolocation
        (WebCore::Navigator::geolocation): accessor for Geolocation
        * page/Navigator.h:
        (WebCore::Navigator::optionalGeolocation): accessor for Geolocation
        * page/Navigator.idl: accessor for Geolocation
        * page/PositionCallback.h: Added.
        (WebCore::PositionCallback::~PositionCallback):
        * page/PositionCallback.idl: Added.
        * page/PositionError.h: Added.
        (WebCore::PositionError::):
        (WebCore::PositionError::create):
        (WebCore::PositionError::code):
        (WebCore::PositionError::message):
        (WebCore::PositionError::PositionError):
        * page/PositionError.idl: Added.
        * page/PositionErrorCallback.h: Added.
        (WebCore::PositionErrorCallback::~PositionErrorCallback):
        * page/PositionErrorCallback.idl: Added.
        * page/PositionOptions.h: Added.
        (WebCore::PositionOptions::create):
        (WebCore::PositionOptions::enableHighAccuracy):
        (WebCore::PositionOptions::setEnableHighAccuracy):
        (WebCore::PositionOptions::timeout):
        (WebCore::PositionOptions::setTimeout):
        (WebCore::PositionOptions::PositionOptions):
        * page/PositionOptions.idl: Added.
        * platform/GeolocationService.cpp: Added.
        (WebCore::GeolocationService::GeolocationService):
        (WebCore::GeolocationService::positionChanged):
        (WebCore::GeolocationService::errorOccurred):
        * platform/GeolocationService.h: Added.
        (WebCore::GeolocationServiceClient::~GeolocationServiceClient):
        (WebCore::GeolocationServiceClient::geolocationServicePositionChanged):
        (WebCore::GeolocationServiceClient::geolocationServiceErrorOccurred):
        (WebCore::GeolocationService::~GeolocationService):

2008-10-24  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Darin Adler

        https://bugs.webkit.org/show_bug.cgi?id=21818

        Add HashTraits for AtomicString so that AtomicString can be used as
        the key for a HashMap or HashSet.

        * GNUmakefile.am: add AtomicStringHash.h
        * WebCore.vcproj/WebCore.vcproj: add AtomicStringHash.h
        * WebCore.xcodeproj/project.pbxproj: add AtomicStringHash.h
        * platform/text/AtomicString.h:
        (WebCore::AtomicString::AtomicString):
        (WebCore::AtomicString::isHashTableDeletedValue):
            specialize DefaultHash for AtomicString to use AtomicStringHash
        * platform/text/AtomicStringHash.h: Added.
        * platform/text/StringImpl.cpp:
        (WebCore::StringImpl::StringImpl):
            compute the hash up-front for the empty string
        * platform/text/StringImpl.h:
        (WebCore::StringImpl::existingHash):
            method to get the hash without a test and branch, for callers like
            AtomicStringHash who can guarantee that the hash has already been computed.

2008-10-24  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Sam Weinig

        https://bugs.webkit.org/show_bug.cgi?id=21857

        Add WebKitCSSKeyframeRule and WebKitCSSKeyframesRule to the
        switch in _wrapCSSRule.

        * bindings/objc/DOMCSS.mm:
        (+[DOMCSSRule _wrapCSSRule:WebCore::]):

2008-10-24  Adam Roben  <aroben@apple.com>

        Windows build fix

        * plugins/PluginView.cpp:

2008-10-24  Dan Bernstein  <mitz@apple.com>

        Reviewed by Sam Weinig.

        - fix https://bugs.webkit.org/show_bug.cgi?id=21851
          <rdar://problem/6304151> REGRESSION (r36513): Crash when removing a widget with percent height

        Test: fast/replaced/percent-height-in-anonymous-block-widget.html

        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::destroy): Copied code added to
        RenderBox::destroy() in r36513 into this function.

2008-10-24  Timothy Hatcher  <timothy@apple.com>

        Add a mechanism to ask the InspectorClient for key/value setting pairs.
        These settings can be strings, numbers, booleans or string vectors. The
        settings are also bridged to and from JavaScript.

        https://bugs.webkit.org/show_bug.cgi?id=21856

        Reviewed by Darin Adler.

        * WebCore.base.exp: Expose the String CFStringRef constructor.
        * inspector/InspectorClient.h:
        (WebCore::InspectorClient::populateSetting): Added, pure virtual.
        (WebCore::InspectorClient::storeSetting): Ditto.
        (WebCore::InspectorClient::removeSetting): Ditto.
        * inspector/InspectorController.cpp:
        (WebCore::setting): Calls InspectorController::setting and wraps the result in script types.
        (WebCore::setSetting): Calls InspectorController::setSetting after converting from script types.
        (WebCore::InspectorController::InspectorController): Increment a global static
        to track the number of live InspectorControllers.
        (WebCore::InspectorController::~InspectorController): Decrement the global static
        that tracks the number of live InspectorControllers. Delete the setting cache if there
        are no more live controllers.
        (WebCore::InspectorController::setting): Check the cache and return the setting from there,
        otherwise make a new Setting and ask the client to populate it.
        (WebCore::InspectorController::setSetting): Change the cache and ask the client to store it.
        (WebCore::InspectorController::windowScriptObjectAvailable): Add setting and setSetting
        to the InspectorController script class.
        * inspector/InspectorController.h:
        (WebCore::InspectorController::Setting::Setting):
        (WebCore::InspectorController::Setting::operator=):
        (WebCore::InspectorController::Setting::type): Return m_type.
        (WebCore::InspectorController::Setting::string): Return m_string. Assert the type is correct.
        (WebCore::InspectorController::Setting::stringVector): Return m_stringVector.
        Assert the type is correct.
        (WebCore::InspectorController::Setting::doubleValue): Return m_simpleContent.m_double.
        Assert the type is correct.
        (WebCore::InspectorController::Setting::integerValue): Return m_simpleContent.m_integer.
        Assert the type is correct.
        (WebCore::InspectorController::Setting::booleanValue): Return m_simpleContent.m_boolean.
        Assert the type is correct.
        (WebCore::InspectorController::Setting::set): Overloaded for each data type, sets the right
        field and the type.
        * loader/EmptyClients.h:
        (WebCore::EmptyInspectorClient::populateSetting): Added, empty method.
        (WebCore::EmptyInspectorClient::storeSetting): Ditto.
        (WebCore::EmptyInspectorClient::removeSetting): Ditto.

2008-10-24  Cameron Zwarich  <zwarich@apple.com>

        Reviewed by Sam Weinig.

        Remove some C-style casts.

        * html/HTMLViewSourceDocument.cpp:
        (WebCore::HTMLViewSourceDocument::addViewSourceToken):

2008-10-24  Darin Adler  <darin@apple.com>

        - finish rolling out https://bugs.webkit.org/show_bug.cgi?id=21732

        * bindings/js/JSAttrCustom.cpp:
        * bindings/js/JSCSSRuleCustom.cpp:
        * bindings/js/JSCSSStyleDeclarationCustom.cpp:
        * bindings/js/JSCSSValueCustom.cpp:
        * bindings/js/JSCanvasPixelArrayCustom.h:
        * bindings/js/JSCanvasRenderingContext2DCustom.cpp:
        * bindings/js/JSClipboardCustom.cpp:
        * bindings/js/JSConsoleCustom.cpp:
        * bindings/js/JSCustomSQLStatementCallback.cpp:
        * bindings/js/JSCustomSQLStatementErrorCallback.cpp:
        * bindings/js/JSCustomSQLTransactionCallback.cpp:
        * bindings/js/JSCustomSQLTransactionErrorCallback.cpp:
        * bindings/js/JSCustomVoidCallback.cpp:
        * bindings/js/JSCustomVoidCallback.h:
        * bindings/js/JSCustomXPathNSResolver.cpp:
        * bindings/js/JSCustomXPathNSResolver.h:
        * bindings/js/JSDOMApplicationCacheCustom.cpp:
        * bindings/js/JSDOMBinding.cpp:
        * bindings/js/JSDOMBinding.h:
        * bindings/js/JSDOMWindowBase.cpp:
        * bindings/js/JSDOMWindowBase.h:
        * bindings/js/JSDOMWindowCustom.cpp:
        * bindings/js/JSDOMWindowCustom.h:
        * bindings/js/JSDOMWindowShell.cpp:
        * bindings/js/JSDOMWindowShell.h:
        * bindings/js/JSDatabaseCustom.cpp:
        * bindings/js/JSDedicatedWorkerCustom.cpp:
        * bindings/js/JSDocumentCustom.cpp:
        * bindings/js/JSElementCustom.cpp:
        * bindings/js/JSEventCustom.cpp:
        * bindings/js/JSEventListener.cpp:
        * bindings/js/JSEventTarget.cpp:
        * bindings/js/JSEventTarget.h:
        * bindings/js/JSEventTargetBase.h:
        * bindings/js/JSEventTargetNodeCustom.cpp:
        * bindings/js/JSHTMLAllCollection.h:
        * bindings/js/JSHTMLAppletElementCustom.cpp:
        * bindings/js/JSHTMLCollectionCustom.cpp:
        * bindings/js/JSHTMLDocumentCustom.cpp:
        * bindings/js/JSHTMLEmbedElementCustom.cpp:
        * bindings/js/JSHTMLFormElementCustom.cpp:
        * bindings/js/JSHTMLFrameElementCustom.cpp:
        * bindings/js/JSHTMLFrameSetElementCustom.cpp:
        * bindings/js/JSHTMLIFrameElementCustom.cpp:
        * bindings/js/JSHTMLInputElementCustom.cpp:
        * bindings/js/JSHTMLObjectElementCustom.cpp:
        * bindings/js/JSHTMLOptionsCollectionCustom.cpp:
        * bindings/js/JSHTMLSelectElementCustom.cpp:
        * bindings/js/JSHTMLSelectElementCustom.h:
        * bindings/js/JSHistoryCustom.cpp:
        * bindings/js/JSImageDataCustom.cpp:
        * bindings/js/JSInspectedObjectWrapper.cpp:
        * bindings/js/JSInspectedObjectWrapper.h:
        * bindings/js/JSInspectorCallbackWrapper.cpp:
        * bindings/js/JSInspectorCallbackWrapper.h:
        * bindings/js/JSJavaScriptCallFrameCustom.cpp:
        * bindings/js/JSLocationCustom.cpp:
        * bindings/js/JSMessagePortCustom.cpp:
        * bindings/js/JSMimeTypeArrayCustom.cpp:
        * bindings/js/JSNamedNodeMapCustom.cpp:
        * bindings/js/JSNamedNodesCollection.cpp:
        * bindings/js/JSNamedNodesCollection.h:
        * bindings/js/JSNavigatorCustom.cpp:
        * bindings/js/JSNodeCustom.cpp:
        * bindings/js/JSNodeFilterCondition.cpp:
        * bindings/js/JSNodeFilterCondition.h:
        * bindings/js/JSNodeFilterCustom.cpp:
        * bindings/js/JSNodeIteratorCustom.cpp:
        * bindings/js/JSNodeListCustom.cpp:
        * bindings/js/JSPluginArrayCustom.cpp:
        * bindings/js/JSPluginCustom.cpp:
        * bindings/js/JSPluginElementFunctions.cpp:
        * bindings/js/JSPluginElementFunctions.h:
        * bindings/js/JSQuarantinedObjectWrapper.cpp:
        * bindings/js/JSQuarantinedObjectWrapper.h:
        * bindings/js/JSRGBColor.cpp:
        * bindings/js/JSRGBColor.h:
        * bindings/js/JSSQLResultSetRowListCustom.cpp:
        * bindings/js/JSSQLTransactionCustom.cpp:
        * bindings/js/JSSVGElementInstanceCustom.cpp:
        * bindings/js/JSSVGLengthCustom.cpp:
        * bindings/js/JSSVGMatrixCustom.cpp:
        * bindings/js/JSSVGPathSegCustom.cpp:
        * bindings/js/JSSVGPathSegListCustom.cpp:
        * bindings/js/JSSVGPointListCustom.cpp:
        * bindings/js/JSSVGTransformListCustom.cpp:
        * bindings/js/JSStorageCustom.cpp:
        * bindings/js/JSStyleSheetCustom.cpp:
        * bindings/js/JSStyleSheetListCustom.cpp:
        * bindings/js/JSTextCustom.cpp:
        * bindings/js/JSTreeWalkerCustom.cpp:
        * bindings/js/JSXMLHttpRequestCustom.cpp:
        * bindings/js/JSXMLHttpRequestUploadCustom.cpp:
        * bindings/js/JSXSLTProcessorCustom.cpp:
        * bindings/js/ScheduledAction.cpp:
        * bindings/js/ScheduledAction.h:
        * bindings/js/ScriptController.cpp:
        * bindings/js/ScriptController.h:
        * bindings/objc/WebScriptObject.mm:
        * bindings/objc/WebScriptObjectPrivate.h:
        * bindings/scripts/CodeGeneratorJS.pm:
        * bridge/NP_jsobject.cpp:
        * bridge/c/c_instance.cpp:
        * bridge/c/c_instance.h:
        * bridge/c/c_runtime.cpp:
        * bridge/c/c_runtime.h:
        * bridge/c/c_utility.cpp:
        * bridge/c/c_utility.h:
        * bridge/jni/jni_instance.cpp:
        * bridge/jni/jni_instance.h:
        * bridge/jni/jni_jsobject.h:
        * bridge/jni/jni_jsobject.mm:
        * bridge/jni/jni_objc.mm:
        * bridge/jni/jni_runtime.cpp:
        * bridge/jni/jni_runtime.h:
        * bridge/jni/jni_utility.cpp:
        * bridge/jni/jni_utility.h:
        * bridge/objc/WebScriptObject.h:
        * bridge/objc/objc_class.h:
        * bridge/objc/objc_class.mm:
        * bridge/objc/objc_instance.h:
        * bridge/objc/objc_instance.mm:
        * bridge/objc/objc_runtime.h:
        * bridge/objc/objc_runtime.mm:
        * bridge/objc/objc_utility.h:
        * bridge/objc/objc_utility.mm:
        * bridge/qt/qt_class.cpp:
        * bridge/qt/qt_class.h:
        * bridge/qt/qt_instance.cpp:
        * bridge/qt/qt_instance.h:
        * bridge/qt/qt_runtime.cpp:
        * bridge/qt/qt_runtime.h:
        * bridge/runtime.cpp:
        * bridge/runtime.h:
        * bridge/runtime_array.cpp:
        * bridge/runtime_array.h:
        * bridge/runtime_method.cpp:
        * bridge/runtime_method.h:
        * bridge/runtime_object.cpp:
        * bridge/runtime_object.h:
        * bridge/testqtbindings.cpp:
        * inspector/JavaScriptCallFrame.cpp:
        * inspector/JavaScriptCallFrame.h:
        * inspector/JavaScriptProfile.cpp:
        * inspector/JavaScriptProfile.h:
        * inspector/JavaScriptProfileNode.cpp:
        * inspector/JavaScriptProfileNode.h:
        * loader/FrameLoader.cpp:
        * loader/FrameLoader.h:
        * page/Console.cpp:
        * page/Console.h:
        * plugins/MimeTypeArray.h:
        * plugins/Plugin.h:
        * plugins/PluginArray.h:
        * plugins/PluginView.cpp:
        * xml/XMLHttpRequest.cpp:
        Use JSValue* instead of JSValuePtr.

2008-10-24  Simon Hausmann  <hausmann@webkit.org>

        Fix the Qt build.

        * bridge/qt/qt_instance.cpp:
        (JSC::Bindings::QtField::valueFromInstance):

2008-10-24  David Kilzer  <ddkilzer@apple.com>

        Rolled out r37840 and r37841.

        * DerivedSources.make:
        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * bindings/js/JSCustomPositionCallback.cpp: Removed.
        * bindings/js/JSCustomPositionCallback.h: Removed.
        * bindings/js/JSCustomPositionErrorCallback.cpp: Removed.
        * bindings/js/JSCustomPositionErrorCallback.h: Removed.
        * bindings/js/JSDOMBinding.cpp:
        * bindings/js/JSDOMBinding.h:
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::markDOMObjectWrapper):
        * bindings/js/JSGeolocationCustom.cpp: Removed.
        * bindings/js/JSNavigatorCustom.cpp:
        * dom/Document.cpp:
        (WebCore::Document::Document):
        * dom/Document.h:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::canCachePage):
        * page/Geolocation.cpp: Removed.
        * page/Geolocation.h: Removed.
        * page/Geolocation.idl: Removed.
        * page/Geoposition.cpp: Removed.
        * page/Geoposition.h: Removed.
        * page/Geoposition.idl: Removed.
        * page/Navigator.cpp:
        (WebCore::Navigator::disconnectFrame):
        * page/Navigator.h:
        * page/Navigator.idl:
        * page/PositionCallback.h: Removed.
        * page/PositionCallback.idl: Removed.
        * page/PositionError.h: Removed.
        * page/PositionError.idl: Removed.
        * page/PositionErrorCallback.h: Removed.
        * page/PositionErrorCallback.idl: Removed.
        * page/PositionOptions.h: Removed.
        * page/PositionOptions.idl: Removed.
        * platform/GeolocationService.cpp: Removed.
        * platform/GeolocationService.h: Removed.

2008-10-23  David Kilzer  <ddkilzer@apple.com>

        Attempt to fix GTK build.

        * GNUmakefile.am: Added new *.idl files that were missing.

2008-10-23  Greg Bolsinga  <bolsinga@apple.com>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=21475

        Provide support for the Geolocation API

        http://dev.w3.org/geo/api/spec-source.html

        Test: geolocation/geolocation-not-implemented.html

        * DerivedSources.make:
        * GNUmakefile.am: Added Geolocation support
        * WebCore.pro: Added Geolocation support
        * WebCore.vcproj/WebCore.vcproj: Added Geolocation support
        * WebCore.xcodeproj/project.pbxproj: Added Geolocation support
        * WebCoreSources.bkl: Added Geolocation support
        * bindings/js/JSCustomPositionCallback.cpp: Added.
        (WebCore::JSCustomPositionCallback::JSCustomPositionCallback):
        (WebCore::JSCustomPositionCallback::handleEvent):
        * bindings/js/JSCustomPositionCallback.h: Added.
        (WebCore::JSCustomPositionCallback::create):
        * bindings/js/JSCustomPositionErrorCallback.cpp: Added.
        (WebCore::JSCustomPositionErrorCallback::JSCustomPositionErrorCallback):
        (WebCore::JSCustomPositionErrorCallback::handleEvent):
        * bindings/js/JSCustomPositionErrorCallback.h: Added.
        (WebCore::JSCustomPositionErrorCallback::create):
        * bindings/js/JSDOMBinding.cpp: move markDOMObjectWrapper here from JSDOMWindowCustom
        (WebCore::markDOMObjectWrapper):
        * bindings/js/JSDOMBinding.h: move markDOMObjectWrapper here from JSDOMWindowCustom
        * bindings/js/JSDOMWindowCustom.cpp: move markDOMObjectWrapper to JSDOMBinding
        * bindings/js/JSGeolocationCustom.cpp: Added.
        (WebCore::JSGeolocation::getCurrentPosition):
        (WebCore::JSGeolocation::watchPosition):
        * bindings/js/JSNavigatorCustom.cpp: handle marking Geolocation
        (WebCore::JSNavigator::mark):
        * dom/Document.cpp:
        (WebCore::Document::Document):
        * dom/Document.h:
        (WebCore::Document::setUsingGeolocation):
        (WebCore::Document::usingGeolocation):
        * loader/FrameLoader.cpp: don't add to back forward cache if using Geolocation
        (WebCore::FrameLoader::canCachePage):
        * page/Geolocation.cpp: Added.
        (WebCore::Geolocation::GeoNotifier::GeoNotifier):
        (WebCore::Geolocation::GeoNotifier::timerFired):
        (WebCore::Geolocation::Geolocation):
        (WebCore::Geolocation::disconnectFrame):
        (WebCore::Geolocation::getCurrentPosition):
        (WebCore::Geolocation::watchPosition):
        (WebCore::Geolocation::clearWatch):
        (WebCore::Geolocation::stopUpdatingIfEmpty):
        (WebCore::Geolocation::sendErrorToOneShots):
        (WebCore::Geolocation::sendErrorToWatchers):
        (WebCore::Geolocation::sendPositionToOneShots):
        (WebCore::Geolocation::sendPositionToWatchers):
        (WebCore::Geolocation::handleError):
        (WebCore::Geolocation::geolocationServicePositionChanged):
        (WebCore::Geolocation::geolocationServiceErrorOccurred):
        * page/Geolocation.h: Added.
        (WebCore::Geolocation::create):
        (WebCore::Geolocation::~Geolocation):
        (WebCore::Geolocation::lastPosition):
        (WebCore::Geolocation::GeoNotifier::create):
        * page/Geolocation.idl: Added.
        * page/Geoposition.cpp: Added.
        (WebCore::Geoposition::toString):
        * page/Geoposition.h: Added.
        (WebCore::Geoposition::create):
        (WebCore::Geoposition::latitude):
        (WebCore::Geoposition::longitude):
        (WebCore::Geoposition::altitude):
        (WebCore::Geoposition::accuracy):
        (WebCore::Geoposition::altitudeAccuracy):
        (WebCore::Geoposition::heading):
        (WebCore::Geoposition::velocity):
        (WebCore::Geoposition::timestamp):
        (WebCore::Geoposition::Geoposition):
        * page/Geoposition.idl: Added.
        * page/Navigator.cpp:
        (WebCore::Navigator::disconnectFrame): disconnect Geolocation
        (WebCore::Navigator::geolocation): accessor for Geolocation
        * page/Navigator.h:
        (WebCore::Navigator::optionalGeolocation): accessor for Geolocation
        * page/Navigator.idl: accessor for Geolocation
        * page/PositionCallback.h: Added.
        (WebCore::PositionCallback::~PositionCallback):
        * page/PositionCallback.idl: Added.
        * page/PositionError.h: Added.
        (WebCore::PositionError::):
        (WebCore::PositionError::create):
        (WebCore::PositionError::code):
        (WebCore::PositionError::message):
        (WebCore::PositionError::PositionError):
        * page/PositionError.idl: Added.
        * page/PositionErrorCallback.h: Added.
        (WebCore::PositionErrorCallback::~PositionErrorCallback):
        * page/PositionErrorCallback.idl: Added.
        * page/PositionOptions.h: Added.
        (WebCore::PositionOptions::create):
        (WebCore::PositionOptions::enableHighAccuracy):
        (WebCore::PositionOptions::setEnableHighAccuracy):
        (WebCore::PositionOptions::timeout):
        (WebCore::PositionOptions::setTimeout):
        (WebCore::PositionOptions::PositionOptions):
        * page/PositionOptions.idl: Added.
        * platform/GeolocationService.cpp: Added.
        (WebCore::GeolocationService::GeolocationService):
        (WebCore::GeolocationService::positionChanged):
        (WebCore::GeolocationService::errorOccurred):
        * platform/GeolocationService.h: Added.
        (WebCore::GeolocationServiceClient::~GeolocationServiceClient):
        (WebCore::GeolocationServiceClient::geolocationServicePositionChanged):
        (WebCore::GeolocationServiceClient::geolocationServiceErrorOccurred):
        (WebCore::GeolocationService::~GeolocationService):

2008-10-23  Alp Toker  <alp@nuanti.com>

        Fix typo in comment in previous commit. GTK -> GLIB

        * platform/gtk/guriescape.c:

2008-10-23  Kalle Vahlman  <kalle.vahlman@movial.com>

        Reviewed by Alp Toker.

        https://bugs.webkit.org/show_bug.cgi?id=21824
        [GTK] FileSystem abstraction uses features from Glib 2.16

        Wrap g_uri_unescape_string() to fix building with pre-2.16 Glib

        * platform/gtk/guriescape.c:
        (unescape_character):
        (_webcore_g_uri_unescape_segment):
        (_webcore_g_uri_unescape_string):
        * platform/gtk/guriescape.h:

2008-10-23  Jan Michael Alonzo  <jmalonzo@webkit.org>

        Fix Gtk build typo introduced in http://trac.webkit.org/changeset/37826.

        * GNUmakefile.am:

2008-10-23  Darin Fisher  <darin@chromium.org>

        Reviewed by Eric Seidel.

        m_frame null checked but then dereferenced
        https://bugs.webkit.org/show_bug.cgi?id=21845

        This error was found using a static analysis tool, and so I do not know
        how to produce a null m_frame on entry to this method.  Hence, I have
        not included a regression test.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::allowDHTMLDrag): Add an early return.

2008-10-23  Dan Bernstein  <mitz@apple.com>

        Reviewed by Sam Weinig with no hesitation.

        - fix the HTML/CSS case of https://bugs.webkit.org/show_bug.cgi?id=19839
          <rdar://problem/6304805> A PDF,RLE sequence that should be a no-op affects bidi reordering

        Test: fast/text/bidi-embedding-pop-and-push-same.html

        * platform/text/BidiResolver.h:
        (WebCore::BidiResolver::embed): Changed to only add the embedding
        operation to a vector of pending operations.

        (WebCore::BidiResolver::lowerExplicitEmbeddingLevel): Added. Moved the
        code that used to be in the PDF case of embed() here, except the part
        that sets the context.

        (WebCore::BidiResolver::raiseExplicitEmbeddingLevel): Added. Moved the
        code that used to be in the non-PDF case of embed() here, except the
        part the sets the context.

        (WebCore::BidiResolver::commitExplicitEmbedding): Added. Processes the
        explicit embedding operations in the vector by creating an updated
        context and determining the old and new embedding levels. If the levels
        are not the same, calls {lower,raise}ExplicitEmbeddingLevel(). Always
        sets the context to the new one.

        (WebCore::BidiResolver::createBidiRunsForLine): Added calls to
        commitExplicitEmbedding() after calling embed() and after calling
        increment().

        * rendering/bidi.cpp:
        (WebCore::bidiFirst): Added calls to commitExplicitEmbedding() because
        this function increments the resolver.

        (WebCore::RenderBlock::skipLeadingWhitespace): Ditto.

2008-10-23  Jan Michael Alonzo  <jmalonzo@webkit.org>

        Gtk build fix. Not reviewed.

        Add DNSCurl and DNSSoup to the Gtk build

        * GNUmakefile.am:
        * platform/gtk/TemporaryLinkStubs.cpp:
        * platform/network/soup/DNSSoup.cpp: Copied from WebCore/platform/network/curl/DNSCurl.cpp.
        (WebCore::prefetchDNS):

2008-10-23  Eric Seidel  <eric@webkit.org>

        Reviewed by Sam Weinig.

        Un-break the Darwin build.

        * platform/graphics/cg/GraphicsContextPlatformPrivateCG.h:
        * platform/graphics/cg/ImageCG.cpp:

2008-10-23  Darin Fisher  <darin@chromium.org>

        Reviewed by Eric Seidel.

        Fix forward decls to be struct instead of class.
        https://bugs.webkit.org/show_bug.cgi?id=21838

        * rendering/style/StyleRareInheritedData.h:
        * rendering/style/StyleRareNonInheritedData.h:

2008-10-23  Brent Fulgham  <bfulgham@gmail.com>

        Reviewed by Oliver Hunt.

        * platform/network/curl/ResourceRequest.h:  A better implementation
          of CFURLRequest, rather than void*.  This gives better compatibility
          with the WebKit.idl interface.
        (WebCore::ResourceRequest::cfURLRequest):

2008-10-23  Mike Pinkerton  <pinkerton@chromium.org>

        Reviewed by Eric Seidel.

        PLATFORM(CHROMIUM) uses CG the same way PLATFORM(MAC) does so fix
        ifdefs to reflect that.

        * platform/graphics/cg/GraphicsContextPlatformPrivateCG.h:
        * platform/graphics/cg/ImageCG.cpp:

2008-10-23  Peter Kasting  <pkasting@google.com>

        Reviewed by Adam Roben.

        https://bugs.webkit.org/show_bug.cgi?id=21833
        Place JavaScript Debugger hooks under #if ENABLE(JAVASCRIPT_DEBUGGER).

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        (WebCore::InspectorController::setWindowVisible):
        (WebCore::InspectorController::windowScriptObjectAvailable):
        (WebCore::InspectorController::close):
        * inspector/InspectorController.h:
        * page/Page.cpp:
        (WebCore::Page::Page):

2008-10-23  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Tim Hatcher.

        https://bugs.webkit.org/show_bug.cgi?id=21817
        Bug 21817: Manual profiler tests should be made into layout tests

        -Moving the tests before diffing so that it's clear what changed.

        * manual-tests/inspector/profiler-test-anonymous-event-handler.html: Removed.
        * manual-tests/inspector/profiler-test-anonymous-function-called-from-different-contexts.html: Removed.
        * manual-tests/inspector/profiler-test-anonymous-function-calls-built-in-functions.html: Removed.
        * manual-tests/inspector/profiler-test-anonymous-function-calls-eval.html: Removed.
        * manual-tests/inspector/profiler-test-apply.html: Removed.
        * manual-tests/inspector/profiler-test-built-in-function-calls-anonymous.html: Removed.
        * manual-tests/inspector/profiler-test-built-in-function-calls-user-defined-function.html: Removed.
        * manual-tests/inspector/profiler-test-call-nodelist-as-function.html: Removed.
        * manual-tests/inspector/profiler-test-calling-the-function-that-started-the-profiler-from-another-scope.html: Removed.
        * manual-tests/inspector/profiler-test-compare-multiple-profiles.html: Removed.
        * manual-tests/inspector/profiler-test-constructor.html: Removed.
        * manual-tests/inspector/profiler-test-dead-time.html: Removed.
        * manual-tests/inspector/profiler-test-deep-recursion.html: Removed.
        * manual-tests/inspector/profiler-test-document-dot-write.html: Removed.
        * manual-tests/inspector/profiler-test-event-handler.html: Removed.
        * manual-tests/inspector/profiler-test-execution-context-and-eval-on-same-line.html: Removed.
        * manual-tests/inspector/profiler-test-heavy-view.html: Removed.
        * manual-tests/inspector/profiler-test-inline-event-handler.html: Removed.
        * manual-tests/inspector/profiler-test-multiple-and-different-scoped-anonymous-function-calls.html: Removed.
        * manual-tests/inspector/profiler-test-multiple-and-different-scoped-function-calls.html: Removed.
        * manual-tests/inspector/profiler-test-multiple-frames.html: Removed.
        * manual-tests/inspector/profiler-test-multiple-windows.html: Removed.
        * manual-tests/inspector/profiler-test-nested-anonymous-functon.html: Removed.
        * manual-tests/inspector/profiler-test-nested-start-and-stop-profiler.html: Removed.
        * manual-tests/inspector/profiler-test-no-execution-context.html: Removed.
        * manual-tests/inspector/profiler-test-one-execution-context.html: Removed.
        * manual-tests/inspector/profiler-test-profile-calls-in-included-file.html: Removed.
        * manual-tests/inspector/profiler-test-profiling-from-a-nested-location-but-stop-profiling-outside-the-nesting.html: Removed.
        * manual-tests/inspector/profiler-test-profiling-from-a-nested-location.html: Removed.
        * manual-tests/inspector/profiler-test-simple-event-call.html: Removed.
        * manual-tests/inspector/profiler-test-simple-no-level-change.html: Removed.
        * manual-tests/inspector/profiler-test-start-and-stop-profiler-multiple-times.html: Removed.
        * manual-tests/inspector/profiler-test-start-and-stop-profiling-in-the-same-function.html: Removed.
        * manual-tests/inspector/profiler-test-start-but-dont-stop-profiling.html: Removed.
        * manual-tests/inspector/profiler-test-stop-profiling-after-setTimeout.html: Removed.
        * manual-tests/inspector/profiler-test-stop-then-function-call.html: Removed.
        * manual-tests/inspector/profiler-test-throw-exception-from-eval.html: Removed.
        * manual-tests/inspector/profiler-test-two-execution-contexts.html: Removed.
        * manual-tests/inspector/profiler-test-user-defined-function-calls-built-in-functions.html: Removed.
        * manual-tests/inspector/profiler-test-window-dot-eval.html: Removed.
        * manual-tests/inspector/resources/other-frame.html: Removed.
        * manual-tests/inspector/resources/other-window.html: Removed.
        * manual-tests/inspector/resources/profiler-test-JS-resources.js: Removed.

2008-10-23  Adam Barth  <abarth@webkit.org>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=21826

        Add accessor for SecurityOrigin::m_domainWasSetInDOM.

        * page/SecurityOrigin.h:
        (WebCore::SecurityOrigin::domainWasSetInDOM):

2008-10-23  Darin Adler  <darin@apple.com>

        - roll out https://bugs.webkit.org/show_bug.cgi?id=21732

        * bindings/js/ScheduledAction.h:
        * inspector/InspectorController.cpp:
        ProtectedPtr<JSValue> instead of ProtectedPtr<JSValuePtr>.

2008-10-23  Simon Hausmann  <hausmann@webkit.org>

        Fix the Qt build.

        * bridge/qt/qt_runtime.cpp:
        (JSC::Bindings::QtConnectionObject::execute):
        * bridge/qt/qt_runtime.h:
        (JSC::Bindings::QtRuntimeMethod::createStructureID):

2008-10-23  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Maciej Stachowiak.

        https://bugs.webkit.org/show_bug.cgi?id=21825
        JSDOMBinding should not blindly cast the global object to JSDOMWindow

        * bindings/js/JSDOMGlobalObject.cpp:
        * bindings/js/JSDOMGlobalObject.h:
        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        Added JSDOMGlobalObject, a base class to be used by both Window and worker contexts.

        * bindings/js/JSDOMBinding.cpp:
        (WebCore::getCachedDOMStructure):
        (WebCore::cacheDOMStructure):
        (WebCore::getCachedDOMConstructor):
        (WebCore::cacheDOMConstructor):
        Cast to JSDOMGlobalObject, as DOM objects live in DOM global objects.

        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::JSDOMWindowBase):
        * bindings/js/JSDOMWindowBase.h:
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::mark):
        Moved constructor and structure tracking to JSDOMGlobalObject.

2008-10-23  Adam Barth  <abarth@webkit.org>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=21787

        Update postMessage to send origin = "null" for non-serializable
        origins to match latest spec.  Merge SecurityOrigin::toString and
        SecurityOrigin::toHTTPOrigin because they are now the same.

        Test: http/tests/security/postMessage/data-url-sends-null-origin.html

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::outgoingOrigin):
        (WebCore::FrameLoader::loadURL):
        (WebCore::FrameLoader::addHTTPOriginIfNeeded):
        (WebCore::FrameLoader::loadItem):
        * loader/loader.cpp:
        (WebCore::Loader::Host::servePendingRequests):
        * page/SecurityOrigin.cpp:
        (WebCore::SecurityOrigin::toString):
        * page/SecurityOrigin.h:
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::makeSimpleCrossSiteAccessRequest):
        (WebCore::XMLHttpRequest::makeCrossSiteAccessRequestWithPreflight):
        (WebCore::XMLHttpRequest::handleAsynchronousPreflightResult):
        (WebCore::XMLHttpRequest::didReceiveResponsePreflight):

2008-10-22  David Kilzer  <ddkilzer@apple.com>

        Bug 21781: WebCore::Settings should have a maximum decoded image size setting

        <https://bugs.webkit.org/show_bug.cgi?id=21781>

        Reviewed by Antti.

        No tests since there is no change in behavior.

        * loader/CachedImage.cpp:
        (WebCore::CachedImage::maximumDecodedImageSize): Added.  Returns
        WebCore::Settings::maximumDecodedImageSize() or 0 on error.
        (WebCore::CachedImage::data): Flag an error if the image being
        loaded is too big.
        * loader/CachedImage.h:
        (WebCore::CachedImage::maximumDecodedImageSize): Added declaration.
        * page/Settings.cpp:
        (WebCore::Settings::Settings): Initialize m_maximumDecodedImageSize
        to the maximum value of size_t.
        * page/Settings.h:
        (WebCore::Settings::setMaximumDecodedImageSize): Added method.
        (WebCore::Settings::maximumDecodedImageSize): Ditto.

2008-10-22  Mike Pinkerton  <pinkerton@chromium.org>

        Reviewed by Dan Bernstein.
        Landed and tweaked a bit by Darin Adler.

        - fix https://bugs.webkit.org/show_bug.cgi?id=21809

        Remove PLATFORM(MAC) wrapping USE(ATSUI). It's redundant and inhibits
        its use for PLATFORM(CHROMIUM) in the future.

        * platform/graphics/SimpleFontData.h:

2008-10-22  David Smith  <catfish.man@gmail.com>

        Reviewed by Anders Carlsson.

        https://bugs.webkit.org/show_bug.cgi?id=19974
        getElementsByClassName not live enough

        Test: fast/dom/getElementsByClassName/015.html

        * dom/StyledElement.cpp:
        (WebCore::StyledElement::classAttributeChanged): call dispatchSubtreeModifiedEvent()

2008-10-22  Darin Adler  <darin@apple.com>

        Reviewed by Sam Weinig.

        - fix https://bugs.webkit.org/show_bug.cgi?id=21294
          Bug 21294: Devirtualize getOwnPropertySlot()

        * bindings/js/JSDOMWindowShell.h:
        (WebCore::JSDOMWindowShell::createStructureID): Added. Returns a structure without
        HasStandardGetOwnPropertySlot since this class overrides getOwnPropertySlot.

        * bindings/js/JSInspectorCallbackWrapper.cpp:
        (WebCore::JSInspectorCallbackWrapper::wrap): Change to use a unique structure
        for this class rather than sharing nullProtoStructureID, which no longer exists.

        * bindings/js/JSNamedNodesCollection.h:
        (WebCore::JSNamedNodesCollection::createStructureID): Added. Returns a structure without
        HasStandardGetOwnPropertySlot since this class overrides getOwnPropertySlot.
        * bindings/js/JSRGBColor.h:
        (WebCore::JSRGBColor::createStructureID): Ditto.

        * bindings/scripts/CodeGeneratorJS.pm: Added createStructureID functions for the wrappers,
        constructors, and prototypes in any case where they override getOwnPropertySlot, without
        HasStandardGetOwnPropertySlot.

        * bridge/objc/objc_runtime.h:
        (JSC::Bindings::ObjcFallbackObjectImp::createStructureID): Added. Returns a structure
        without HasStandardGetOwnPropertySlot since this class overrides getOwnPropertySlot.
        * bridge/qt/qt_runtime.h:
        (JSC::Bindings::QtRuntimeMethod::createStructureID): Ditto.
        * bridge/runtime_array.h:
        (JSC::RuntimeArray::createStructureID): Ditto.
        * bridge/runtime_method.h:
        (JSC::RuntimeMethod::createStructureID): Ditto.
        * bridge/runtime_object.h:
        (JSC::RuntimeObjectImp::createStructureID): Ditto.

2008-10-22  Brent Fulgham  <bfulgham@gmail.com>

        Bring Windows Cairo Port's font handling in line with CG.
        http://bugs.webkit.org/show_bug.cgi?id=21812.

        Reviewed by Adam Roben.

        * platform/graphics/win/FontCacheWin.cpp:
        (WebCore::createGDIFont): Remove unnecessary special-case for Cairo
        TrueType font search. It should match CG in all font selections.

2008-10-22  Brent Fulgham  <bfulgham@gmail.com>

        http://bugs.webkit.org/show_bug.cgi?id=21812.
        Bring Windows Cairo Port's font handling in line with CG.

        Reviewed by David Hyatt.

        * platform/graphics/win/FontCacheWin.cpp:
        (WebCore::createGDIFont):  Remove unnecessary special-case for Cairo TrueType font search.  It should match CG in all font selections.

2008-10-22  Brady Eidson  <beidson@apple.com>

        Reviewed by Adam Roben

        <rdar://6261773> - autocomplete="off" doesn't work on Windows

        Visual Studio makes a poor decision regarding the combination of enums and bitfields, such that a
        statement like "m_autocomplete = Off" followed by "return m_autocomplete == Off" would return "false"
        instead of the much more correct "true."

        In the past we have worked around this by declaring the bitfield member as an unsigned instead
        of the enum type.

        For more discussion, see http://trac.webkit.org/changeset/25329

        * html/HTMLInputElement.h:  Work around insane Visual Studio enum issue  *sigh*

2008-10-22  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Oliver Hunt and Tim Hatcher.

        https://bugs.webkit.org/show_bug.cgi?id=19225
        Bug 19225: JSProfiler: Create automated profiler tests
        - This change exports profiles on the console object so that they can be
        iterated over via JavaScript, and thus can be used in automated tests.

        * bindings/js/JSConsoleCustom.cpp: Get the profiles and return an array
        that JS can use.
        (WebCore::JSConsole::profiles):
        * inspector/InspectorController.h: Use the new typedef.
        (WebCore::InspectorController::profiles):
        * page/Console.cpp: Keep our own array of profile objects.
        (WebCore::Console::profileEnd):
        * page/Console.h: Ditto.
        (WebCore::Console::profiles):
        * page/Console.idl: Expose the profiles to JS.

2008-10-22  David Hyatt  <hyatt@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=21775

        Convert buttons over to use the new Theme API on OS X.

        Reviewed by Adam Roben

        * platform/LengthBox.h:
        (WebCore::LengthBox::LengthBox):
        * platform/Theme.cpp:
        (WebCore::Theme::controlBorder):
        (WebCore::Theme::controlPadding):
        * platform/Theme.h:
        (WebCore::Theme::controlFont):
        (WebCore::Theme::controlSize):
        (WebCore::Theme::minControlSize):
        (WebCore::Theme::controlRequiresPreWhiteSpace):
        * platform/mac/ThemeMac.h:
        (WebCore::ThemeMac::controlRequiresPreWhiteSpace):
        * platform/mac/ThemeMac.mm:
        (WebCore::checkboxSize):
        (WebCore::radioSize):
        (WebCore::buttonSizes):
        (WebCore::buttonMargins):
        (WebCore::button):
        (WebCore::paintButton):
        (WebCore::ThemeMac::controlFont):
        (WebCore::ThemeMac::controlSize):
        (WebCore::ThemeMac::minControlSize):
        (WebCore::ThemeMac::controlBorder):
        (WebCore::ThemeMac::controlPadding):
        (WebCore::ThemeMac::inflateControlPaintRect):
        (WebCore::ThemeMac::paint):
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::adjustStyle):
        (WebCore::RenderTheme::paint):
        (WebCore::RenderTheme::controlStatesForRenderer):
        (WebCore::RenderTheme::isDefault):
        (WebCore::RenderTheme::adjustRadioStyle):
        * rendering/RenderTheme.h:
        (WebCore::RenderTheme::setRadioSize):
        * rendering/RenderThemeMac.h:
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::adjustRepaintRect):
        (WebCore::menuListButtonSizes):
        (WebCore::RenderThemeMac::adjustMenuListStyle):
        * rendering/style/RenderStyle.h:
        (WebCore::InheritedFlags::paddingBox):
        (WebCore::InheritedFlags::setPaddingBox):

2008-10-22  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Dave Hyatt

        Make sure that the AtomicString that identifies a set of animation keyframes
        stays live by keeping a copy in the WebKitCSSKeyframesRule.

        Also call styleSheetChanged() when the keyframes name changes, but
        add an internal method that doesn't call styleSheetChanged() for use
        during normal stylesheet parsing.

        Test: animations/change-keyframes-name.html

        * css/CSSGrammar.y:
        * css/WebKitCSSKeyframesRule.cpp:
        (WebCore::WebKitCSSKeyframesRule::setName):
        * css/WebKitCSSKeyframesRule.h:
        (WebCore::WebKitCSSKeyframesRule::setNameInternal):

2008-10-22  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=21791
        WebCore JS bindings should be able to use non-static hash tables for properties

        Add a map for HashTables to WebCore JS client data.

        This makes property access noticeably slower, so it is an opt-in. For classes that need to be
        supported in workers in forseeable future this is not critical.

        * bindings/js/JSDOMBinding.cpp:
        (WebCore::DOMObjectHashTableMap::get):
        (WebCore::DOMObjectHashTableMap::mapFor):
        (WebCore::getHashTableForGlobalData):
        (WebCore::DOMObjectWrapperMap::mapFor):
        WebCore client data is now a class that contains both a DOM wrapper map and a property hash
        table one.

        * bindings/js/JSDOMBinding.h: Added getHashTableForGlobalData() to query the hash table map.

        * bindings/scripts/CodeGeneratorJS.pm: If the class has a NoStaticTables attribute, use
        JSDOMBinding map to access its property hash tables.

        * dom/MessageChannel.idl:
        * dom/MessagePort.idl:
        Added NoStaticTables attribute.

2008-10-22  Gustavo Noronha Silva  <gns@gnome.org>

        Reviewed by Timothy Hatcher.

        Build failure because of missing include
        https://bugs.webkit.org/show_bug.cgi?id=21765

        Build failure fix for WebKit/GTK+; added missing
        include (GOwnPtr.h)

        * platform/graphics/gtk/MediaPlayerPrivateGStreamer.cpp:

2008-10-22  Alp Toker  <alp@nuanti.com>

        Reviewed by Adam Roben.

        Fix crashes on older GTK+ versions (2.8). gtk_widget_style_get()
        doesn't initialize values if the requested property doesn't exist, so
        initialize the values to the documented defaults before calling it
        where necessary. Additionally, avoid critical warnings by not calling
        gtk_widget_style_get() when we know the property isn't available.

        Note that this is an imported source file which doesn't follow the
        WebKit coding style.

        * platform/gtk/gtk2drawing.c:
        (moz_gtk_init):
        (moz_gtk_button_get_inner_border):
        (moz_gtk_combo_box_paint):
        (moz_gtk_toolbar_separator_paint):
        (moz_gtk_menu_separator_paint):
        (moz_gtk_get_widget_border):
        (moz_gtk_get_tab_scroll_arrow_size):
        (moz_gtk_get_toolbar_separator_width):
        (moz_gtk_get_menu_separator_height):

2008-10-22  Alp Toker  <alp@nuanti.com>

        Fix build for Cairo 1.2.

        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::clipOut):
        * platform/gtk/RenderThemeGtk.cpp:
        (WebCore::paintMozWidget):

2008-10-22  Darin Fisher  <darin@chromium.org>

        Reviewed by Eric Seidel.

        A little more PLATFORM(CHROMIUM) in WebCore
        https://bugs.webkit.org/show_bug.cgi?id=21758

        * page/AccessibilityObject.h:
        * platform/graphics/Icon.h:

2008-10-21  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin Adler.

        Test: fast/events/message-channel-gc-3.html

        https://bugs.webkit.org/show_bug.cgi?id=21769
        MessagePort should be GC protected if there are messages to be delivered

        * dom/MessagePort.h: Removed pending activity count. Now we track if a close event is
        pending, and check if the queue is non-empty.
        (WebCore::MessagePort::workerContext): Added a stub implementation for a cross-heap GC bug
        fix (below).

        * dom/MessagePort.cpp:
        (WebCore::CloseMessagePortTimer::fired):
        (WebCore::MessagePort::MessagePort):
        (WebCore::MessagePort::queueCloseEvent):
        (WebCore::MessagePort::dispatchCloseEvent):
        (WebCore::MessagePort::hasPendingActivity):
        Track message and close event activity separately.

        * bindings/js/JSDOMBinding.cpp:
        (WebCore::markCrossHeapDependentObjectsForDocument): Fixed a bug in cross-heap GC that was
        causing same-heap ports to never be deleted.

2008-10-21  Dan Bernstein  <mitz@apple.com>

        Reviewed by Sam Weinig.

        - remove unreachable code

        * platform/text/BidiResolver.h:
        (WebCore::::embed):

2008-10-21  Beth Dakin  <bdakin@apple.com>

        Reviewed by Darin Adler.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=20352
        REGRESSION(r31030-31055): Choosing "Print window" from frame set
        prints blank page
        and corresponding: <rdar://problem/6142398>

        viewHeight() and viewWidth() only return valuable information if we
        are not printing. Everywhere else in the code, we make sure we are
        not printing before we call these functions. Adding a check for
        printing here fixes this bug, and framesets print again.

        * rendering/RenderFrameSet.cpp:
        (WebCore::RenderFrameSet::layout):

2008-10-21  Yael Aharon <yael.aharon@nokia.com>

        Reviewed by Simon.

        Pixmap in canvas tag was not getting initialized.

        See https://bugs.webkit.org/show_bug.cgi?id=21771

        * platform/graphics/qt/ImageBufferQt.cpp:
        (WebCore::ImageBuffer::create):

2008-10-20  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein

        Add a comment explaining layoutDelta(), and an assertion
        that checks that delta changes were correctly paired during layout.

        * rendering/RenderView.cpp:
        (WebCore::RenderView::layout):
        * rendering/RenderView.h:

2008-10-20  Timothy Hatcher  <timothy@apple.com>

        Make auto-complete only suggest properties that are valid syntax
        when using dot-notation. Also when completing numeric properties,
        the quotes are omitted inside the brackets.

        https://bugs.webkit.org/show_bug.cgi?id=21760
        https://bugs.webkit.org/show_bug.cgi?id=21761

        Reviewed by Oliver Hunt.

        * inspector/front-end/Console.js:
        (WebInspector.Console.prototype.completions): Skip properties that
        are not valid identifies when using dot-notation. And omit the quotes
        when completing numbers in bracket-notation.

2008-10-20  Timothy Hatcher  <timothy@apple.com>

        Fixes the Profiles panel in the Web Inspector, which was broken by
        the JSValue base-class changes. Also renames some functions and
        variables in JavaScriptProfileNode.cpp that where title case.

        https://bugs.webkit.org/show_bug.cgi?id=21764

        Reviewed by Oliver Hunt.

        * inspector/JavaScriptProfile.cpp:
        (WebCore::toJS): Use a JSObject pointer instead of JSValuePtr so the
        returned JSValuePtr will be treated as an object and not a value.
        * inspector/JavaScriptProfileNode.cpp:
        (WebCore::toJS): Ditto.

2008-10-20  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Remove FrameLoaderClient::detachedFromParent4.  It is no longer used by any port.

        * loader/EmptyClients.h:
        (WebCore::EmptyFrameLoaderClient::detachedFromParent4):.
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::detachFromParent):
        * loader/FrameLoaderClient.h:

2008-10-20  Antti Koivisto  <antti@apple.com>

        Reviewed by Adele Peterson.

        Fix https://bugs.webkit.org/show_bug.cgi?id=21763
        REGRESSION (r36108-r36113): Can't load picture content on wired.com galleries
        <rdar://problem/6285025

        If we get 304 response we need to explicitly check if that completes the frame load.

        No test case, simulating the condition is pretty difficult.

        * loader/loader.cpp:
        (WebCore::Loader::Host::didReceiveResponse):

2008-10-20  Anders Carlsson  <andersca@apple.com>

        Reviewed by Mark Rowe.

        Work around <rdar://problem/6301728>.

        Don't assert that loads are deferred when we're using CFNetwork on Mac or Windows.

        * loader/MainResourceLoader.cpp:
        (WebCore::MainResourceLoader::didReceiveResponse):
        (WebCore::MainResourceLoader::didReceiveData):
        (WebCore::MainResourceLoader::didFinishLoading):
        (WebCore::MainResourceLoader::didFail):

2008-10-20  Beth Dakin  <bdakin@apple.com>

        Reviewed by Adele Peterson.

        Speculative fix for <rdar://problem/6242585> CrashTracer: [USER] 19
        crashes in Safari at com.apple.WebCore
        WebCore::ScrollView::visibleContentRect const + 153

        d->m_view can be null and is null-checked at other points in the
        code. The logs indicate that this crash occurs when closing a
        window containing a PDF, so in case where we crash, the PDF's view
        is probably already null. So the fix is to simply add a null-check.

        * page/Frame.cpp:
        (WebCore::Frame::selectionRect):

2008-10-20  Adele Peterson  <adele@apple.com>

        Reviewed by Darin Adler.

        * html/HTMLFormElement.cpp: (WebCore::HTMLFormElement::formData):
        Removed stray increment that would screw up any form with multiple files in it.

2008-10-20  Sam Weinig  <sam@webkit.org>

        Rubber-stamped by David Hyatt.

        Split LengthBox and LengthSize into their own files.

        * GNUmakefile.am:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/Length.h:
        (WebCore::Length::blend):
        * platform/LengthBox.h: Copied from platform/Length.h.
        (WebCore::LengthBox::LengthBox):
        (WebCore::LengthBox::nonZero):
        * platform/LengthSize.h: Copied from platform/Length.h.
        (WebCore::LengthSize::LengthSize):
        (WebCore::LengthSize::setWidth):
        (WebCore::LengthSize::setHeight):
        (WebCore::LengthSize::height):
        * platform/Theme.h:
        * rendering/style/FillLayer.h:
        * rendering/style/NinePieceImage.h:
        (WebCore::NinePieceImage::NinePieceImage):
        * rendering/style/RenderStyle.h:
        * rendering/style/StyleDashboardRegion.h:
        * rendering/style/StyleSurroundData.h:
        * rendering/style/StyleVisualData.h:

2008-10-20  Dan Bernstein  <mitz@apple.com>

        - Mac build fix

        * WebCore.xcodeproj/project.pbxproj:

2008-10-20  Alp Toker  <alp@nuanti.com>

        Fix autotools dist build target by listing recently added header
        files only. Not reviewed.

        * GNUmakefile.am:

2008-10-20  David Hyatt  <hyatt@apple.com>

        Clean up some USE(NEW_THEME) ifdefs (I botched one of them and have broken non-Mac platforms).  Also
        refactor some of the code that I put in ThemeMac to be cross-platform, since it was in RenderTheme.cpp
        originally.

        ifdef some methods in RenderTheme.cpp also that are no longer needed with the new Theme.

        Reviewed by Adam Roben

        * WebCore.xcodeproj/project.pbxproj:
        * platform/Theme.cpp: Added.
        (WebCore::Theme::controlSupportsBorder):
        (WebCore::Theme::controlSupportsPadding):
        * platform/Theme.h:
        * platform/mac/ThemeMac.h:
        * platform/mac/ThemeMac.mm:
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::adjustStyle):
        * rendering/RenderTheme.h:

2008-10-20  David Hyatt  <hyatt@apple.com>

        Rename LengthBox's members to have m_ in front of them.

        Reviewed by Sam Weinig

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::valueForNinePieceImage):
        (WebCore::getPositionOffsetValue):
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::mapNinePieceImage):
        * platform/Length.h:
        (WebCore::LengthBox::LengthBox):
        (WebCore::LengthBox::left):
        (WebCore::LengthBox::right):
        (WebCore::LengthBox::top):
        (WebCore::LengthBox::bottom):
        (WebCore::LengthBox::operator==):
        (WebCore::LengthBox::nonZero):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::paintNinePieceImage):
        (WebCore::RenderObject::addDashboardRegions):
        * rendering/style/RenderStyle.cpp:
        (WebCore::positionedObjectMoved):
        (WebCore::RenderStyle::setClip):
        (WebCore::RenderStyle::noneDashboardRegions):
        * rendering/style/RenderStyle.h:
        (WebCore::InheritedFlags::left):
        (WebCore::InheritedFlags::right):
        (WebCore::InheritedFlags::top):
        (WebCore::InheritedFlags::bottom):
        (WebCore::InheritedFlags::clipLeft):
        (WebCore::InheritedFlags::clipRight):
        (WebCore::InheritedFlags::clipTop):
        (WebCore::InheritedFlags::clipBottom):
        (WebCore::InheritedFlags::marginTop):
        (WebCore::InheritedFlags::marginBottom):
        (WebCore::InheritedFlags::marginLeft):
        (WebCore::InheritedFlags::marginRight):
        (WebCore::InheritedFlags::paddingTop):
        (WebCore::InheritedFlags::paddingBottom):
        (WebCore::InheritedFlags::paddingLeft):
        (WebCore::InheritedFlags::paddingRight):
        (WebCore::InheritedFlags::setLeft):
        (WebCore::InheritedFlags::setRight):
        (WebCore::InheritedFlags::setTop):
        (WebCore::InheritedFlags::setBottom):
        (WebCore::InheritedFlags::setDashboardRegion):
        (WebCore::InheritedFlags::setClipLeft):
        (WebCore::InheritedFlags::setClipRight):
        (WebCore::InheritedFlags::setClipTop):
        (WebCore::InheritedFlags::setClipBottom):
        (WebCore::InheritedFlags::setMarginTop):
        (WebCore::InheritedFlags::setMarginBottom):
        (WebCore::InheritedFlags::setMarginLeft):
        (WebCore::InheritedFlags::setMarginRight):
        (WebCore::InheritedFlags::setPaddingTop):
        (WebCore::InheritedFlags::setPaddingBottom):
        (WebCore::InheritedFlags::setPaddingLeft):
        (WebCore::InheritedFlags::setPaddingRight):

2008-10-20  Timothy Hatcher  <timothy@apple.com>

        Make the Resource panel perform graph updates atomically, so when resources
        are added the graph and summary graph update at the same time.

        https://bugs.webkit.org/show_bug.cgi?id=21755

        Reviewed by Kevin McCullough.

        * inspector/front-end/Resource.js:
        (WebInspector.Resource.prototype.get startTime): Return -1 if the _startTime
        property is undefined, null or 0. This allows callers to check for -1 and not
        the other values when there is no startTime yet.
        (WebInspector.Resource.prototype.get responseReceivedTime): Ditto.
        (WebInspector.Resource.prototype.get endTime): Ditto.
        (WebInspector.Resource.prototype.get duration): Remove an extra empty line.
        (WebInspector.Resource.prototype.get latency): Ditto.
        (WebInspector.Resource.prototype.get contentLength): Return 0 if the _duration
        property is undefined or null. This allows callers to always assume a number.
        (WebInspector.Resource.prototype.get expectedContentLength): Ditto.
        (WebInspector.Resource.prototype.get errors): Simplify the case where there is
        no _errors property yet.
        (WebInspector.Resource.prototype.set errors): Remove the check if the new value
        if the same as the previous value, since there is no work to guard.
        (WebInspector.Resource.prototype.get warnings): Simplify the case where there is
        no _warnings property yet.
        (WebInspector.Resource.prototype.set warnings): Remove the check if the new value
        if the same as the previous value, since there is no work to guard.
        (WebInspector.Resource.CompareByResponseReceivedTime): Add cases for when the
        responseReceivedTime is -1.
        (WebInspector.Resource.CompareByEndTime): Add cases for when the endTime is -1.
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourcesPanel.prototype.get searchableViews): If a resource does not
        have a _resourcesTreeElement yet, exclude it from the searchable views.
        (WebInspector.ResourcesPanel.prototype.set calculator): Set _staleResource to _resources
        and call refresh to refresh the entire graph.
        (WebInspector.ResourcesPanel.prototype.set needsRefresh): Set a timeout if the panel
        is visible that calls refresh.
        (WebInspector.ResourcesPanel.prototype.refresh): Create the resource tree element and
        graph for a resource if it hasn't been created yet. If the boundaries changed during
        the first stale resource pass, do a full pass of all resources when updating the graphs.
        (WebInspector.ResourcesPanel.prototype.reset): Remove the legend items.
        (WebInspector.ResourcesPanel.prototype.addResource): Don't create the tree element and
        graph, these are now created during the first refresh.
        (WebInspector.ResourcesPanel.prototype.removeResource): Null check _resourcesTreeElement.
        (WebInspector.ResourcesPanel.prototype.addMessageToResource): Ditto.
        (WebInspector.ResourcesPanel.prototype.clearMessages): Ditto.
        (WebInspector.ResourcesPanel.prototype.refreshResource): Remove most of the work, just
        add the resource to the _staleResources and set needsRefresh.
        (WebInspector.ResourcesPanel.prototype.recreateViewForResourceIfNeeded): Null check
        _resourcesTreeElement.
        (WebInspector.ResourcesPanel.prototype._sortResourcesIfNeeded): Remove code to clear
        the timeout used by the deleted _sortResourcesSoonIfNeeded. Remove call to removeChild
        since the insertBefore call will do it if needed.
        (WebInspector.ResourcesPanel.prototype._updateGraphDividersIfNeeded): Remove code to
        clear the timeout used by the deleted _updateGraphDividersSoonIfNeeded.
        (WebInspector.ResourcesPanel.prototype._updateSummaryGraph): Remove code to clear the
        timeout used by the deleted _updateSummaryGraphSoon. No need to remove the totalLegendLabel,
        since all the legend items are removed in one pass right before.
        (WebInspector.ResourcesPanel.prototype._changeSortingFunction): Set the sortingFunction
        before the calculator so the correct sortingFunction is there when a refresh happens.
        (WebInspector.ResourceTimeCalculator.prototype.computeBarGraphPercentages): Set start to 0
        when the startTime is -1, since that looks best visually. Also set middle and end
        to the start and middle (respectfully) when startAtZero. This looks best visually.
        (WebInspector.ResourceGraph): Start the graph as hidden until the first refresh.
        (WebInspector.ResourceGraph.prototype.refresh): Remove the hidden class.

2008-10-20  David Hyatt  <hyatt@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=21733

        Make sure that the haveMetadata flag is set to true for generated images from image buffers, so that
        no attempt is made to re-cache the frame from a non-existent image source.

        Reviewed by Sam Weinig

        * platform/graphics/cairo/ImageCairo.cpp:
        (WebCore::BitmapImage::BitmapImage):
        * platform/graphics/cg/ImageCG.cpp:
        (WebCore::BitmapImage::BitmapImage):

2008-10-20  Dan Bernstein  <mitz@apple.com>

        Reviewed by John Sullivan.

        - make hasARenderedDescendant() have internal linkage

        * editing/CompositeEditCommand.cpp:
        (WebCore::hasARenderedDescendant):

2008-10-20  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Jon Honeycutt

        Fix a crash in Accessibility where a table section was being
        referenced without first checking if it was null

        https://bugs.webkit.org/show_bug.cgi?id=21721

        Test: accessibility/table-nofirstbody.html

        * page/AccessibilityTable.cpp:
        (WebCore::AccessibilityTable::addChildren):

2008-10-20  David Hyatt  <hyatt@apple.com>

        Avoid some stderr spew from CG by checking if we have a decoder yet in ImageSourceCG.

        Reviewed by Darin Adler

        * platform/graphics/cg/ImageSourceCG.cpp:
        (WebCore::ImageSource::repetitionCount):
        (WebCore::ImageSource::frameDurationAtIndex):

2008-10-20  Alp Toker  <alp@nuanti.com>

        Reviewed by Mark Rowe.

        Fix the pthread conditionals in the FTP code to correctly define
        threadsafe *_r functions on Windows. Partly fixes the GTK+/Win32
        build.

        * loader/FTPDirectoryDocument.cpp:
        * loader/FTPDirectoryParser.cpp:

2008-10-20  David Hyatt  <hyatt@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=21751

        Convert checkboxes and radio buttons on OS X over to the new Theme API.

        Reviewed by Adam Roben

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::mapFillSize):
        * platform/Length.h:
        (WebCore::LengthSize::LengthSize):
        (WebCore::LengthSize::operator==):
        (WebCore::LengthSize::width):
        (WebCore::LengthSize::height):
        (WebCore::LengthSize::setWidth):
        (WebCore::LengthSize::setHeight):
        * platform/Theme.h:
        (WebCore::Theme::controlSize):
        (WebCore::Theme::controlSupportsBorder):
        (WebCore::Theme::controlSupportsPadding):
        (WebCore::Theme::paint):
        (WebCore::Theme::inflateControlPaintRect):
        * platform/ThemeTypes.h:
        (WebCore::):
        * platform/mac/ThemeMac.h:
        * platform/mac/ThemeMac.mm:
        (WebCore::):
        (WebCore::controlSizeForFont):
        (WebCore::sizeFromFont):
        (WebCore::setControlSize):
        (WebCore::updateStates):
        (WebCore::inflateRect):
        (WebCore::checkboxSizes):
        (WebCore::checkboxMargins):
        (WebCore::checkboxSize):
        (WebCore::checkbox):
        (WebCore::paintCheckbox):
        (WebCore::radioSizes):
        (WebCore::radioMargins):
        (WebCore::radioSize):
        (WebCore::radio):
        (WebCore::paintRadio):
        (WebCore::ThemeMac::baselinePositionAdjustment):
        (WebCore::ThemeMac::controlSize):
        (WebCore::ThemeMac::controlSupportsBorder):
        (WebCore::ThemeMac::controlSupportsPadding):
        (WebCore::ThemeMac::inflateControlPaintRect):
        (WebCore::ThemeMac::paint):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::calculateBackgroundSize):
        * rendering/RenderObject.cpp:
        (WebCore::mustRepaintFillLayers):
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::adjustStyle):
        (WebCore::RenderTheme::paint):
        (WebCore::RenderTheme::baselinePosition):
        (WebCore::RenderTheme::adjustRepaintRect):
        (WebCore::RenderTheme::controlStatesForRenderer):
        (WebCore::RenderTheme::isFocused):
        * rendering/RenderTheme.h:
        * rendering/RenderThemeMac.h:
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::adjustRepaintRect):
        * rendering/style/FillLayer.cpp:
        (WebCore::FillLayer::operator==):

2008-10-18  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Darin Adler.

        Fixed https://bugs.webkit.org/show_bug.cgi?id=21735
        Emit profiling instrumentation only if the Web Inspector's profiling
        feature is enabled

        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::supportsProfiling):
        * bindings/js/JSDOMWindowBase.h: Implemented the interface for specifying
        whether a target global object has the Web Inspector's profiling feature
        enabled.

        * inspector/JavaScriptDebugServer.cpp:
        (WebCore::JavaScriptDebugServer::recompileAllJSFunctionsSoon):
        (WebCore::JavaScriptDebugServer::didAddListener):
        (WebCore::JavaScriptDebugServer::didRemoveListener):
        * inspector/JavaScriptDebugServer.h: Exported an API for recompiling,
        used by the Settings object.

        * page/Settings.cpp:
        (WebCore::Settings::Settings):
        (WebCore::Settings::setDeveloperExtrasEnabled):
        * page/Settings.h: Recompile when the developer menu is enabled/disabled
        for the first time, to add/remove profiling hooks. In the future, with
        better Web Inspector UI, we can do this on a page-by-page basis,
        instead of a global basis.

2008-10-20  David Hyatt  <hyatt@apple.com>

        Move Length to platform/.

        Reviewed by Adam Roben

        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * platform/Length.cpp: Copied from rendering/Length.cpp.
        * platform/Length.h: Copied from rendering/Length.h.

2008-10-20  Darin Adler  <darin@apple.com>

        - try to fix Qt build

        * bridge/qt/qt_runtime.cpp:
        (JSC::Bindings::QtRuntimeMetaMethod::connectGetter): Add asObject calls.
        (JSC::Bindings::QtRuntimeMetaMethod::disconnectGetter): Ditto.

2008-10-20  Darin Adler  <darin@apple.com>

        - try to fix Qt build

        * bridge/qt/qt_instance.cpp:
        (JSC::Bindings::QtInstance::mark): Use JSValue* instead of JSValuePtr.
        (JSC::Bindings::QtField::valueFromInstance): Ditto.
        * bridge/qt/qt_instance.h: Ditto.

2008-10-20  Darin Adler  <darin@apple.com>

        - try to fix Tiger build

        * bridge/objc/objc_instance.mm:
        (ObjcInstance::invokeMethod): Add a const_cast to remove the unwanted
        volatile qualifier.
        (ObjcInstance::invokeDefaultMethod): Ditto.
        (ObjcInstance::getValueOfUndefinedField): Ditto.
        * bridge/objc/objc_runtime.mm:
        (JSC::Bindings::ObjcField::valueFromInstance): Ditto.

2008-10-20  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=21750
        Eliminate the notion of "temporary events"

        We mark some events as temporary when dispatching, for the sole reason of
        manually calling forgetDOMObject when done dispatching.

        There doesn't seem to be any reason to call it manually, as JSEvent destructor
        will do this automatically right away.

        * bindings/js/ScriptController.cpp:
        * bindings/js/ScriptController.h:
        Removed ScriptController::finishedWithEvent(), which was called after dispatching
        a temporary event.

        * dom/ContainerNode.cpp:
        (WebCore::dispatchChildInsertionEvents):
        (WebCore::dispatchChildRemovalEvents):
        * dom/EventTarget.h:
        * dom/EventTargetNode.cpp:
        (WebCore::EventTargetNode::dispatchEvent):
        (WebCore::EventTargetNode::dispatchGenericEvent):
        (WebCore::EventTargetNode::dispatchSubtreeModifiedEvent):
        (WebCore::EventTargetNode::dispatchWindowEvent):
        (WebCore::EventTargetNode::dispatchUIEvent):
        (WebCore::EventTargetNode::dispatchKeyEvent):
        (WebCore::EventTargetNode::dispatchMouseEvent):
        (WebCore::EventTargetNode::dispatchWheelEvent):
        (WebCore::EventTargetNode::dispatchWebKitAnimationEvent):
        (WebCore::EventTargetNode::dispatchWebKitTransitionEvent):
        (WebCore::EventTargetNode::dispatchEventForType):
        (WebCore::EventTargetNode::dispatchProgressEvent):
        (WebCore::EventTargetNode::dispatchStorageEvent):
        * dom/EventTargetNode.h:
        * dom/MessagePort.cpp:
        (WebCore::MessagePort::dispatchMessages):
        (WebCore::MessagePort::dispatchCloseEvent):
        (WebCore::MessagePort::dispatchEvent):
        * dom/MessagePort.h:
        * editing/Editor.cpp:
        (WebCore::Editor::dispatchCPPEvent):
        (WebCore::dispatchEditableContentChangedEvents):
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplacementFragment::ReplacementFragment):
        * editing/TypingCommand.cpp:
        (WebCore::TypingCommand::insertText):
        * loader/appcache/DOMApplicationCache.cpp:
        (WebCore::DOMApplicationCache::dispatchEvent):
        (WebCore::DOMApplicationCache::callListener):
        * loader/appcache/DOMApplicationCache.h:
        * page/EventHandler.cpp:
        (WebCore::EventHandler::dispatchDragEvent):
        (WebCore::EventHandler::keyEvent):
        (WebCore::EventHandler::handleTextInputEvent):
        * page/FrameView.cpp:
        (WebCore::FrameView::scheduleEvent):
        (WebCore::FrameView::updateOverflowStatus):
        (WebCore::FrameView::dispatchScheduledEvents):
        * page/FrameView.h:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::scrollToOffset):
        (WebCore::RenderLayer::updateOverflowStatus):
        * svg/SVGElement.cpp:
        (WebCore::SVGElement::sendSVGLoadEventIfPossible):
        * svg/SVGElementInstance.cpp:
        (WebCore::SVGElementInstance::dispatchEvent):
        * svg/SVGElementInstance.h:
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::dispatchEvent):
        (WebCore::XMLHttpRequest::dispatchReadyStateChangeEvent):
        (WebCore::XMLHttpRequest::dispatchXMLHttpRequestProgressEvent):
        * xml/XMLHttpRequest.h:
        * xml/XMLHttpRequestUpload.cpp:
        (WebCore::XMLHttpRequestUpload::dispatchEvent):
        (WebCore::XMLHttpRequestUpload::dispatchXMLHttpRequestProgressEvent):
        * xml/XMLHttpRequestUpload.h:
        Don't pass the tempEvent boolean around.

2008-10-20  Alp Toker  <alp@nuanti.com>

        Remove unused includes only. Partial GTK+/Win build fix.

        * platform/graphics/gtk/SimpleFontDataPango.cpp:

2008-10-20  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Oliver Hunt.

        https://bugs.webkit.org/show_bug.cgi?id=21705
        Implement Web Workers client-side API

        The implementation is experimental, and disabled by default. It doesn't quite match the
        published draft, being influenced by further WHATWG discussions.

        This only implements the client-side API, and does not actually create any threads or
        global contexts yet.

        * DerivedSources.make: Added DedicatedWorker. SharedWorker is not implemented yet, as I'm
        still not sure if having separate classes for these helps at all.

        * WebCore.xcodeproj/project.pbxproj: Added new files.

        * bindings/js/JSDOMWindowBase.cpp:
        (jsDOMWindowBaseWorker):
        (WebCore::JSDOMWindowBase::put):
        (setJSDOMWindowBaseWorker):
        Added window.Worker constructor. Moved JSXSLTProcessorConstructor.h include out of ifdef
        to match prevailing style.

        * bindings/js/JSDedicatedWorkerConstructor.cpp: Added.
        * bindings/js/JSDedicatedWorkerConstructor.h: Added.
        * bindings/js/JSDedicatedWorkerCustom.cpp: Added.
        The implementation of event listeners are left custom intentionally, for easier implementation
        of listeners that are not tied to any Document in the future.

        * dom/DedicatedWorker.cpp: Added.
        * dom/DedicatedWorker.h: Added.
        * dom/DedicatedWorker.idl: Added.
        Added an implementation that can only load requested scripts for now.

2008-10-19  Darin Adler  <darin@apple.com>

        Reviewed by Dan Bernstein.

        - fix assertion seen when opening inspector

        * bindings/js/JSQuarantinedObjectWrapper.cpp:
        (WebCore::JSQuarantinedObjectWrapper::getOwnPropertySlot):
        Removed unneeded asObject cast.

2008-10-19  Dan Bernstein  <mitz@apple.com>

        Rubber-stamped by Timothy Hatcher.

        - remove empty directories and correct the MIME type of inspector images

        * page/inspector: Removed.
        * page/inspector/Images: Removed.

2008-10-19  Timothy Hatcher  <timothy@apple.com>

        Make the Web Inspector Resources panel open quicker and change graphs
        faster. There was some accidental n^2 logic at fault when updating the
        graph boundaries.

        https://bugs.webkit.org/show_bug.cgi?id=21742

        Reviewed by Darin Adler.

        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourcesPanel.prototype.set calculator): Return early for
        a null calculator. Remove the second argument passed to _refreshAllResources.
        (WebInspector.ResourcesPanel.prototype.refresh): Call updateBoundaries on
        the calculator for all the stale resources before calling refreshResource.
        Pass true for the first argument of refreshResource to skip the boundary update.
        (WebInspector.ResourcesPanel.prototype._updateGraphBoundariesIfNeeded): Remove
        the second argument passed to _refreshAllResources.
        (WebInspector.ResourcesPanel.prototype._refreshAllResourcesSoon): Remove the
        skipSort argument since every passed true, and it would be bad to pass false.
        (WebInspector.ResourcesPanel.prototype._refreshAllResources): Ditto. And if
        skipBoundaryUpdate is false, call updateBoundaries on the calculator for all
        the resources before calling refreshResource. Pass true for the first argument
        of refreshResource to skip the boundary update.

2008-10-19  Timothy Hatcher  <timothy@apple.com>

        Visually distinguish resources that loaded from the memory cache.

        https://bugs.webkit.org/show_bug.cgi?id=14279

        Reviewed by Dan Bernstein.

        * English.lproj/localizedStrings.js: New string.
        * inspector/front-end/Images/timelineHollowPillBlue.png: Added.
        * inspector/front-end/Images/timelineHollowPillGray.png: Added.
        * inspector/front-end/Images/timelineHollowPillGreen.png: Added.
        * inspector/front-end/Images/timelineHollowPillOrange.png: Added.
        * inspector/front-end/Images/timelineHollowPillPurple.png: Added.
        * inspector/front-end/Images/timelineHollowPillRed.png: Added.
        * inspector/front-end/Images/timelineHollowPillYellow.png: Added.
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourceCalculator.prototype.computeBarGraphLabels):
        Add the "(from cache)" suffix to the tooltip.
        (WebInspector.ResourceTimeCalculator.prototype.computeBarGraphLabels):
        Add the "(from cache)" suffix to the tooltip.
        (WebInspector.ResourceGraph): Add the "resource-cached" class.
        * inspector/front-end/inspector.css: New styles to make the timeline
        bars use the hollow pill images.

2008-10-19  Timothy Hatcher  <timothy@apple.com>

        Update the scroll position in the Resources panel when loading
        a new page or toggling on small resource rows.

        https://bugs.webkit.org/show_bug.cgi?id=20114

        Reviewed by Darin Adler.

        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourcesPanel.prototype.reset): Scroll to the top,
        since all the resource are being removed.
        (WebInspector.ResourcesPanel.prototype.removeResource): Call
        _adjustScrollPosition in case the view is shorter and needs scrolled.
        (WebInspector.ResourcesPanel.prototype._toggleLargerResources): Ditto.
        (WebInspector.ResourcesPanel.prototype._adjustScrollPosition): Check
        the height of the sidebar against the scrollTop and height of the
        resourcesContainerElement. If the sidebar is shorter, scroll up
        so the last resource is at the bottom again.

2008-10-19  Timothy Hatcher  <timothy@apple.com>

        Show per resource times and sizes when hovering over the bar graph for a resource.

        https://bugs.webkit.org/show_bug.cgi?id=14300
        rdar://problem/5712802

        Reviewed by Cameron Zwarich.

        * English.lproj/localizedStrings.js: Add new strings.
        * inspector/front-end/Images/graphLabelCalloutLeft.png: Added.
        * inspector/front-end/Images/graphLabelCalloutRight.png: Added.
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourcesPanel.prototype.refreshResource): Pass the calculator to the
        ResourceGraph.refresh function.
        (WebInspector.ResourceCalculator.prototype.computeBarGraphLabels): Default implementation
        returns the formatted value.
        (WebInspector.ResourceTimeCalculator.prototype.computeBarGraphLabels): Return discrete values
        for the latency and download times. Also generate a custom tooltip.
        (WebInspector.ResourceGraph): Add a mouseover event listener that calls refreshLabelPositions.
        (WebInspector.ResourceGraph.prototype.refreshLabelPositions): Added. Updates the label positions
        in case the bar has changed size.
        (WebInspector.ResourceGraph.prototype.refresh): Set the label text and tooltips.
        * inspector/front-end/inspector.css: New styles for the labels.

2008-10-19  Darin Adler  <darin@apple.com>

        Reviewed by Oliver Hunt.

        - next step of https://bugs.webkit.org/show_bug.cgi?id=21732
          improve performance by eliminating JSValue as a base class for JSCell

        Remove most uses of JSValue, which will be removed in a future patch.

        * bindings/js/JSCustomXPathNSResolver.h: Removed declaration of JSValue
        and used JSValuePtr instead.
        * bindings/js/JSEventTarget.h: Ditto.
        * bindings/js/JSNodeFilterCondition.h: Ditto.
        * bindings/js/ScheduledAction.h: Ditto.
        * bindings/js/ScriptController.h: Ditto.
        * bindings/objc/WebScriptObjectPrivate.h: Ditto.
        * bridge/c/c_utility.h: Ditto.
        * bridge/jni/jni_jsobject.h: Ditto.
        * bridge/jni/jni_utility.h: Ditto.
        * bridge/objc/WebScriptObject.h: Ditto.
        * dom/Traversal.h: Ditto.
        * inspector/InspectorController.cpp: Ditto.
        * inspector/JavaScriptProfile.h: Ditto.
        * inspector/JavaScriptProfileNode.h: Ditto.
        * loader/FrameLoader.h: Ditto.
        * page/Console.h: Ditto.
        * plugins/MimeTypeArray.h: Ditto.
        * plugins/Plugin.h: Ditto.
        * plugins/PluginArray.h: Ditto.
        * plugins/PluginView.cpp:
        (WebCore::getString): Ditto.
        (WebCore::PluginView::performRequest): Ditto.
        * plugins/gtk/PluginViewGtk.cpp: Ditto.
        * plugins/qt/PluginViewQt.cpp: Ditto.
        * plugins/win/PluginViewWin.cpp: Ditto.

        * bridge/qt/qt_class.cpp:
        (JSC::Bindings::QtClass::fallbackObject): Use JSValuePtr and JSObject*
        instead of JSValue*.
        * bridge/qt/qt_class.h: Ditto.
        * bridge/qt/qt_instance.cpp:
        (JSC::Bindings::QtInstance::mark): Ditto.
        (JSC::Bindings::QtInstance::invokeMethod): Ditto.
        (JSC::Bindings::QtInstance::defaultValue): Ditto.
        (JSC::Bindings::QtInstance::stringValue): Ditto.
        (JSC::Bindings::QtInstance::numberValue): Ditto.
        (JSC::Bindings::QtInstance::booleanValue): Ditto.
        (JSC::Bindings::QtInstance::valueOf): Ditto.
        (JSC::Bindings::QtField::valueFromInstance): Ditto.
        (JSC::Bindings::QtField::setValueToInstance): Ditto.
        * bridge/qt/qt_instance.h: Ditto.
        * bridge/qt/qt_runtime.cpp: Ditto.
        (JSC::Bindings::valueRealType): Ditto.
        (JSC::Bindings::convertValueToQVariant): Ditto.
        (JSC::Bindings::convertQVariantToValue): Ditto.
        (JSC::Bindings::findMethodIndex): Ditto.
        (JSC::Bindings::QtRuntimeMetaMethod::call): Ditto.
        (JSC::Bindings::QtRuntimeMetaMethod::lengthGetter): Ditto.
        (JSC::Bindings::QtRuntimeMetaMethod::connectGetter): Ditto.
        (JSC::Bindings::QtRuntimeMetaMethod::disconnectGetter): Ditto.
        (JSC::Bindings::QtRuntimeConnectionMethod::call): Ditto.
        (JSC::Bindings::QtRuntimeConnectionMethod::lengthGetter): Ditto.
        (JSC::Bindings::QtArray::setValueAt): Ditto.
        (JSC::Bindings::QtArray::valueAt): Ditto.
        * bridge/qt/qt_runtime.h: Ditto.

        * bridge/testqtbindings.cpp:
        (main): Use JSValuePtr.

2008-10-18  Darin Adler  <darin@apple.com>

        Reviewed by Oliver Hunt.

        - next step of https://bugs.webkit.org/show_bug.cgi?id=21732
          improve performance by eliminating JSValue as a base class for JSCell

        Tweak a little more to get closer to where we can make JSValuePtr a class.

        * bindings/js/JSAudioConstructor.cpp:
        (WebCore::JSAudioConstructor::JSAudioConstructor): Use asObject.
        (WebCore::constructAudio): Ditto.
        * bindings/js/JSCSSStyleDeclarationCustom.cpp:
        (WebCore::JSCSSStyleDeclaration::nameGetter): Ditto.

        * bindings/js/JSCanvasRenderingContext2DCustom.cpp:
        (WebCore::toHTMLCanvasStyle): Use asString and asObject.
        (WebCore::JSCanvasRenderingContext2D::setFillColor): Ditto.
        (WebCore::JSCanvasRenderingContext2D::setStrokeColor): Ditto.
        (WebCore::JSCanvasRenderingContext2D::drawImage): Ditto.
        (WebCore::JSCanvasRenderingContext2D::drawImageFromRect): Ditto.
        (WebCore::JSCanvasRenderingContext2D::setShadow): Ditto.
        (WebCore::JSCanvasRenderingContext2D::createPattern): Ditto.

        * bindings/js/JSCustomSQLTransactionErrorCallback.cpp:
        (WebCore::JSCustomSQLTransactionErrorCallback::handleEvent): Use JSValuePtr.

        * bindings/js/JSDOMBinding.cpp:
        (WebCore::setDOMException): Use noValue.

        * bindings/js/JSDOMBinding.h:
        (WebCore::getDOMPrototype): Use asObject.

        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::showModalDialog): Use noValue.
        (jsDOMWindowBaseEvent): Use asObject.
        (jsDOMWindowBaseImage): Ditto.
        (jsDOMWindowBaseMessageChannel): Ditto.
        (jsDOMWindowBaseOption): Ditto.
        (jsDOMWindowBaseXMLHttpRequest): Ditto.
        (jsDOMWindowBaseAudio): Ditto.
        (jsDOMWindowBaseXSLTProcessor): Ditto.
        (WebCore::JSDOMWindowBase::childFrameGetter): Ditto.
        (WebCore::JSDOMWindowBase::indexGetter): Ditto.
        (WebCore::JSDOMWindowBase::namedItemGetter): Ditto.
        (WebCore::JSDOMWindowBase::getOwnPropertySlot): Ditto.
        (WebCore::JSDOMWindowBase::findJSEventListener): Ditto.
        (WebCore::JSDOMWindowBase::findOrCreateJSEventListener): Ditto.
        (WebCore::JSDOMWindowBase::findJSUnprotectedEventListener): Ditto.
        (WebCore::JSDOMWindowBase::findOrCreateJSUnprotectedEventListener): Ditto.
        (windowProtoFuncOpen): Use noValue.
        (WebCore::toJSDOMWindow): Use asObject.

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::setTimeoutOrInterval): Use asString.
        (WebCore::toDOMWindow): Use asObject.

        * bindings/js/JSEventListener.cpp:
        (WebCore::JSAbstractEventListener::handleEvent): Use noValue.
        (WebCore::JSLazyEventListener::parseCode): Use asObject.

        * bindings/js/JSHTMLCollectionCustom.cpp:
        (WebCore::JSHTMLCollection::nameGetter): Use asObject.
        * bindings/js/JSHTMLDocumentCustom.cpp:
        (WebCore::JSHTMLDocument::nameGetter): Ditto.
        * bindings/js/JSHTMLElementCustom.cpp:
        (WebCore::JSHTMLElement::pushEventHandlerScope): Ditto.
        * bindings/js/JSHTMLFormElementCustom.cpp:
        (WebCore::JSHTMLFormElement::nameGetter): Ditto.
        * bindings/js/JSHTMLFrameSetElementCustom.cpp:
        (WebCore::JSHTMLFrameSetElement::nameGetter): Ditto.
        * bindings/js/JSHTMLOptionElementConstructor.cpp:
        (WebCore::JSHTMLOptionElementConstructor::JSHTMLOptionElementConstructor): Ditto.
        (WebCore::constructHTMLOptionElement): Ditto.
        * bindings/js/JSHTMLOptionsCollectionCustom.cpp:
        (WebCore::JSHTMLOptionsCollection::remove): Ditto.
        * bindings/js/JSImageConstructor.cpp:
        (WebCore::JSImageConstructor::JSImageConstructor): Ditto.
        (WebCore::constructImage): Ditto.
        * bindings/js/JSInspectedObjectWrapper.cpp:
        (WebCore::JSInspectedObjectWrapper::wrap): Ditto.
        * bindings/js/JSInspectorCallbackWrapper.cpp:
        (WebCore::JSInspectorCallbackWrapper::wrap): Ditto.

        * bindings/js/JSJavaScriptCallFrameCustom.cpp:
        (WebCore::JSJavaScriptCallFrame::evaluate): Use noValue.

        * bindings/js/JSMessageChannelConstructor.cpp:
        (WebCore::JSMessageChannelConstructor::JSMessageChannelConstructor): Use asObject.
        (WebCore::JSMessageChannelConstructor::construct): Ditto.
        * bindings/js/JSMimeTypeArrayCustom.cpp:
        (WebCore::JSMimeTypeArray::nameGetter): Ditto.
        * bindings/js/JSNamedNodeMapCustom.cpp:
        (WebCore::JSNamedNodeMap::nameGetter): Ditto.
        * bindings/js/JSNamedNodesCollection.cpp:
        (WebCore::JSNamedNodesCollection::lengthGetter): Ditto.
        (WebCore::JSNamedNodesCollection::indexGetter): Ditto.
        * bindings/js/JSNodeFilterCustom.cpp:
        (WebCore::toNodeFilter): Ditto.
        * bindings/js/JSNodeListCustom.cpp:
        (WebCore::JSNodeList::nameGetter): Ditto.
        * bindings/js/JSPluginArrayCustom.cpp:
        (WebCore::JSPluginArray::nameGetter): Ditto.
        * bindings/js/JSPluginCustom.cpp:
        (WebCore::JSPlugin::nameGetter): Ditto.
        * bindings/js/JSPluginElementFunctions.cpp:
        (WebCore::runtimeObjectGetter): Ditto.
        (WebCore::runtimeObjectPropertyGetter): Ditto.
        * bindings/js/JSQuarantinedObjectWrapper.cpp:
        (WebCore::JSQuarantinedObjectWrapper::asWrapper): Ditto.
        (WebCore::JSQuarantinedObjectWrapper::getOwnPropertySlot): Ditto.
        (WebCore::JSQuarantinedObjectWrapper::construct): Ditto.
        * bindings/js/JSRGBColor.cpp:
        (jsRGBColorRed): Ditto.
        (jsRGBColorGreen): Ditto.
        (jsRGBColorBlue): Ditto.

        * bindings/js/JSSQLResultSetRowListCustom.cpp:
        (WebCore::JSSQLResultSetRowList::item): Use noValue.

        * bindings/js/JSStorageCustom.cpp:
        (WebCore::JSStorage::nameGetter): Use asObject.
        (WebCore::JSStorage::deleteProperty): Ditto.
        (WebCore::JSStorage::customPut): Ditto.
        * bindings/js/JSStyleSheetListCustom.cpp:
        (WebCore::JSStyleSheetList::nameGetter): Ditto.
        * bindings/js/JSXMLHttpRequestConstructor.cpp:
        (WebCore::JSXMLHttpRequestConstructor::JSXMLHttpRequestConstructor): Ditto.
        * bindings/js/JSXSLTProcessorCustom.cpp:
        (WebCore::JSXSLTProcessor::importStylesheet): Ditto.
        (WebCore::JSXSLTProcessor::transformToFragment): Ditto.
        (WebCore::JSXSLTProcessor::transformToDocument): Ditto.

        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::evaluate): Use noValue.
        * bindings/objc/DOMInternal.mm:
        (-[WebScriptObject _initializeScriptDOMNodeImp]): Ditto.

        * bindings/objc/WebScriptObject.mm:
        (-[WebScriptObject evaluateWebScript:]): Use JSValuePtr.
        (-[WebScriptObject valueForKey:]): Ditto.
        (-[WebScriptObject webScriptValueAtIndex:]): Ditto.
        (+[WebScriptObject _convertValueToObjcValue:originRootObject:rootObject:]):
        Use asObject and asString.

        * bindings/scripts/CodeGeneratorJS.pm: Use asObject.

        * bridge/c/c_instance.h: Use JSValuePtr.
        * bridge/c/c_runtime.cpp:
        (JSC::Bindings::CField::setValueToInstance): Ditto.

        * bridge/c/c_utility.cpp:
        (JSC::Bindings::convertValueToNPVariant): Use asObject.

        * bridge/jni/jni_instance.cpp:
        (JavaInstance::booleanValue): Use JSValuePtr.
        (JavaInstance::invokeMethod): Ditto. And noValue.
        * bridge/jni/jni_jsobject.mm:
        (JavaJSObject::getSlot): Ditto.
        (JavaJSObject::convertValueToJObject): Ditto.
        * bridge/jni/jni_runtime.cpp:
        (JavaField::dispatchValueFromInstance): Ditto.
        (JavaField::valueFromInstance): Ditto.
        (JavaField::dispatchSetValueToInstance): Ditto.
        (JavaField::setValueToInstance): Ditto.
        (JavaArray::setValueAt): Ditto.
        (JavaArray::valueAt): Ditto.
        * bridge/jni/jni_runtime.h: Ditto.

        * bridge/jni/jni_utility.cpp:
        (JSC::Bindings::convertArrayInstanceToJavaArray): Take a JSArray*
        instead of a JSValue*.
        (JSC::Bindings::convertValueToJValue): Use asObject and asArray.

        * bridge/objc/objc_class.h: Use JSValuePtr.
        * bridge/objc/objc_instance.h: Ditto.
        * bridge/objc/objc_runtime.h: Ditto.

        * bridge/objc/objc_runtime.mm:
        (JSC::Bindings::callObjCFallbackObject): Use asObject.

        * bridge/objc/objc_utility.h: Use JSValuePtr.
        * bridge/objc/objc_utility.mm:
        (JSC::Bindings::convertValueToObjcValue): Use JSValuePtr and asObject.
        (JSC::Bindings::convertObjcValueToValue): Use jsUndefined() instead of 0.

        * bridge/runtime.cpp:
        (JSC::Bindings::Instance::getValueOfField): Use JSValuePtr.
        (JSC::Bindings::Instance::setValueOfField): Ditto.

        * bridge/runtime_array.cpp:
        (JSC::RuntimeArray::lengthGetter): Use JSValuePtr and asObject.
        (JSC::RuntimeArray::indexGetter): Ditto.
        * bridge/runtime_array.h: Ditto.
        * bridge/runtime_method.cpp:
        (JSC::RuntimeMethod::lengthGetter): Ditto.
        (JSC::callRuntimeMethod): Ditto.
        * bridge/runtime_object.cpp:
        (JSC::RuntimeObjectImp::fallbackObjectGetter): Ditto.
        (JSC::RuntimeObjectImp::fieldGetter): Ditto.
        (JSC::RuntimeObjectImp::methodGetter): Ditto.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::executeScript): Use noValue.

        * page/Console.cpp:
        (WebCore::Console::trace): Use asInternalFunction.

2008-10-19  Dan Bernstein  <mitz@apple.com>

        Reviewed by Timothy Hatcher.

        - lower the default button repaint frequency

        * rendering/RenderButton.cpp:
        (WebCore::RenderButton::styleDidChange): Changed the timer interval from
        0.01 to 0.03.

2008-10-18  Dan Bernstein  <mitz@apple.com>

        Reviewed by Mark Rowe.

        - Windows build fix

        * rendering/RenderThemeSafari.cpp:
        (WebCore::RenderThemeSafari::paintMediaFullscreenButton):
        (WebCore::RenderThemeSafari::paintMediaMuteButton):
        (WebCore::RenderThemeSafari::paintMediaPlayButton):
        (WebCore::RenderThemeSafari::paintMediaSeekBackButton):
        (WebCore::RenderThemeSafari::paintMediaSeekForwardButton):
        (WebCore::RenderThemeSafari::paintMediaSliderThumb):

2008-10-18  Dan Bernstein  <mitz@apple.com>

        Reviewed by Sam Weinig.

        - WebCore part of https://bugs.webkit.org/show_bug.cgi?id=21736
          Long-dead decoded image data make up for most of the object cache's memory use over time

        Add a cache setting for how long decoded image data should be allowed to
        persist in memory after the image has died. By default, this is set to
        0, which means "forever".

        * loader/Cache.cpp:
        (WebCore::Cache::Cache): Initialize m_deadDecodedDataDeletionInterval.
        * loader/Cache.h:
        (WebCore::Cache::setDeadDecodedDataDeletionInterval): Added a setter.
        (WebCore::Cache::deadDecodedDataDeletionInterval): Added a getter.
        * loader/CachedImage.cpp:
        (WebCore::CachedImage::CachedImage): Initialize the decoded data
        deletion timer.
        (WebCore::CachedImage::decodedDataDeletionTimerFired): Added. Destroys
        the decoded image data.
        (WebCore::CachedImage::addClient): Stop the timer if it is active.
        (WebCore::CachedImage::allClientsRemoved): Start the decoded data
        deletion timer.
        * loader/CachedImage.h:

2008-10-18  Darin Adler  <darin@apple.com>

        Reviewed by Dan Bernstein.

        - fix https://bugs.webkit.org/show_bug.cgi?id=21645
          REGRESSION (r37469-r37605): File Input not Uploaded in Multipart/Form-data Form

        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::formData):
        Fix loop that goes through the FormDataList to go two at a time in a clearer
        way. My last patch screwed up the way it got form content from the items.
        This "two at a time" approach is a confusing way to do things, which explains
        why I got it wrong last time through, but I decided to just fix it locally for
        now rather than changing the design of FormDataList.

2008-10-18  Darin Adler  <darin@apple.com>

        Reviewed by Cameron Zwarich.

        - next step on https://bugs.webkit.org/show_bug.cgi?id=21732
          improve performance by eliminating JSValue as a base class for JSCell

        Use JSValuePtr everywhere instead of JSValue*. In the future, we'll be
        changing JSValuePtr to be a class, and then eventually renaming it
        to JSValue once that's done.

        * bindings/js/JSAttrCustom.cpp:
        * bindings/js/JSCSSRuleCustom.cpp:
        * bindings/js/JSCSSStyleDeclarationCustom.cpp:
        * bindings/js/JSCSSValueCustom.cpp:
        * bindings/js/JSCanvasPixelArrayCustom.h:
        * bindings/js/JSCanvasRenderingContext2DCustom.cpp:
        * bindings/js/JSClipboardCustom.cpp:
        * bindings/js/JSConsoleCustom.cpp:
        * bindings/js/JSCustomSQLStatementCallback.cpp:
        * bindings/js/JSCustomSQLStatementErrorCallback.cpp:
        * bindings/js/JSCustomSQLTransactionCallback.cpp:
        * bindings/js/JSCustomSQLTransactionErrorCallback.cpp:
        * bindings/js/JSCustomVoidCallback.cpp:
        * bindings/js/JSCustomVoidCallback.h:
        * bindings/js/JSCustomXPathNSResolver.cpp:
        * bindings/js/JSDOMApplicationCacheCustom.cpp:
        * bindings/js/JSDOMBinding.cpp:
        * bindings/js/JSDOMBinding.h:
        * bindings/js/JSDOMWindowBase.cpp:
        * bindings/js/JSDOMWindowBase.h:
        * bindings/js/JSDOMWindowCustom.cpp:
        * bindings/js/JSDOMWindowCustom.h:
        * bindings/js/JSDOMWindowShell.cpp:
        * bindings/js/JSDOMWindowShell.h:
        * bindings/js/JSDatabaseCustom.cpp:
        * bindings/js/JSDocumentCustom.cpp:
        * bindings/js/JSElementCustom.cpp:
        * bindings/js/JSEventCustom.cpp:
        * bindings/js/JSEventListener.cpp:
        * bindings/js/JSEventTarget.cpp:
        * bindings/js/JSEventTargetBase.h:
        * bindings/js/JSEventTargetNodeCustom.cpp:
        * bindings/js/JSHTMLAllCollection.h:
        * bindings/js/JSHTMLAppletElementCustom.cpp:
        * bindings/js/JSHTMLCollectionCustom.cpp:
        * bindings/js/JSHTMLDocumentCustom.cpp:
        * bindings/js/JSHTMLEmbedElementCustom.cpp:
        * bindings/js/JSHTMLFormElementCustom.cpp:
        * bindings/js/JSHTMLFrameElementCustom.cpp:
        * bindings/js/JSHTMLFrameSetElementCustom.cpp:
        * bindings/js/JSHTMLIFrameElementCustom.cpp:
        * bindings/js/JSHTMLInputElementCustom.cpp:
        * bindings/js/JSHTMLObjectElementCustom.cpp:
        * bindings/js/JSHTMLOptionsCollectionCustom.cpp:
        * bindings/js/JSHTMLSelectElementCustom.cpp:
        * bindings/js/JSHTMLSelectElementCustom.h:
        * bindings/js/JSHistoryCustom.cpp:
        * bindings/js/JSImageDataCustom.cpp:
        * bindings/js/JSInspectedObjectWrapper.cpp:
        * bindings/js/JSInspectedObjectWrapper.h:
        * bindings/js/JSInspectorCallbackWrapper.cpp:
        * bindings/js/JSInspectorCallbackWrapper.h:
        * bindings/js/JSJavaScriptCallFrameCustom.cpp:
        * bindings/js/JSLocationCustom.cpp:
        * bindings/js/JSMessagePortCustom.cpp:
        * bindings/js/JSMimeTypeArrayCustom.cpp:
        * bindings/js/JSNamedNodeMapCustom.cpp:
        * bindings/js/JSNamedNodesCollection.cpp:
        * bindings/js/JSNamedNodesCollection.h:
        * bindings/js/JSNavigatorCustom.cpp:
        * bindings/js/JSNodeCustom.cpp:
        * bindings/js/JSNodeFilterCondition.cpp:
        * bindings/js/JSNodeFilterCustom.cpp:
        * bindings/js/JSNodeIteratorCustom.cpp:
        * bindings/js/JSNodeListCustom.cpp:
        * bindings/js/JSPluginArrayCustom.cpp:
        * bindings/js/JSPluginCustom.cpp:
        * bindings/js/JSPluginElementFunctions.cpp:
        * bindings/js/JSPluginElementFunctions.h:
        * bindings/js/JSQuarantinedObjectWrapper.cpp:
        * bindings/js/JSQuarantinedObjectWrapper.h:
        * bindings/js/JSRGBColor.cpp:
        * bindings/js/JSRGBColor.h:
        * bindings/js/JSSQLResultSetRowListCustom.cpp:
        * bindings/js/JSSQLTransactionCustom.cpp:
        * bindings/js/JSSVGElementInstanceCustom.cpp:
        * bindings/js/JSSVGLengthCustom.cpp:
        * bindings/js/JSSVGMatrixCustom.cpp:
        * bindings/js/JSSVGPathSegCustom.cpp:
        * bindings/js/JSSVGPathSegListCustom.cpp:
        * bindings/js/JSSVGPointListCustom.cpp:
        * bindings/js/JSSVGTransformListCustom.cpp:
        * bindings/js/JSStorageCustom.cpp:
        * bindings/js/JSStyleSheetCustom.cpp:
        * bindings/js/JSStyleSheetListCustom.cpp:
        * bindings/js/JSTextCustom.cpp:
        * bindings/js/JSTreeWalkerCustom.cpp:
        * bindings/js/JSXMLHttpRequestCustom.cpp:
        * bindings/js/JSXMLHttpRequestUploadCustom.cpp:
        * bindings/js/JSXSLTProcessorCustom.cpp:
        * bindings/js/ScheduledAction.cpp:
        * bindings/js/ScheduledAction.h:
        * bindings/js/ScriptController.cpp:
        * bindings/js/ScriptController.h:
        * bindings/objc/WebScriptObject.mm:
        * bindings/scripts/CodeGeneratorJS.pm:
        * bridge/NP_jsobject.cpp:
        * bridge/c/c_instance.cpp:
        * bridge/c/c_instance.h:
        * bridge/c/c_runtime.cpp:
        * bridge/c/c_runtime.h:
        * bridge/c/c_utility.cpp:
        * bridge/jni/jni_instance.cpp:
        * bridge/jni/jni_instance.h:
        * bridge/jni/jni_jsobject.mm:
        * bridge/jni/jni_objc.mm:
        * bridge/jni/jni_runtime.cpp:
        * bridge/jni/jni_runtime.h:
        * bridge/jni/jni_utility.cpp:
        * bridge/objc/objc_class.mm:
        * bridge/objc/objc_instance.h:
        * bridge/objc/objc_instance.mm:
        * bridge/objc/objc_runtime.h:
        * bridge/objc/objc_runtime.mm:
        * bridge/objc/objc_utility.h:
        * bridge/objc/objc_utility.mm:
        * bridge/runtime.h:
        * bridge/runtime_array.cpp:
        * bridge/runtime_array.h:
        * bridge/runtime_method.cpp:
        * bridge/runtime_method.h:
        * bridge/runtime_object.cpp:
        * bridge/runtime_object.h:
        * inspector/JavaScriptCallFrame.cpp:
        * inspector/JavaScriptCallFrame.h:
        * inspector/JavaScriptProfile.cpp:
        * inspector/JavaScriptProfileNode.cpp:
        * loader/FrameLoader.cpp:
        * loader/FrameLoader.h:
        * page/Console.cpp:
        * page/Console.h:
        * plugins/MimeTypeArray.h:
        * plugins/Plugin.h:
        * plugins/PluginArray.h:
        * xml/XMLHttpRequest.cpp:
        Replace JSValue* with JSValuePtr.

2008-10-18  Darin Adler  <darin@apple.com>

        Reviewed by Oliver Hunt.

        - first step of https://bugs.webkit.org/show_bug.cgi?id=21732
          improve performance by eliminating JSValue as a base class for JSCell

        Update for change to make PreferredPrimitiveType no longer
        a member of JSValue.

        * bridge/c/c_instance.cpp:
        (JSC::Bindings::CInstance::defaultValue): Removed JSValue:: prefix.
        * bridge/jni/jni_instance.cpp:
        (JavaInstance::defaultValue): Ditto.
        * bridge/objc/objc_instance.mm:
        (ObjcInstance::defaultValue): Ditto.
        * bridge/qt/qt_instance.cpp:
        (JSC::Bindings::QtInstance::defaultValue): Ditto.
        * bridge/runtime.h: Ditto. Also removed typedef.

2008-10-18  Darin Adler  <darin@apple.com>

        - try to fix Windows build

        * rendering/RenderThemeSafari.cpp:
        (WebCore::RenderThemeSafari::paintCheckbox): Explicitly qualify part name with
        SafariTheme namespace, since there is now an identically named constant in
        the ControlPart enum.
        (WebCore::RenderThemeSafari::paintButton): Ditto.
        (WebCore::RenderThemeSafari::paintTextField): Ditto.
        (WebCore::RenderThemeSafari::paintTextArea): Ditto.
        (WebCore::RenderThemeSafari::paintSearchField): Ditto.
        (WebCore::RenderThemeSafari::paintSearchFieldCancelButton): Ditto.
        (WebCore::RenderThemeSafari::paintSearchFieldResultsDecoration): Ditto.
        (WebCore::RenderThemeSafari::paintSearchFieldResultsButton): Ditto.

2008-10-18  Jan Michael Alonzo  <jmalonzo@webkit.org>

        Reviewed by Alp Toker.

        [GTK] crash after selecting a file on an <input type=file>
        https://bugs.webkit.org/show_bug.cgi?id=21385

        Follow Mac and Win's behaviors for Icon::paint

        * platform/graphics/gtk/IconGtk.cpp:
        (WebCore::Icon::paint): check if painting is enabled before
        painting the icon

2008-10-18  Zan Dobersek  <zandobersek@gmail.com>

        Reviewed by Oliver Hunt.

        Qt port build fix.

        * platform/qt/RenderThemeQt.h:

2008-10-17  Kevin Watters  <kevinwatters@gmail.com>

        Reviewed by Kevin Ollivier

        Fix wx port's scrollbar and drawing handling after recent changes.

        https://bugs.webkit.org/show_bug.cgi?id=21720

        * platform/ScrollView.h:
        * platform/wx/ScrollViewWx.cpp:
        (WebCore::ScrollView::platformVisibleContentRect):
        (WebCore::ScrollView::platformContentsSize):
        (WebCore::ScrollView::platformSetContentsSize):
        * platform/wx/WidgetWx.cpp:
        (WebCore::Widget::paint):

2008-10-17  Kevin Ollivier  <kevino@theolliviers.com>

        wx build fix. EAppearance -> ControlPart.

        * platform/wx/RenderThemeWx.cpp:
        (WebCore::RenderThemeWx::isControlStyled):
        (WebCore::RenderThemeWx::adjustRepaintRect):
        (WebCore::RenderThemeWx::controlSupportsTints):
        (WebCore::RenderThemeWx::supportsFocus):
        (WebCore::RenderThemeWx::paintButton):

2008-10-17  David Hyatt  <hyatt@apple.com>

        Eliminate the EAppearance enum in favor of the new ControlPart enum.  Cut out the scrollbar
        values from the enum since they are handled by ScrollbarTheme instead.

        Reviewed by Tim Hatcher

        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        (WebCore::CSSPrimitiveValue::operator ControlPart):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::adjustRenderStyle):
        * css/CSSValueKeywords.in:
        * platform/gtk/RenderThemeGtk.cpp:
        (WebCore::supportsFocus):
        (WebCore::RenderThemeGtk::baselinePosition):
        (WebCore::setToggleSize):
        (WebCore::RenderThemeGtk::setCheckboxSize):
        (WebCore::RenderThemeGtk::setRadioSize):
        (WebCore::RenderThemeGtk::adjustButtonStyle):
        * platform/qt/RenderThemeQt.cpp:
        (WebCore::RenderThemeQt::baselinePosition):
        (WebCore::RenderThemeQt::controlSupportsTints):
        (WebCore::RenderThemeQt::adjustRepaintRect):
        (WebCore::RenderThemeQt::isControlStyled):
        (WebCore::computeSizeBasedOnStyle):
        (WebCore::RenderThemeQt::paintButton):
        (WebCore::RenderThemeQt::paintTextField):
        (WebCore::RenderThemeQt::paintMenuList):
        (WebCore::RenderThemeQt::supportsFocus):
        (WebCore::RenderThemeQt::applyTheme):
        (WebCore::RenderThemeQt::adjustSliderThumbSize):
        * platform/qt/RenderThemeQt.h:
        * rendering/RenderSlider.cpp:
        (WebCore::RenderSlider::createThumbStyle):
        (WebCore::RenderSlider::layout):
        (WebCore::RenderSlider::setValueForPosition):
        (WebCore::RenderSlider::setPositionFromValue):
        (WebCore::RenderSlider::positionForOffset):
        (WebCore::RenderSlider::currentPosition):
        (WebCore::RenderSlider::setCurrentPosition):
        (WebCore::RenderSlider::trackSize):
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::adjustStyle):
        (WebCore::RenderTheme::paint):
        (WebCore::RenderTheme::paintBorderOnly):
        (WebCore::RenderTheme::paintDecorations):
        (WebCore::RenderTheme::isControlContainer):
        (WebCore::RenderTheme::isControlStyled):
        (WebCore::RenderTheme::supportsFocusRing):
        (WebCore::RenderTheme::isDefault):
        * rendering/RenderTheme.h:
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::isControlStyled):
        (WebCore::RenderThemeMac::adjustRepaintRect):
        (WebCore::RenderThemeMac::baselinePosition):
        (WebCore::RenderThemeMac::controlSupportsTints):
        (WebCore::RenderThemeMac::adjustButtonStyle):
        (WebCore::RenderThemeMac::setButtonCellState):
        (WebCore::RenderThemeMac::popupInternalPaddingLeft):
        (WebCore::RenderThemeMac::popupInternalPaddingRight):
        (WebCore::RenderThemeMac::popupInternalPaddingTop):
        (WebCore::RenderThemeMac::popupInternalPaddingBottom):
        (WebCore::RenderThemeMac::paintSliderTrack):
        (WebCore::RenderThemeMac::paintSliderThumb):
        (WebCore::RenderThemeMac::adjustSliderThumbSize):
        * rendering/RenderThemeSafari.cpp:
        (WebCore::RenderThemeSafari::isControlStyled):
        (WebCore::RenderThemeSafari::adjustRepaintRect):
        (WebCore::RenderThemeSafari::baselinePosition):
        (WebCore::RenderThemeSafari::controlSupportsTints):
        (WebCore::RenderThemeSafari::adjustButtonStyle):
        (WebCore::RenderThemeSafari::popupInternalPaddingLeft):
        (WebCore::RenderThemeSafari::popupInternalPaddingRight):
        (WebCore::RenderThemeSafari::popupInternalPaddingTop):
        (WebCore::RenderThemeSafari::popupInternalPaddingBottom):
        (WebCore::RenderThemeSafari::paintSliderTrack):
        (WebCore::RenderThemeSafari::adjustSliderThumbSize):
        * rendering/RenderThemeWin.cpp:
        (WebCore::RenderThemeWin::supportsFocus):
        (WebCore::RenderThemeWin::determineClassicState):
        (WebCore::RenderThemeWin::getClassicThemeData):
        (WebCore::RenderThemeWin::getThemeData):
        (WebCore::drawControl):
        (WebCore::RenderThemeWin::paintSliderTrack):
        (WebCore::RenderThemeWin::adjustSliderThumbSize):
        * rendering/RenderThemeWin.h:
        * rendering/style/RenderStyle.h:
        (WebCore::InheritedFlags::hasAppearance):
        (WebCore::InheritedFlags::appearance):
        (WebCore::InheritedFlags::setAppearance):
        (WebCore::InheritedFlags::initialAppearance):
        * rendering/style/RenderStyleConstants.h:

2008-10-17  David Hyatt  <hyatt@apple.com>

        Beginning of the RenderTheme re-architecture (to share more code).  Add the new Theme API header
        file.  Add new USE(NEW_THEME) switch that is enabled on Mac.  The Mac theme will be converted first.

        Reviewed by Tim Hatcher

        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * config.h:
        * platform/Theme.h: Added.
        (WebCore::Theme::Theme):
        (WebCore::Theme::~Theme):
        (WebCore::Theme::baselinePositionAdjustment):
        (WebCore::Theme::controlHasInactiveAppearance):
        (WebCore::Theme::controlsCanHaveInactiveAppearance):
        (WebCore::Theme::controlsCanHaveHoveredAppearance):
        (WebCore::Theme::controlDrawsBorder):
        (WebCore::Theme::controlDrawsBackground):
        (WebCore::Theme::controlDrawsFocusOutline):
        (WebCore::Theme::selectionColor):
        (WebCore::Theme::textSearchHighlightColor):
        (WebCore::Theme::systemColor):
        (WebCore::Theme::systemFont):
        (WebCore::Theme::caretBlinkFrequency):
        (WebCore::Theme::themeChanged):
        (WebCore::Theme::controlSize):
        (WebCore::Theme::controlFont):
        (WebCore::Theme::controlPadding):
        (WebCore::Theme::controlInternalPadding):
        (WebCore::Theme::controlBorder):
        (WebCore::Theme::controlBorderRadius):
        (WebCore::Theme::paint):
        (WebCore::Theme::inflateControlPaintRect):
        * platform/ThemeTypes.h: Added.
        (WebCore::):
        (WebCore::ControlBox::ControlBox):
        (WebCore::ControlBox::top):
        (WebCore::ControlBox::right):
        (WebCore::ControlBox::bottom):
        (WebCore::ControlBox::left):
        * platform/mac/ThemeMac.h: Added.
        (WebCore::ThemeMac::ThemeMac):
        (WebCore::ThemeMac::~ThemeMac):
        * platform/mac/ThemeMac.mm: Added.
        (WebCore::platformTheme):
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::RenderTheme):
        * rendering/RenderTheme.h:

2008-10-17  Marco Barisione  <marco.barisione@collabora.co.uk>

        Reviewed by Sam Weinig. Landed by Jan Alonzo.

        https://bugs.webkit.org/show_bug.cgi?id=21603
        [GTK] Minor fixes to GOwnPtr

        * platform/graphics/gtk/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::mediaPlayerPrivateErrorCallback):

2008-10-17  Timothy Hatcher  <timothy@apple.com>

        Recompile the JavaScript functions when removing any listener, so functions that are
        not being debugged can resume normal speed again.

        https://bugs.webkit.org/show_bug.cgi?id=21715

        Reviewed by Geoffrey Garen.

        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::globalExec): Changed an assert into an if check. This assert
        was firing when closing the window and having the recompile fire after. This was an
        overzelious assert now.
        * inspector/JavaScriptDebugServer.cpp:
        (WebCore::JavaScriptDebugServer::didRemoveListener): Start the recompile timer.
        (WebCore::JavaScriptDebugServer::didRemoveLastListener): Removed the recompile timer start.

2008-10-17  Timothy Hatcher  <timothy@apple.com>

        Fixes a regression where starting a debugging session in
        another Web Inspector window would not show any scripts.
        Also only attach the debugger to only the required Pages.

        https://bugs.webkit.org/show_bug.cgi?id=21708

        Reviewed by Darin Adler.

        * inspector/JavaScriptDebugServer.cpp:
        (WebCore::JavaScriptDebugServer::addListener): Add an assert and
        remove the call to willAddFirstListener(). Add a call to
        didAddListener().
        (WebCore::JavaScriptDebugServer::removeListener): Add an assert
        and call to didRemoveListener().
        (WebCore::JavaScriptDebugServer::pageCreated): Attach the debugger
        if there is a listener interested in the new Page.
        (WebCore::JavaScriptDebugServer::hasListenersInterestedInPage):
        Use hasGlobalListeners() instead of isEmpty().
        (WebCore::JavaScriptDebugServer::sourceParsed): Ditto.
        (WebCore::JavaScriptDebugServer::didAddListener): Added. Attach the
        debugger to the page if non-null, or all pages if page is null.
        (WebCore::JavaScriptDebugServer::didRemoveListener): Added. Detach
        the debugger only if there are no interested listeners.
        (WebCore::JavaScriptDebugServer::didRemoveLastListener): Remove the
        call to Page::setDebuggerForAllPages().
        * inspector/JavaScriptDebugServer.h:
        (WebCore::JavaScriptDebugServer::hasGlobalListeners): Added.

2008-10-15  Brett Wilson  <brettw@chromium.org>

        Reviewed by Timothy Hatcher.

        Have ImageDocument generate its own filename for the title of images
        without relying on the suggested filename from the network layer, which
        may be nonexistant or not relevant.
        https://bugs.webkit.org/show_bug.cgi?id=21565

        * loader/ImageDocument.cpp:
        (WebCore::ImageTokenizer::finish):

2008-10-17  Alexey Proskuryakov  <ap@webkit.org>

        Non-Mac build fix.

        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCoreSources.bkl:
        Added ActiveDOMObject to the build.

2008-10-17  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=21642
        Abstract out active object tracking

        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSDOMBinding.cpp:
        (WebCore::markActiveObjectsForDocument):
        * dom/ActiveDOMObject.cpp: Added.
        (WebCore::ActiveDOMObject::ActiveDOMObject):
        (WebCore::ActiveDOMObject::~ActiveDOMObject):
        (WebCore::ActiveDOMObject::contextDestroyed):
        (WebCore::ActiveDOMObject::stop):
        * dom/ActiveDOMObject.h: Added.
        (WebCore::ActiveDOMObject::document):
        (WebCore::ActiveDOMObject::hasPendingActivity):
        (WebCore::ActiveDOMObject::setPendingActivity):
        (WebCore::ActiveDOMObject::unsetPendingActivity):
        * dom/Document.cpp:
        (WebCore::Document::~Document):
        (WebCore::Document::stopActiveDOMObjects):
        (WebCore::Document::createdActiveDOMObject):
        (WebCore::Document::destroyedActiveDOMObject):
        * dom/Document.h:
        (WebCore::Document::activeDOMObjects):
        * dom/MessagePort.cpp:
        (WebCore::MessagePort::contextDestroyed):
        * dom/MessagePort.h:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::stopLoading):
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::XMLHttpRequest):
        (WebCore::XMLHttpRequest::~XMLHttpRequest):
        (WebCore::XMLHttpRequest::associatedFrame):
        (WebCore::XMLHttpRequest::responseXML):
        (WebCore::XMLHttpRequest::callReadyStateChangeListener):
        (WebCore::XMLHttpRequest::initSend):
        (WebCore::XMLHttpRequest::send):
        (WebCore::XMLHttpRequest::createRequest):
        (WebCore::XMLHttpRequest::makeSimpleCrossSiteAccessRequest):
        (WebCore::XMLHttpRequest::makeCrossSiteAccessRequestWithPreflight):
        (WebCore::XMLHttpRequest::handleAsynchronousPreflightResult):
        (WebCore::XMLHttpRequest::loadRequestSynchronously):
        (WebCore::XMLHttpRequest::loadRequestAsynchronously):
        (WebCore::XMLHttpRequest::dropProtection):
        (WebCore::XMLHttpRequest::setRequestHeader):
        (WebCore::XMLHttpRequest::processSyncLoadResults):
        (WebCore::XMLHttpRequest::didFinishLoading):
        (WebCore::XMLHttpRequest::didFinishLoadingPreflight):
        (WebCore::XMLHttpRequest::willSendRequest):
        (WebCore::XMLHttpRequest::accessControlCheck):
        (WebCore::XMLHttpRequest::didReceiveResponsePreflight):
        (WebCore::XMLHttpRequest::stop):
        (WebCore::XMLHttpRequest::contextDestroyed):
        * xml/XMLHttpRequest.h:
        Move activity tracking to a new ActiveDOMObject class.

2008-10-16  David Hyatt  <hyatt@apple.com>

        Simplify styleForRenderer to avoid confusion.  Callers in the SVG filter code thought "forRenderer" meant
        they would be given a style that corresponded to the RenderObject* passed in.  This is not what the code
        did though.  This patch removes the renderer argument and the Element subclass shadow implementation
        so that confusion like this can't occur again.

        Reviewed by Oliver Hunt

        * dom/Element.cpp:
        * dom/Element.h:
        * dom/Node.cpp:
        (WebCore::Node::createRendererIfNeeded):
        (WebCore::Node::styleForRenderer):
        * dom/Node.h:
        * html/HTMLOptGroupElement.cpp:
        (WebCore::HTMLOptGroupElement::attach):
        * html/HTMLOptionElement.cpp:
        (WebCore::HTMLOptionElement::attach):
        * svg/SVGClipPathElement.cpp:
        (WebCore::SVGClipPathElement::canvasResource):
        * svg/SVGFEDiffuseLightingElement.cpp:
        (WebCore::SVGFEDiffuseLightingElement::build):
        * svg/SVGFEFloodElement.cpp:
        (WebCore::SVGFEFloodElement::build):
        * svg/SVGFESpecularLightingElement.cpp:
        (WebCore::SVGFESpecularLightingElement::build):
        * svg/SVGGradientElement.cpp:
        (WebCore::SVGGradientElement::buildStops):
        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::attachShadowTree):

2008-10-16  David Hyatt  <hyatt@apple.com>

        https://bugs.webkit.org/attachment.cgi?bugid=21647

        Make RenderStyle inherit from RefCounted so that it works with RefPtr.  RenderStyle was being malloced
        out of the RenderArena.  Years and years ago (before TCMalloc), the plan was to make RenderStyles and
        all their associated sub-structs use the arena.  However only the RenderStyle itself was ever changed
        to use the arena.

        At a later point style sharing was implemented, which made using the arena for styles pretty pointless,
        as the bulk of the styles on a given page are actually shared.  Not ever making the sub-structs use the
        arena also limited the usefulness.

        Now that we have RefPtr/PassRefPtr to eliminate manual ref/deref and now that we use TCMalloc for fast
        mallocs, there is no reason to keep RenderStyles in the arena.  The benefits of being able to eliminate
        manual ref/deref far outweigh keeping them in the arena.

        Reviewed by Adam Roben

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::CSSStyleSelector):
        (WebCore::CSSStyleSelector::~CSSStyleSelector):
        (WebCore::CSSStyleSelector::styleForElement):
        (WebCore::CSSStyleSelector::keyframeStylesForAnimation):
        (WebCore::CSSStyleSelector::pseudoStyleForElement):
        These methods now return a PassRefPtr.  They will null out the m_style variable as they hand it back
        so that it isn't left pointing to the previous style resolve RenderStyle (which is what the old code did).

        (WebCore::CSSStyleSelector::updateFont):
        (WebCore::CSSStyleSelector::checkSelector):
        (WebCore::CSSStyleSelector::applyProperty):
        (WebCore::CSSStyleSelector::mapFillSize):
        (WebCore::CSSStyleSelector::mapFillXPosition):
        (WebCore::CSSStyleSelector::mapFillYPosition):
        * css/CSSStyleSelector.h:
        (WebCore::CSSStyleSelector::style):
        * dom/Document.cpp:
        (WebCore::Document::recalcStyle):
        * dom/Element.cpp:
        (WebCore::Element::styleForRenderer):
        (WebCore::Element::recalcStyle):
        (WebCore::Element::computedStyle):
        * dom/Element.h:
        * dom/ElementRareData.h:
        (WebCore::ElementRareData::ElementRareData):
        (WebCore::ElementRareData::resetComputedStyle):
        * dom/Node.cpp:
        (WebCore::Node::diff):
        (WebCore::Node::createRendererIfNeeded):
        (WebCore::Node::styleForRenderer):
        (WebCore::Node::setRenderStyle):
        * dom/Node.h:
        * html/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::setFont):
        * html/HTMLOptGroupElement.cpp:
        (WebCore::HTMLOptGroupElement::attach):
        (WebCore::HTMLOptGroupElement::detach):
        (WebCore::HTMLOptGroupElement::setRenderStyle):
        (WebCore::HTMLOptGroupElement::nonRendererRenderStyle):
        * html/HTMLOptGroupElement.h:
        * html/HTMLOptionElement.cpp:
        (WebCore::HTMLOptionElement::attach):
        (WebCore::HTMLOptionElement::detach):
        (WebCore::HTMLOptionElement::setRenderStyle):
        (WebCore::HTMLOptionElement::nonRendererRenderStyle):
        * html/HTMLOptionElement.h:
        * page/animation/AnimationBase.h:
        (WebCore::AnimationBase::animate):
        * page/animation/AnimationController.cpp:
        (WebCore::AnimationController::updateAnimations):
        * page/animation/AnimationController.h:
        * page/animation/CompositeAnimation.cpp:
        (WebCore::CompositeAnimationPrivate::updateTransitions):
        (WebCore::CompositeAnimationPrivate::updateKeyframeAnimations):
        (WebCore::CompositeAnimationPrivate::animate):
        (WebCore::CompositeAnimation::animate):
        * page/animation/CompositeAnimation.h:
        * page/animation/ImplicitAnimation.cpp:
        (WebCore::ImplicitAnimation::ImplicitAnimation):
        (WebCore::ImplicitAnimation::~ImplicitAnimation):
        (WebCore::ImplicitAnimation::animate):
        (WebCore::ImplicitAnimation::reset):
        (WebCore::ImplicitAnimation::isTargetPropertyEqual):
        (WebCore::ImplicitAnimation::blendPropertyValueInStyle):
        * page/animation/ImplicitAnimation.h:
        (WebCore::ImplicitAnimation::create):
        * page/animation/KeyframeAnimation.cpp:
        (WebCore::KeyframeAnimation::KeyframeAnimation):
        (WebCore::KeyframeAnimation::~KeyframeAnimation):
        (WebCore::KeyframeAnimation::animate):
        (WebCore::KeyframeAnimation::validateTransformFunctionList):
        * page/animation/KeyframeAnimation.h:
        (WebCore::KeyframeAnimation::create):
        (WebCore::KeyframeAnimation::unanimatedStyle):
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paint):
        * rendering/MediaControlElements.cpp:
        (WebCore::MediaControlShadowRootElement::MediaControlShadowRootElement):
        (WebCore::MediaControlInputElement::MediaControlInputElement):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::styleDidChange):
        (WebCore::RenderBlock::updateFirstLetter):
        * rendering/RenderContainer.cpp:
        (WebCore::RenderContainer::addChild):
        (WebCore::RenderContainer::updateBeforeAfterContentForContainer):
        * rendering/RenderFileUploadControl.cpp:
        (WebCore::RenderFileUploadControl::updateFromElement):
        (WebCore::RenderFileUploadControl::createButtonStyle):
        * rendering/RenderFileUploadControl.h:
        * rendering/RenderFlow.cpp:
        (WebCore::RenderFlow::createAnonymousFlow):
        * rendering/RenderFlow.h:
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::addChildToFlow):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateScrollCornerStyle):
        (WebCore::RenderLayer::updateResizerStyle):
        (WebCore::RenderLayer::updateReflectionStyle):
        * rendering/RenderListItem.cpp:
        (WebCore::RenderListItem::styleDidChange):
        * rendering/RenderMedia.cpp:
        (WebCore::RenderMedia::createPanel):
        (WebCore::RenderMedia::createTimeDisplay):
        (WebCore::RenderMedia::changeOpacity):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::selectionBackgroundColor):
        (WebCore::RenderObject::selectionForegroundColor):
        (WebCore::RenderObject::createAnonymousBlock):
        (WebCore::RenderObject::setAnimatableStyle):
        (WebCore::RenderObject::setStyle):
        (WebCore::RenderObject::setStyleInternal):
        (WebCore::RenderObject::arenaDelete):
        (WebCore::RenderObject::firstLineStyle):
        (WebCore::RenderObject::getPseudoStyle):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::style):
        * rendering/RenderSVGBlock.cpp:
        (WebCore::RenderSVGBlock::setStyle):
        * rendering/RenderSVGBlock.h:
        * rendering/RenderScrollbar.cpp:
        (WebCore::RenderScrollbar::getScrollbarPseudoStyle):
        (WebCore::RenderScrollbar::updateScrollbarPart):
        * rendering/RenderScrollbar.h:
        * rendering/RenderSlider.cpp:
        (WebCore::RenderSlider::styleDidChange):
        (WebCore::RenderSlider::createThumbStyle):
        (WebCore::RenderSlider::updateFromElement):
        * rendering/RenderSlider.h:
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::addChild):
        * rendering/RenderTableRow.cpp:
        (WebCore::RenderTableRow::addChild):
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::addChild):
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::styleDidChange):
        (WebCore::RenderTextControl::createInnerBlockStyle):
        (WebCore::RenderTextControl::createInnerTextStyle):
        (WebCore::RenderTextControl::createResultsButtonStyle):
        (WebCore::RenderTextControl::createCancelButtonStyle):
        (WebCore::RenderTextControl::createSubtreeIfNeeded):
        (WebCore::RenderTextControl::updatePlaceholderVisibility):
        * rendering/RenderTextControl.h:
        * rendering/TextControlInnerElements.cpp:
        (WebCore::TextControlInnerElement::attachInnerElement):
        * rendering/TextControlInnerElements.h:
        * rendering/style/KeyframeList.cpp:
        (WebCore::KeyframeList::clear):
        (WebCore::KeyframeList::operator==):
        (WebCore::KeyframeList::insert):
        * rendering/style/KeyframeList.h:
        (WebCore::KeyframeValue::KeyframeValue):
        (WebCore::KeyframeValue::~KeyframeValue):
        (WebCore::KeyframeValue::key):
        (WebCore::KeyframeValue::style):
        * rendering/style/RenderStyle.cpp:
        (WebCore::defaultStyle):
        (WebCore::RenderStyle::create):
        (WebCore::RenderStyle::createDefaultStyle):
        (WebCore::RenderStyle::clone):
        (WebCore::RenderStyle::RenderStyle):
        (WebCore::RenderStyle::getCachedPseudoStyle):
        (WebCore::RenderStyle::addCachedPseudoStyle):
        * rendering/style/RenderStyle.h:
        (WebCore::):
        (WebCore::InheritedFlags::operator!=):
        * svg/SVGClipPathElement.cpp:
        (WebCore::SVGClipPathElement::canvasResource):
        * svg/SVGGradientElement.cpp:
        (WebCore::SVGGradientElement::buildStops):
        * svg/SVGStyledElement.cpp:
        (WebCore::SVGStyledElement::resolveStyle):
        * svg/SVGStyledElement.h:
        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::recalcStyle):
        (WebCore::SVGUseElement::attachShadowTree):

2008-10-16  Kenneth Russell  <kenneth.russell@sun.com>

        Reviewed and landed by Anders Carlsson.

        https://bugs.webkit.org/show_bug.cgi?id=21587
        NPN_PluginThreadAsyncCall does not work properly

        * plugins/PluginMainThreadScheduler.cpp:
        (WebCore::PluginMainThreadScheduler::dispatchCalls):
        Make sure to set m_callPending to false once the queue has been cleared.

2008-10-15  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=21609
        Make MessagePorts protect their peers across heaps

        * dom/MessagePort.cpp:
        (WebCore::MessagePort::MessagePort):
        * dom/MessagePort.h:
        (WebCore::MessagePort::setJSWrapperIsKnownToBeInaccessible):
        (WebCore::MessagePort::jsWrapperIsKnownToBeInaccessible):
        Track objects whose JS wrappers are no longer reachable in MessagePort. Unfortunately, this
        means that the implementation object knows about JS bindings - but it is not possible to
        access JS wrappers from another heap/thread.

        * bindings/js/JSDOMBinding.cpp:
        (WebCore::markCrossHeapDependentObjectsForDocument):
        * bindings/js/JSDOMBinding.h:
        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::markCrossHeapDependentObjects):
        * bindings/js/JSDOMWindowBase.h:
        Implement cross-heap dependency tracking for entangled MessagePorts. If a wrapper object
        hasn't been marked normally, it is marked as inaccessible. It is then marked manually,
        as long as its entangled port is accessible itself.

2008-10-15  Jon Honeycutt  <jhoneycutt@apple.com>

        Remove unneeded check of whether a Page defers loading before running it
        in a modal dialog.

        No test possible.

        Reviewed by Tim Hatcher.

        * page/Chrome.cpp:

2008-10-15  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Cameron Zwarich.

        Fixed https://bugs.webkit.org/show_bug.cgi?id=21345
        Start the debugger without reloading the inspected page

        * WebCore.base.exp: New symbols.

        * ForwardingHeaders/kjs/CollectorHeapIterator.h: Copied from ForwardingHeaders/kjs/ustring.h.
        * ForwardingHeaders/kjs/Parser.h: Copied from ForwardingHeaders/kjs/ustring.h.
        * WebCore.xcodeproj/project.pbxproj: New forwarding headers.

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::setWindowVisible):
        (WebCore::InspectorController::windowScriptObjectAvailable):
        (WebCore::InspectorController::startDebugging):
        * inspector/InspectorController.h: Renamed startDebuggingAndReloadInspectedPage
        to startDebugging, and changed its behavior to match.

        * inspector/JavaScriptDebugListener.h:
        * inspector/JavaScriptDebugServer.cpp:
        (WebCore::JavaScriptDebugServer::JavaScriptDebugServer):
        (WebCore::JavaScriptDebugServer::addListener):
        (WebCore::JavaScriptDebugServer::removeListener):
        (WebCore::JavaScriptDebugServer::recompileAllJSFunctions):
        (WebCore::JavaScriptDebugServer::willAddFirstListener):
        (WebCore::JavaScriptDebugServer::didRemoveLastListener):
        * inspector/JavaScriptDebugServer.h: Refactored the
        JavaScriptDebugServer to centralize handling of adding the first listener
        and removing the last. Then, added a feature to recompile all JS functions
        in these cases. This allows us to dynamically add and remove hooks like
        the debugger hooks without reloading the page.

        * inspector/front-end/ScriptsPanel.js:
        * English.lproj/localizedStrings.js: Updated for startDebuggingAndReloadInspectedPage =>
        startDebugging rename. Removed all UI that claimed that starting the
        debugger would reload the page.

2008-10-15  Adele Peterson  <adele@apple.com>

        Attempt to fix the Tiger build.

        * platform/network/mac/ResourceHandleMac.mm:

2008-10-15  Holger Hans Peter Freyther  <zecke@selfish.org>

        Build fix attempt.

        Try to fix static/non-static declaration of g_string_append_uri_escape
        by renaming that string. Another look needs to be taken.

        * platform/gtk/guriescape.c:
        (_webcore_g_string_append_uri_escaped):
        (_webcore_g_uri_escape_string):

2008-10-15  Holger Hans Peter Freyther  <zecke@selfish.org>

        Build fix.

        m_animatingImageType is gone.

        * platform/graphics/cairo/ImageCairo.cpp:
        (WebCore::BitmapImage::BitmapImage):

2008-10-15  Jeff Cook <cookiecaper@gmail.com>

        Reviewed by Holger Freyther.

        Stop SIGSEGV when leaving a page with a Flash object by reordering
        window destruction and plugin stop.

        See https://bugs.webkit.org/show_bug.cgi?id=20779

        * plugins/gtk/PluginViewGtk.cpp:
        (WebCore::PluginView::stop):

2008-10-15  Adele Peterson  <adele@apple.com>

        Reviewed by Sam Weinig.

        Implement didSendBodyData delegate method, and use older code path when that delegate doesn't exist.

        * platform/network/ResourceHandle.h:
        * platform/network/mac/FormDataStreamMac.mm: (WebCore::formRead):
        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::didSendBodyDataDelegateExists):
        (WebCore::ResourceHandle::start):
        (WebCore::ResourceHandle::cancel):
        (-[WebCoreResourceHandleAsDelegate connection:willSendRequest:redirectResponse:]):
        (-[WebCoreResourceHandleAsDelegate connection:didSendBodyData:totalBytesWritten:totalBytesExpectedToWrite:]):
        (-[WebCoreResourceHandleAsDelegate connectionDidFinishLoading:]):
        (-[WebCoreResourceHandleAsDelegate connection:didFailWithError:]):

2008-10-15  Peter Kasting  <pkasting@google.com>

        Reviewed by David Hyatt.

        Qt build bustage fix.

        * platform/graphics/qt/StillImageQt.h:
        (WebCore::StillImage::destroyDecodedData):

2008-10-15  David Hyatt  <hyatt@apple.com>

        Make sure scrollbar styles get deleted if they aren't assigned to a renderer.

        Reviewed by Mark Rowe

        * rendering/RenderScrollbar.cpp:
        (WebCore::RenderScrollbar::getScrollbarPseudoStyle):
        (WebCore::RenderScrollbar::updateScrollbarPart):

2008-10-15  Peter Kasting  <pkasting@google.com>

        Reviewed by David Hyatt.

        https://bugs.webkit.org/show_bug.cgi?id=19663 (Second attempt)
        Account for paint and timer lag when animating images.  Also pretend
        that images whose animations were paused (by becoming invisible)
        continued to animate, by "catching up" to the correct frame when they're
        shown again.

        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::BitmapImage):
        (WebCore::BitmapImage::destroyDecodedData):
        (WebCore::BitmapImage::cacheFrame):
        (WebCore::BitmapImage::frameIsCompleteAtIndex):
        (WebCore::BitmapImage::frameDurationAtIndex):
        (WebCore::BitmapImage::frameHasAlphaAtIndex):
        (WebCore::BitmapImage::repetitionCount):
        (WebCore::BitmapImage::shouldAnimate):
        (WebCore::BitmapImage::startAnimation):
        (WebCore::BitmapImage::resetAnimation):
        (WebCore::BitmapImage::advanceAnimation):
        (WebCore::BitmapImage::internalAdvanceAnimation):
        (WebCore::BitmapImage::notifyObserverAndTrimDecodedData):
        * platform/graphics/BitmapImage.h:
        (WebCore::FrameData::FrameData):
        (WebCore::BitmapImage::):
        * platform/graphics/GeneratedImage.h:
        (WebCore::GeneratedImage::destroyDecodedData):
        * platform/graphics/Image.h:
        * platform/graphics/cairo/ImageCairo.cpp:
        (WebCore::FrameData::clear):
        (WebCore::BitmapImage::BitmapImage):
        (WebCore::BitmapImage::draw):
        * platform/graphics/cg/ImageCG.cpp:
        (WebCore::FrameData::clear):
        (WebCore::BitmapImage::BitmapImage):
        (WebCore::BitmapImage::draw):
        * platform/graphics/cg/PDFDocumentImage.h:
        (WebCore::PDFDocumentImage::destroyDecodedData):
        * platform/graphics/qt/ImageQt.cpp:
        (WebCore::FrameData::clear):
        (WebCore::BitmapImage::draw):
        * platform/graphics/wx/ImageWx.cpp:
        (WebCore::FrameData::clear):
        (WebCore::BitmapImage::draw):
        * svg/graphics/SVGImage.h:
        (WebCore::SVGImage::destroyDecodedData):

2008-10-14  Maxime Britto  <britto@apple.com>

        Reviewed by Darin Adler, tweaked and landed by Beth.

        * WebCore.base.exp: Exposes two functions to be able to create a
        selection from a point on the screen. Also exposes the new
        TextIterator::currentNode function.
        * WebCore/editing/TextIterator.cpp:
        (TextIterator::currentNode) : New function that returns the current
        text node or NULL if there is no text node.

2008-10-15  Marco Barisione  <marco.barisione@collabora.co.uk>

        Reviewed by Holger Freyther.

        http://bugs.webkit.org/show_bug.cgi?id=21211
        [CURL] Upload doesn't work because cancel is called

        FormDataStream::read returns 0 when retrieving data from the form
        fails, but also when there is no more data to send. This means that
        ResourceHandleManager::cancel is always called even when the data was
        successfully sent.

        Check if there are more elements in the form before calling
        FormDataStream::read.

        * platform/network/curl/FormDataStreamCurl.cpp:
        (WebCore::FormDataStream::hasMoreElements):
        * platform/network/curl/FormDataStreamCurl.h:
        * platform/network/curl/ResourceHandleManager.cpp:
        (WebCore::readCallback):

2008-10-15  Marco Barisione  <marco.barisione@collabora.co.uk>

        Reviewed by Holger Freyther.

        http://bugs.webkit.org/show_bug.cgi?id=20664
        [GTK] File names are not always encodable in UTF-8

        On Linux file names are just raw data and cannot always be directly
        encoded in UTF-8 or in any other encodings, so we escape them before
        storing the file name in a String and unescape them before passing
        them to native functions handling files.

        * GNUmakefile.am:
        * platform/FileSystem.h:
        * platform/gtk/FileChooserGtk.cpp:
        (WebCore::stringByAdoptingFileSystemRepresentation):
        (WebCore::FileChooser::basenameForWidth):
        * platform/gtk/FileSystemGtk.cpp:
        (WebCore::filenameToString):
        (WebCore::filenameFromString):
        (WebCore::filenameForDisplay):
        (WebCore::fileExists):
        (WebCore::deleteFile):
        (WebCore::deleteEmptyDirectory):
        (WebCore::getFileSize):
        (WebCore::getFileModificationTime):
        (WebCore::makeAllDirectories):
        (WebCore::homeDirectoryPath):
        (WebCore::pathGetFileName):
        (WebCore::listDirectory):
        * platform/gtk/KURLGtk.cpp:
        (WebCore::KURL::fileSystemPath):
        * platform/gtk/SharedBufferGtk.cpp:
        (WebCore::SharedBuffer::createWithContentsOfFile):
        * platform/gtk/guriescape.c: Added.
        (is_valid):
        (gunichar_ok):
        (g_string_append_uri_escaped):
        (_webcore_g_uri_escape_string):
        * platform/gtk/guriescape.h: Added.

2008-10-15  Dirk Schulze  <vbs85@gmx.de>

        Reviewed by Eric Seidel.

        - part of https://bugs.webkit.org/show_bug.cgi?id=20543
          Moved gradient spread method out of SVG into the GraphicsContext.

        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::spreadMethod):
        (WebCore::GraphicsContext::setSpreadMethod):
        * platform/graphics/GraphicsContext.h:
        (WebCore::):
        * platform/graphics/GraphicsContextPrivate.h:
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::applySpreadMethod):
        (WebCore::GraphicsContext::fillPath):
        (WebCore::GraphicsContext::strokePath):
        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::applySpreadMethod):
        (WebCore::GraphicsContext::fillPath):
        (WebCore::GraphicsContext::strokePath):
        * svg/GradientAttributes.h:
        (WebCore::GradientAttributes::GradientAttributes):
        (WebCore::GradientAttributes::spreadMethod):
        (WebCore::GradientAttributes::setSpreadMethod):
        * svg/SVGGradientElement.cpp:
        (WebCore::SVGGradientElement::parseMappedAttribute):
        * svg/SVGGradientElement.h:
        * svg/SVGLinearGradientElement.cpp:
        (WebCore::SVGLinearGradientElement::collectGradientProperties):
        * svg/SVGRadialGradientElement.cpp:
        (WebCore::SVGRadialGradientElement::collectGradientProperties):
        * svg/graphics/SVGPaintServerGradient.cpp:
        (WebCore::operator<<):
        (WebCore::SVGPaintServerGradient::SVGPaintServerGradient):
        (WebCore::SVGPaintServerGradient::spreadMethod):
        (WebCore::SVGPaintServerGradient::setGradientSpreadMethod):
        (WebCore::SVGPaintServerGradient::externalRepresentation):
        * svg/graphics/SVGPaintServerGradient.h:
        * svg/graphics/cairo/SVGPaintServerGradientCairo.cpp:
        (WebCore::SVGPaintServerGradient::setup):
        * svg/graphics/qt/SVGPaintServerGradientQt.cpp:
        (WebCore::SVGPaintServerGradient::setup):

2008-10-09  Darin Fisher  <darin@chromium.org>

        Reviewed by Sam Weinig.

        Make pan scrolling a platform configurable option
        https://bugs.webkit.org/show_bug.cgi?id=21515

        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleAutoscroll):
        (WebCore::EventHandler::autoscrollTimerFired):
        (WebCore::EventHandler::stopAutoscrollTimer):
        (WebCore::EventHandler::handleMousePressEvent):
        (WebCore::EventHandler::keyEvent):

2008-10-10  Darin Fisher  <darin@chromium.org>

        Reviewed by Darin Adler.

        Add some PLATFORM(CHROMIUM) ifdefs to WebCore
        https://bugs.webkit.org/show_bug.cgi?id=21511

        * loader/FTPDirectoryDocument.cpp:
        * loader/FTPDirectoryParser.cpp:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::finishedLoadingDocument):
        * platform/ContextMenuItem.h:
        * platform/Cursor.h:
        * platform/DragData.h:
        * platform/DragImage.h:
        * platform/Pasteboard.h:
        * platform/PlatformKeyboardEvent.h:
        (WebCore::PlatformKeyboardEvent::isSystemKey):
        * platform/PlatformMenuDescription.h:
        * platform/PlatformMouseEvent.h:
        * platform/PlatformWheelEvent.h:
        * platform/PopupMenu.h:
        * platform/ScrollView.h:
        * platform/Widget.h:
        * platform/network/NetworkStateNotifier.h:

2008-10-14  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Darin Adler.

        Fixed https://bugs.webkit.org/show_bug.cgi?id=21490
        Optimize keyframe style sheet changes by avoiding styleSheetChanged()

        Test: css3/change-keyframes.html

        * css/WebKitCSSKeyframesRule.cpp:
        (WebCore::WebKitCSSKeyframesRule::append):
        (WebCore::WebKitCSSKeyframesRule::deleteRule):

2008-10-14  David Hyatt  <hyatt@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=21595

        Clean up background and overflow propagation from the body to the viewport.  Make it match the
        latest CSS2.1 spec thinking.

        Reviewed by Adam Roben

        Added many tests at fast/body-propagation/.  These are Simon Pieters' tests of propagation handling
        (available at http://simon.html5.org/test/css/magic-body/).

        * dom/Document.cpp:
        (WebCore::Document::body):
        * page/FrameView.cpp:
        (WebCore::FrameView::layout):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::styleDidChange):
        (WebCore::RenderBox::paintRootBoxDecorations):
        (WebCore::RenderBox::paintBoxDecorations):
        (WebCore::RenderBox::repaintLayerRectsForImage):

2008-10-14  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed and landed by Sam Weinig.

        Due to change in spec (http://dev.w3.org/2006/webapi/selectors-api/#namespace),
        remove NSResolver code, leaving only checking for selectors that need
        NS resolution and throwing a coresponding error.

        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * bindings/js/JSDocumentCustom.cpp:
        * bindings/js/JSDocumentFragmentCustom.cpp:
        * bindings/js/JSElementCustom.cpp:
        * bindings/js/JSNSResolver.cpp: Removed.
        * bindings/js/JSNSResolver.h: Removed.
        * dom/Document.idl:
        * dom/DocumentFragment.idl:
        * dom/Element.idl:
        * dom/NSResolver.h: Removed.
        * dom/NSResolver.idl: Removed.
        * dom/Node.h:
        * dom/Node.cpp:
        (WebCore::forEachTagSelector):
        (WebCore::SelectorNeedsNamespaceResolutionFunctor::operator()):
        (WebCore::selectorNeedsNamespaceResolution):
        (WebCore::Node::querySelector):
        (WebCore::Node::querySelectorAll):

2008-10-14  Darin Adler  <darin@apple.com>

        Reviewed by Sam Weinig (all but the FormDataListItem rename).

        - https://bugs.webkit.org/show_bug.cgi?id=21593
          Bug 21593: add multiple-file support to HTMLFormElement

        * html/FormDataList.cpp: Removed appendFile since it's now inline.
        Also took incorrect old copyrights off of this file that are left
        over from when it was split.
        * html/FormDataList.h: Ditto. Renamed FormDataListItem to Item and
        made it a member of FormDataList. Changed it to hold a File object
        instead of a path. And made its data members private. Changed
        FormDataList::appendFile accordingly.

        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::formData): Updated for above changes.
        Removed the code that special-cases HTMLInputElement, because now
        the FormDataListItem has everything we need. And if there are
        multiple files, we'll get multiple list items for them.

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::appendFormData): Changed the code for
        <input type=file> to use File objects instead of path strings and
        also to append multiple files if the file list has them.

2008-10-14  Tor Arne Vestbø  <tavestbo@trolltech.com>

        Reviewed by Simon.

        Fix QtWebKit scrollbar painting errors

        * platform/qt/ScrollbarThemeQt.cpp:
        (WebCore::ScrollbarThemeQt::paint):
        (WebCore::ScrollbarThemeQt::paintScrollCorner):

2008-10-14  Tor Arne Vestbø  <tavestbo@trolltech.com>

        Reviewed by Simon.

        Fix scrollbar arrows for horizontal scrollbars

        * platform/qt/ScrollbarThemeQt.cpp:
        (WebCore::styleOptionSlider):

2008-10-14  Tor Arne Vestbø  <tavestbo@trolltech.com>

        Reviewed by Simon.

        Use style-painter to draw scrollbars in ScrollbarThemeQt

        This has the benefit of setting up the painter properly without
        antialiasing and saving and restoring the brush. It also ensures
        that we use the style of the QWebView over the QApplication style
        if possible.

        * platform/qt/RenderThemeQt.cpp:
        (WebCore::StylePainter::StylePainter):
        (WebCore::StylePainter::init):
        * platform/qt/RenderThemeQt.h:
        * platform/qt/ScrollbarThemeQt.cpp:
        (WebCore::ScrollbarThemeQt::paint):

2008-10-13  David Hyatt  <hyatt@apple.com>

        Add support for CSS transitions on some SVG properties.  This patch is intended to be a guideline
        for how to add support for the rest.

        Reviewed by Oliver Hunt

        * page/animation/AnimationBase.cpp:
        (WebCore::ensurePropertyMap):
        * rendering/style/RenderStyle.h:
        (WebCore::RenderStyle::fillOpacity):
        (WebCore::RenderStyle::setFillOpacity):
        (WebCore::RenderStyle::strokeOpacity):
        (WebCore::RenderStyle::setStrokeOpacity):
        (WebCore::RenderStyle::floodOpacity):
        (WebCore::RenderStyle::setFloodOpacity):

2008-10-13  David Hyatt  <hyatt@apple.com>

        <rdar://problem/6289712> REGRESSION(r37432-37490): Scroll bar is not drawn in Bookmark View, Preferences sheets.

        Fix for disabled scrollbars not painting in Windows Safari.  Make sure that the Windows theme
        implements paintTrackBackground so that when the thumb is not present the track still paints.

        Reviewed by Oliver Hunt

        * platform/ScrollbarThemeComposite.cpp:
        (WebCore::ScrollbarThemeComposite::paint):
        * platform/win/ScrollbarThemeWin.cpp:
        (WebCore::ScrollbarThemeWin::paintTrackBackground):
        * platform/win/ScrollbarThemeWin.h:

2008-10-13  David Hyatt  <hyatt@apple.com>

        Fix over-invalidation of native scrollbars.

        Reviewed by Oliver Hunt

        * platform/Scrollbar.h:
        (WebCore::Scrollbar::styleChanged):
        * platform/mac/ScrollbarThemeMac.mm:
        (+[ScrollbarPrefsObserver appearancePrefsChanged:]):
        * rendering/RenderScrollbar.cpp:
        (WebCore::RenderScrollbar::styleChanged):

2008-10-13  Alp Toker  <alp@nuanti.com>

        Fix autotools dist build target by listing recently added header
        files only. Not reviewed.

        * GNUmakefile.am:

2008-10-13  Mark Rowe  <mrowe@apple.com>

        Reviewed by Brady Eidson.

        Don't run a SQLite query on every iteration of the sync thread when the query
        will touch a large portion of the icon database while performing no useful work.

        * loader/icon/IconDatabase.cpp:
        (WebCore::IconDatabase::writeToDatabase): Don't call checkForDanglingPageURLs unless
        we modified the database.
        (WebCore::IconDatabase::checkForDanglingPageURLs): Don't do any work in a release build
        unless we've been asked to prune any dangling pageURLs that we find.

2008-10-13  Maciej Stachowiak  <mjs@apple.com>

        Rubber stamped by Mark Rowe.

        - use gcc 4.2 when building with Xcode 3.1 or newer on Leopard, even though this is not the default

        * Configurations/DebugRelease.xcconfig:

2008-10-13  David Hyatt  <hyatt@apple.com>

        Make dropdown lists on Windows work with CSS custom scrollbars.

        Reviewed by Adele

        * platform/PopupMenu.h:
        (WebCore::PopupMenu::scrollbarCornerPresent):
        * platform/PopupMenuClient.h:
        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenu::show):
        * rendering/RenderMenuList.cpp:
        (WebCore::RenderMenuList::createScrollbar):
        * rendering/RenderMenuList.h:
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::createScrollbar):
        * rendering/RenderTextControl.h:

2008-10-13  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Beth Dakin.

        <rdar://problem/6271864> Links from image maps not being included in AXLinkUIElements

        Links from image maps were not being included in the web area's AXLinkUIElements attribute.
        The position of image map links was being reported incorrectly and the parent-chain
        hierarchy for image map links was incorrect because image map links did not have a reference
        to their parent image.

        Test: accessibility/document-links.html

        * page/AccessibilityImageMapLink.cpp:
        (WebCore::AccessibilityImageMapLink::parentObject):
        (WebCore::AccessibilityImageMapLink::actionElement):
        (WebCore::AccessibilityImageMapLink::elementRect):
        * page/AccessibilityImageMapLink.h:
        (WebCore::AccessibilityImageMapLink::setHTMLMapElement):
        (WebCore::AccessibilityImageMapLink::setParent):
        * page/AccessibilityObject.cpp:
        * page/AccessibilityObject.h:
        * page/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::accessibilityParentForImageMap):
        (WebCore::AccessibilityRenderObject::getDocumentLinks):
        (WebCore::AccessibilityRenderObject::addChildren):
        * page/AccessibilityRenderObject.h:
        * page/mac/AccessibilityObjectWrapper.mm:
        (-[AccessibilityObjectWrapper accessibilityAttributeValue:]):

2008-10-13  David Hyatt  <hyatt@apple.com>

        Make RenderListBox work with CSS scrollbars.  Refactoring this code to support creation/destruction in
        the same way RenderLayer does also fixes a bug where the PLT would assert on the next-to-last page (no
        idea how to make a test case for that, though, since I couldn't repro without running the whole PLT).

        Reviewed by Tim Hatcher

        Added scrollbars/listbox-scrollbar-combinations.html

        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::~RenderListBox):
        (WebCore::RenderListBox::updateFromElement):
        (WebCore::RenderListBox::createScrollbar):
        (WebCore::RenderListBox::destroyScrollbar):
        (WebCore::RenderListBox::setHasVerticalScrollbar):
        * rendering/RenderListBox.h:

2008-10-13  David Hyatt  <hyatt@apple.com>

        In order to always match the :corner-present pseudo-class properly, delay initial updating of
        scrollbar styles until the layer has the scrollbars in its member variables.

        Reviewed by Tim Hatcher

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::setHasHorizontalScrollbar):
        (WebCore::RenderLayer::setHasVerticalScrollbar):
        * rendering/RenderScrollbar.cpp:
        (WebCore::RenderScrollbar::RenderScrollbar):

2008-10-13  Sam Weinig  <sam@webkit.org>

        Reviewed by Dan Bernstein.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=21577
        5 false positive StructureID leaks

        In WebCore, we intentionally leak the common JSGlobalData which in turn
        leaks 5 StructureIDs.  Use the new JSGlobalData::createLeaked in order to
        ignore the StructureIDs leaked within.

        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::commonJSGlobalData):

2008-10-13  David Hyatt  <hyatt@apple.com>

        Add support for the :corner-present pseudoclass, which enables scrollbar pieces to change their
        artwork based on whether there is a scrollbar corner present.

        Reviewed by Tim Hatcher

        * css/CSSSelector.cpp:
        (WebCore::CSSSelector::extractPseudoType):
        * css/CSSSelector.h:
        (WebCore::CSSSelector::):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::SelectorChecker::checkScrollbarPseudoClass):
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::scrollbarCornerPresent):
        * platform/ScrollView.h:
        * platform/ScrollbarClient.h:
        * rendering/RenderLayer.cpp:
        (WebCore::cornerRect):
        (WebCore::scrollCornerRect):
        (WebCore::resizerCornerRect):
        (WebCore::RenderLayer::scrollbarCornerPresent):
        (WebCore::RenderLayer::setHasHorizontalScrollbar):
        (WebCore::RenderLayer::setHasVerticalScrollbar):
        * rendering/RenderLayer.h:
        (WebCore::RenderLayer::horizontalScrollbar):
        (WebCore::RenderLayer::verticalScrollbar):
        * rendering/RenderListBox.h:
        (WebCore::RenderListBox::scrollbarCornerPresent):

2008-10-13  David Hyatt  <hyatt@apple.com>

        Make resizers and scrollbar corners respect :window-inactive (one more bug fix and then Tim's master
        test case for all this can land).

        Reviewed by Tim Hatcher

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::SelectorChecker::checkSelector):
        (WebCore::CSSStyleSelector::SelectorChecker::checkOneSelector):
        (WebCore::CSSStyleSelector::SelectorChecker::checkScrollbarPseudoClass):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paintOverflowControls):
        (WebCore::RenderLayer::paintScrollCorner):
        (WebCore::RenderLayer::paintResizer):
        (WebCore::RenderLayer::styleChanged):
        (WebCore::RenderLayer::updateScrollCornerStyle):
        (WebCore::RenderLayer::updateResizerStyle):
        * rendering/RenderLayer.h:
        * rendering/RenderScrollbar.cpp:
        (WebCore::RenderScrollbar::paint):
        * rendering/RenderScrollbarPart.cpp:
        (WebCore::RenderScrollbarPart::paintIntoRect):

2008-10-13  David Hyatt  <hyatt@apple.com>

        Rework resizer and scroll corner painting so that custom resizers and scroll corners will paint
        and invalidate properly as images load, etc.

        Reviewed by Tim Hatcher

        * rendering/RenderLayer.cpp:
        (WebCore::cornerRect):
        (WebCore::scrollCornerRect):
        (WebCore::resizerCornerRect):
        (WebCore::RenderLayer::positionOverflowControls):
        (WebCore::RenderLayer::paintOverflowControls):
        (WebCore::RenderLayer::paintScrollCorner):
        (WebCore::RenderLayer::paintResizer):
        (WebCore::RenderLayer::isPointInResizeControl):
        (WebCore::RenderLayer::hitTestOverflowControls):
        (WebCore::RenderLayer::styleChanged):
        * rendering/RenderLayer.h:
        * rendering/RenderObject.h:
        (WebCore::RenderObject::setRect):
        * rendering/RenderScrollbarPart.cpp:
        (WebCore::RenderScrollbarPart::styleDidChange):
        (WebCore::RenderScrollbarPart::imageChanged):

2008-10-13  Marco Barisione  <marco.barisione@collabora.co.uk>

        Reviewed by Darin Adler. Landed by Jan Alonzo.

        WebKit GTK Port needs a smartpointer to handle g_free (GFreePtr?)
        http://bugs.webkit.org/show_bug.cgi?id=20483

        Start the conversion to use GOwnPtr and fix a memory leak.

        * platform/graphics/gtk/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::mediaPlayerPrivateErrorCallback):

2008-10-12  Jon Honeycutt  <jhoneycutt@apple.com>

        Windows build fix.

        * loader/TextResourceDecoder.cpp:

2008-10-12  Darin Fisher  <darin@chromium.org>

        Reviewed by Darin Adler.

        - fix https://bugs.webkit.org/show_bug.cgi?id=21229
          Bug 21229: NetworkStateNotifier.h lacks a #include <windows.h> for PLATFORM(WIN)

        * platform/network/NetworkStateNotifier.h: Add the #include.

2008-10-12  Darin Adler  <darin@apple.com>

        Based on work by Holger Freyther.

        - part of https://bugs.webkit.org/show_bug.cgi?id=20953
          Split WidthIterator into its own source file.

        * GNUmakefile.am: Added new source files.
        * WebCore.vcproj/WebCore.vcproj: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * WebCoreSources.bkl: Ditto.

        * platform/graphics/Font.cpp: Use WidthIterator from its new place.
        * platform/graphics/WidthIterator.cpp: Added.
        * platform/graphics/WidthIterator.h: Added.

2008-10-12  Tony Chang  <tony@chromium.org>

        Reviewed by Sam Weinig.

        - https://bugs.webkit.org/show_bug.cgi?id=21480
          Remove duplicate definitions of MimeClassInfo and PluginInfo.

        * plugins/PluginInfoStore.cpp: Added an include.
        * plugins/PluginInfoStore.h: Removed struct declarations.

2008-10-12  Darin Adler  <darin@apple.com>

        Reviewed by Dan Bernstein.

        - https://bugs.webkit.org/show_bug.cgi?id=21563
          Bug 21563: platform Gradient class should not use the CSS parser

        * platform/graphics/Gradient.cpp: Removed the overload of addColorStop
        that accepts a CSS color string. That's handled in the DOM now, not here.
        (WebCore::Gradient::addColorStop): Use getRGBA instead of having our own
        copy of it here.
        * platform/graphics/Gradient.h: More of the same. Tweak formatting a bit.

2008-10-12  Glenn Wilson  <gwilson@google.com>

        Reviewed by Darin Adler.

        - https://bugs.webkit.org/show_bug.cgi?id=20461

        Added feature to allow multi-line inputs into text fields.
        HTMLInputElement would cut the set text at the first 'system' character,
        so it would truncate at the first carriage return or newline.
        This fix modifies that behavior to truncate at any non-space system character
        but changes \r, \n, and \r\n to a single space.

        Tests: editing/pasteboard/paste-multiline-text-input.html

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::constrainValue):

2008-10-12  Dirk Schulze  <vbs85@gmx.de>

        Reviewed by Eric Seidel.

        - https://bugs.webkit.org/show_bug.cgi?id=20435

        Added exception codes to canvas gradients to match current specification.

        Tests: fast/canvas/gradient-addColorStop-with-invalid-color.html
               fast/canvas/linearGradient-infinite-values.html
               fast/canvas/radialGradient-infinite-values.html

        * html/CanvasGradient.cpp:
        (WebCore::CanvasGradient::addColorStop):
        * html/CanvasGradient.h:
        * html/CanvasGradient.idl:
        * html/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::createLinearGradient):
        (WebCore::CanvasRenderingContext2D::createRadialGradient):
        * html/CanvasRenderingContext2D.h:
        * html/CanvasRenderingContext2D.idl:

2008-10-12  Eric Roman  <eroman@chromium.org>

        - https://bugs.webkit.org/show_bug.cgi?id=20246
          Implement RenderThemeWin::systemColor() to match Windows colors.

        Reviewed by David Hyatt.

        * rendering/RenderThemeWin.cpp:
        (WebCore::cssValueIdToSysColorIndex):
        (WebCore::RenderThemeWin::systemColor):
        * rendering/RenderThemeWin.h:

2008-10-12  Aaron Bockover  <abockover@novell.com>

        Reviewed by Alp Toker.

        Add version parsing for Flash, and the PluginQuirkDontSetNullWindowHandleOnDestroy
        plugin quirk if Flash 10 or newer since at least in b218, setting a NULL window
        handler on destroy crashes WebKit <https://bugs.webkit.org/show_bug.cgi?id=19859>

        * plugins/gtk/PluginPackageGtk.cpp:

2008-10-12  Jonathon Jongsma  <jonathon.jongsma@collabora.co.uk>

        Reviewed by Oliver Hunt.

        - https://bugs.webkit.org/show_bug.cgi?id=19331
          <rdar://problem/5984433>: Drag and drop of links in edit mode violates assert in MoveSelectionCommand::doApply()

        * page/DragController.cpp:
        (WebCore::DragController::startDrag): When a link is dragged without any
        text selected (note: for this to work, the EditableLinkBehavior setting must be
        set to 'live' or 'default') and then dropped into an editable html document it
        will eventually violate an ASSERT in MoveSelectionCommand that requires that there
        is a selection.  To prevent this, expand the selection to the enclosing anchor tag
        when the drag begins.

2008-10-12  Darin Adler  <darin@apple.com>

        Reviewed by Mark Rowe.

        - fix https://bugs.webkit.org/show_bug.cgi?id=21557
          Bug 21557: REGRESSION: generated-layer-scrollbar-crash.html is crashing

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::getPseudoStyle): Keep walking up the parent chain
        until we hit an Element. Nowadays, Node::isElementNode() is just as efficient
        as RenderObject::isText(), and this guarantees that the node can be cast to
        Element*, which is done just below. The reason this is hit is that RenderLayer
        can call getPseudoStyle on a RenderView, which has the document as its
        element() -- and a document is neither a Text node nor an Element. A loose
        end is that this seems to mean you can't style the scrollbar corner or the
        resizer on a RenderView. Hyatt may want to look into that later.

2008-10-12  Darin Adler  <darin@apple.com>

        Reviewed by Sam Weinig.

        - https://bugs.webkit.org/show_bug.cgi?id=21556
          Bug 21556: non-ASCII digits are allowed in places where only ASCII should be

        Tests: fast/dom/HTMLFontElement/size-attribute.html
               fast/dom/HTMLInputElement/size-attribute.html
               fast/dom/HTMLTableElement/cellpadding-attribute.html

        * html/HTMLFontElement.cpp:
        (WebCore::parseFontSizeNumber): Use isASCIIDigit instead of
        Unicode::isDigit, since non-ASCII digits are not valid here.
        * html/HTMLFontElement.h: Tweaked formatting a bit and removed
        the unneeded destructor declaration.
        * platform/text/String.cpp:
        (WebCore::lengthOfCharactersAsInteger): Use isASCIIDigit instead
        of Unicode::isDigit, since non-ASCII digits are not valid.

2008-10-12  Jungshik Shin  <jshin@chromium.org>

        Reviewed by Darin Adler.

        Treat x-user-defined as windows-1252 for html files with meta charset
        declaration to be compatible with Indian web sites.
        ( https://bugs.webkit.org/show_bug.cgi?id=18270 )

        Test: fast/encoding/charset-xuser-defined.html

        * loader/TextResourceDecoder.cpp:
        (WebCore::TextResourceDecoder::setEncoding):

2008-10-12  Sam Weinig  <sam@webkit.org>

        Reviewed by Dan Bernstein.

        Remove unneeded forward declaration.

        * platform/graphics/ImageBuffer.h:

2008-10-12  Sam Weinig  <sam@webkit.org>

        Reviewed by Darin Adler.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=21560
        Layering violation: String should not be responsible for creating Lengths

        It was a layering violation for String to know haw to parse
        into Lengths, LengthArrays, and CoordsArrays.

        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * html/HTMLAreaElement.cpp:
        (WebCore::HTMLAreaElement::parseMappedAttribute):
        * html/HTMLFrameSetElement.cpp:
        (WebCore::HTMLFrameSetElement::parseMappedAttribute):
        * platform/text/AtomicString.h:
        (WebCore::AtomicString::percentage):
        * platform/text/PlatformString.h:
        * platform/text/String.cpp:
        * platform/text/StringImpl.cpp:
        * platform/text/StringImpl.h:
        * rendering/Length.cpp: Added.
        (WebCore::parseLength):
        (WebCore::countCharacter):
        (WebCore::newCoordsArray):
        (WebCore::newLengthArray):
        * rendering/Length.h:
        (WebCore::LengthSize::LengthSize):

2008-10-12  Brad Garcia  <bgarcia@google.com>

        Reviewed by Darin Adler.

        Interpret fractional percentage values for %MultiLength values.
        Fix for https://bugs.webkit.org/show_bug.cgi?id=3591
        Test: fast/frames/frame-length-fractional-percentage.html

        * platform/text/StringImpl.cpp:
        (WebCore::parseLength):

2008-10-12  Timothy Hatcher  <timothy@apple.com>

        Remember the expanded state of the rules in the Styles pane. So
        collapsing a rule will persist across all the elements that have
        that same rule. The same applies to Computed Style, so the Computed
        Style rule is now collapsed by default. This should help lessen the
        confusion on why Computed Style can't be edited (a common confusion.)

        https://bugs.webkit.org/show_bug.cgi?id=21553

        Reviewed by Darin Adler.

        * inspector/front-end/PropertiesSection.js:
        (WebInspector.PropertiesSection): Set the _expanded property directly,
        instead of using the setter. Expanded is the default, so no work is needed.
        This prevents calling StylesSidebarPane.collapse before object initialization
        is complete.
        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylesSidebarPane.prototype.update): Check the Preferences object
        for the expanded state of the StylePropertiesSection. Collapse computed style
        by default and expand everything else.
        (WebInspector.StylePropertiesSection): Make a semi unique identifier to be used
        when remembering expanded state.
        (WebInspector.StylePropertiesSection.prototype.expand): Set the expanded state
        to true for this identifier in Preferences.styleRulesExpandedState. Don't remember
        the state if the dontRememberState property is true.
        (WebInspector.StylePropertiesSection.prototype.collapse): Set the expanded state
        to false for this identifier in Preferences.styleRulesExpandedState.
        * inspector/front-end/inspector.js:
        (Preferences.styleRulesExpandedState): Initialize to an empty object.

2008-10-12  Jan Michael Alonzo  <jmalonzo@webkit.org>

        Reviewed by Alp Toker.

        [Gtk] Remove libWebCoreJS.la when doing make clean
        https://bugs.webkit.org/show_bug.cgi?id=21544

        Remove libWebCoreJS.la when doing a clean target

        * GNUmakefile.am: add libWebCoreJS.la to CLEANFILES

2008-10-11  Alp Toker  <alp@nuanti.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=20592
        The focus ring is not shown while navigating on some pages

        Fix drawFocusRing() so it doesn't depend on the current graphics
        state, thus matching other platforms which already work this way.

        This patch provides two code paths: one using straight Cairo and
        one specialised for the GTK+ port with a more conventional appearance.

        Also change focusRingColor() to return a null color, allowing the
        focus ring to pick up the style's current color if it isn't overridden
        with CSS.

        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::drawFocusRing):
        * platform/gtk/TemporaryLinkStubs.cpp:
        (WebCore::focusRingColor):

2008-10-11  Dan Bernstein  <mitz@apple.com>

        Rubber-stamped by Sam Weinig.

        - change all internal callers to use Cache::evict() instead of remove()

        * loader/Cache.cpp:
        (WebCore::Cache::revalidateResource):
        (WebCore::Cache::revalidationSucceeded):
        (WebCore::Cache::pruneDeadResources):
        (WebCore::Cache::setDisabled):

2008-10-11  David Hyatt  <hyatt@apple.com>

        Make sure invalidatePart knows how to invalidate the track and scrollbar backgrounds.

        Reviewed by Tim Hatcher

        * platform/ScrollbarThemeComposite.cpp:
        (WebCore::ScrollbarThemeComposite::invalidatePart):

2008-10-11  David Hyatt  <hyatt@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=21549 (regression in before/after track pieces).

        Also fixed resizer positioning problems.

        Reviewed by Tim Hatcher

        * platform/ScrollbarThemeComposite.cpp:
        (WebCore::ScrollbarThemeComposite::splitTrack):
        (WebCore::ScrollbarThemeComposite::trackPosition):
        (WebCore::ScrollbarThemeComposite::trackLength):
        * platform/ScrollbarThemeComposite.h:
        (WebCore::ScrollbarThemeComposite::constrainTrackRectToTrackPieces):
        * rendering/RenderLayer.cpp:
        (WebCore::scrollCornerRect):
        (WebCore::RenderLayer::positionOverflowControls):
        (WebCore::RenderLayer::paintOverflowControls):
        (WebCore::RenderLayer::isPointInResizeControl):
        (WebCore::RenderLayer::hitTestOverflowControls):
        * rendering/RenderScrollbarTheme.cpp:
        (WebCore::RenderScrollbarTheme::constrainTrackRectToTrackPieces):
        * rendering/RenderScrollbarTheme.h:

2008-10-11  Alp Toker  <alp@nuanti.com>

        Reviewed by David Hyatt.

        Implement release/retain for Widget GTK+.

        * platform/Widget.cpp:
        * platform/gtk/WidgetGtk.cpp:
        (WebCore::Widget::~Widget):
        (WebCore::Widget::releasePlatformWidget):
        (WebCore::Widget::retainPlatformWidget):

2008-10-11  Dan Bernstein  <mitz@apple.com>

        Reviewed by Sam Weinig.

        - rename WebCoreSetAlwaysUseATSU to WebCoreSetAlwaysUsesComplexTextCodePath
          and add a corresponding getter; add the same functions on Windows

        * WebCore.base.exp:
        * platform/graphics/Font.cpp:
        (WebCore::Font::setCodePath):
        (WebCore::codePath):
        (WebCore::Font::canUseGlyphCache):
        * platform/graphics/Font.h:
        * platform/mac/WebCoreTextRenderer.h:
        * platform/mac/WebCoreTextRenderer.mm:
        (WebCoreSetAlwaysUsesComplexTextCodePath):
        (WebCoreAlwaysUsesComplexTextCodePath):
        * platform/win/WebCoreTextRenderer.cpp:
        (WebCore::WebCoreSetAlwaysUsesComplexTextCodePath):
        (WebCore::WebCoreAlwaysUsesComplexTextCodePath):
        * platform/win/WebCoreTextRenderer.h:

2008-10-11  Sam Weinig  <sam@webkit.org>

        Reviewed by Cameron Zwarich.

        Stop leaking the event parameter names.  The protected strings were showing up
        in the caches window after one use.  No measurable performance loss.

        * bindings/js/JSEventListener.cpp:
        (WebCore::eventParameterName):

2008-10-11  Sam Weinig  <sam@webkit.org>

        Reviewed by Cameron Zwarich.

        Remove unused function getNodeEventListener.

        * bindings/js/JSEventListener.cpp:
        * bindings/js/JSEventListener.h:

2008-10-11  David Hyatt  <hyatt@apple.com>

        Add support for both positive and negative margins to tracks and track pieces.

        Reviewed by Tim Hatcher

        * platform/ScrollbarThemeComposite.cpp:
        (WebCore::ScrollbarThemeComposite::paint):
        (WebCore::ScrollbarThemeComposite::hitTest):
        (WebCore::ScrollbarThemeComposite::splitTrack):
        (WebCore::ScrollbarThemeComposite::trackPieceRects):
        (WebCore::ScrollbarThemeComposite::trackPosition):
        (WebCore::ScrollbarThemeComposite::trackLength):
        * platform/ScrollbarThemeComposite.h:
        (WebCore::ScrollbarThemeComposite::adjustTrackPieceRect):
        * rendering/RenderScrollbar.cpp:
        (WebCore::RenderScrollbar::trackRect):
        (WebCore::RenderScrollbar::trackPieceRectWithMargins):
        * rendering/RenderScrollbar.h:
        * rendering/RenderScrollbarPart.cpp:
        (WebCore::RenderScrollbarPart::computeScrollbarWidth):
        (WebCore::RenderScrollbarPart::computeScrollbarHeight):
        * rendering/RenderScrollbarTheme.cpp:
        (WebCore::RenderScrollbarTheme::adjustTrackPieceRect):
        * rendering/RenderScrollbarTheme.h:

2008-10-10  David Hyatt  <hyatt@apple.com>

        Drop -webkit-scrollbar- from all the scrollbar pseudo-classes, since they are scoped to
        the scrollbar pseudo-elements anyway.

        Reviewed by Tim Hatcher

        * css/CSSSelector.cpp:
        (WebCore::CSSSelector::extractPseudoType):
        * css/CSSSelector.h:
        (WebCore::CSSSelector::):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::SelectorChecker::checkScrollbarPseudoClass):

2008-10-10  Dan Bernstein  <mitz@apple.com>

        Reviewed by Sam Weinig.

        - separate Cache::remove() into a private method and a public interface,
          then make Cache::pruneDeadResources() use the private method.

        * loader/Cache.cpp:
        (WebCore::Cache::pruneDeadResources):
        (WebCore::Cache::evict):
        * loader/Cache.h:
        (WebCore::Cache::remove):

2008-10-10  David Hyatt  <hyatt@apple.com>

        Fix a math error when splitting a vertical track.  Clean up more of ScrollbarThemeComposite
        now that the track pieces meet under the thumb.

        Reviewed by Tim Hatcher

        * platform/ScrollbarThemeComposite.cpp:
        (WebCore::ScrollbarThemeComposite::paint):
        (WebCore::ScrollbarThemeComposite::splitTrack):

2008-10-10  David Hyatt  <hyatt@apple.com>

        Make the track pieces of a scrollbar extend under the thumb (each gets half the thumb).

        Reviewed by Tim Hatcher

        * platform/ScrollbarThemeComposite.cpp:
        (WebCore::ScrollbarThemeComposite::hitTest):
        (WebCore::ScrollbarThemeComposite::splitTrack):

2008-10-10  David Hyatt  <hyatt@apple.com>

        Make sure specialized ::scrollbar rules are still triggering custom scrollbar creation.

        Reviewed by Tim Hatcher

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::createScrollbar):
        * rendering/RenderScrollbar.cpp:
        (WebCore::RenderScrollbar::createCustomScrollbar):
        (WebCore::RenderScrollbar::RenderScrollbar):
        (WebCore::RenderScrollbar::setParent):
        (WebCore::RenderScrollbar::updateScrollbarParts):
        (WebCore::RenderScrollbar::updateScrollbarPart):
        * rendering/RenderScrollbar.h:
        * rendering/style/RenderStyle.h:
        (WebCore::RenderStyle::):

2008-10-10  David Hyatt  <hyatt@apple.com>

        Make sure scrollbar background images cause proper part invalidation to occur.

        Reviewed by Tim Hatcher

        * rendering/RenderScrollbar.cpp:
        (WebCore::RenderScrollbar::setHoveredPart):
        (WebCore::RenderScrollbar::setPressedPart):
        * rendering/RenderScrollbarPart.cpp:
        (WebCore::RenderScrollbarPart::styleDidChange):
        (WebCore::RenderScrollbarPart::imageChanged):
        * rendering/RenderScrollbarPart.h:

2008-10-10  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Darin Adler

        https://bugs.webkit.org/show_bug.cgi?id=21538

        The blendFunc() for TransformOperations should never mess with the
        operation lists by replacing some ops with identity, otherwise the lists
        no longer match and transitions break.

        Test: transitions/matched-transform-functions.html

        * page/animation/AnimationBase.cpp:
        (WebCore::blendFunc):

2008-10-10  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Darin Adler

        https://bugs.webkit.org/show_bug.cgi?id=21537

        Fix re-targetting a running transition; if the target property
        changes, we do need to make a new ImplicitAnimation.

        Test: transitions/retargetted-transition.html

        * page/animation/CompositeAnimation.cpp:
        (WebCore::CompositeAnimationPrivate::updateTransitions):

2008-10-10  Oliver Hunt  <oliver@apple.com>

        Reviewed by Cameron Zwarich.

        Part of <rdar://problem/6278147> Cannot stop a slow script -- Fix assertion.

        When JS is terminated by the user choosing to stop a slow script
        the exception toString method throws, yet the console logger does
        not perform exception checks after logging.  This leaves an
        exception on the Machine, which in turn results in an assertion
        failure next time we attempt to enter JS.  The solution is just to
        clear the exception state after attempting to record the exception.

        * page/Console.cpp:
        (WebCore::Console::reportException):

2008-10-10  David Hyatt  <hyatt@apple.com>

        Make textareas work with custom CSS scrollbars and resizers.  Need to access the correct renderer
        when looking for pseudo styles.

        Reviewed by Tim Hatcher

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::createScrollbar):
        (WebCore::RenderLayer::styleChanged):

2008-10-10  David Hyatt  <hyatt@apple.com>

        Add the ability to style the scroll corner and the resizer from CSS.

        Reviewed by Tim Hatcher

        * css/CSSSelector.cpp:
        (WebCore::CSSSelector::extractPseudoType):
        * css/CSSSelector.h:
        (WebCore::CSSSelector::):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::SelectorChecker::checkOneSelector):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::RenderLayer):
        (WebCore::RenderLayer::~RenderLayer):
        (WebCore::RenderLayer::paintOverflowControls):
        (WebCore::RenderLayer::paintScrollCorner):
        (WebCore::RenderLayer::paintResizer):
        (WebCore::RenderLayer::styleChanged):
        * rendering/RenderLayer.h:
        * rendering/RenderScrollbar.cpp:
        (WebCore::RenderScrollbar::updateScrollbarPart):
        (WebCore::RenderScrollbar::paintPart):
        * rendering/RenderScrollbarPart.cpp:
        (WebCore::RenderScrollbarPart::RenderScrollbarPart):
        (WebCore::RenderScrollbarPart::paintIntoRect):
        * rendering/RenderScrollbarPart.h:
        * rendering/style/RenderStyle.h:
        (WebCore::RenderStyle::):

2008-10-10  David Hyatt  <hyatt@apple.com>

        Make CSS scrollbars respect the OS setting regarding where buttons should be placed.

        Reviewed by Sam Weinig

        No test case possible, since the OS setting can vary.

        * css/CSSSelector.cpp:
        (WebCore::CSSSelector::extractPseudoType):
        * css/CSSSelector.h:
        (WebCore::CSSSelector::):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::SelectorChecker::checkScrollbarPseudoClass):
        * platform/Scrollbar.h:
        (WebCore::Scrollbar::styleChanged):
        * platform/mac/ScrollbarThemeMac.mm:
        (+[ScrollbarPrefsObserver appearancePrefsChanged:]):
        (WebCore::ScrollbarThemeMac::preferencesChanged):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::invalidateScrollbarRect):
        * rendering/RenderScrollbar.cpp:
        (WebCore::RenderScrollbar::styleChanged):
        (WebCore::RenderScrollbar::updateScrollbarPart):
        * rendering/RenderScrollbar.h:
        * rendering/RenderScrollbarTheme.h:
        (WebCore::RenderScrollbarTheme::buttonsPlacement):

2008-10-10  Timothy Hatcher  <timothy@apple.com>

        Fixes a regression with input search fields, where the placeholder text
        would not be updated when the value of the placeholder attribute changed.

        https://bugs.webkit.org/show_bug.cgi?id=21521

        Reviewed by Adele Peterson.

        Test: fast/forms/search-placeholder-value-changed.html

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::parseMappedAttribute): Pass true for the
        placeholderValueChanged parameter of updatePlaceholderVisibility.
        (WebCore::HTMLInputElement::updatePlaceholderVisibility): Add parameter
        for placeholderValueChanged that informs the method that the value changed.
        * html/HTMLInputElement.h: Add the placeholderValueChanged to the
        updatePlaceholderVisibility method. Made it default to false.

2008-10-10  David Hyatt  <hyatt@apple.com>

        Allow the track part to have negative margins so that it can slightly overlap buttons.  This
        is necessary to emulate the Aqua look in CSS.

        Reviewed by Sam Weinig

        * platform/ScrollbarThemeComposite.cpp:
        (WebCore::ScrollbarThemeComposite::paint):
        (WebCore::ScrollbarThemeComposite::hitTest):
        * rendering/RenderScrollbar.cpp:
        (WebCore::RenderScrollbar::setHoveredPart):
        (WebCore::RenderScrollbar::trackRect):
        * rendering/RenderScrollbar.h:
        * rendering/RenderScrollbarPart.cpp:
        (WebCore::RenderScrollbarPart::computeScrollbarWidth):
        (WebCore::RenderScrollbarPart::computeScrollbarHeight):
        * rendering/RenderScrollbarTheme.cpp:
        (WebCore::RenderScrollbarTheme::backButtonRect):
        (WebCore::RenderScrollbarTheme::forwardButtonRect):
        (WebCore::RenderScrollbarTheme::trackRect):

2008-10-10  David Hyatt  <hyatt@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=21527

        Make CSS scrollbars support :not, :hover and :active.

        Reviewed by Adam Roben

        Added WebCore/manual-tests/scrollbar-hover-active.html

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::SelectorChecker::checkOneSelector):
        (WebCore::CSSStyleSelector::SelectorChecker::checkScrollbarPseudoClass):
        * platform/Scrollbar.cpp:
        (WebCore::Scrollbar::autoscrollPressedPart):
        (WebCore::Scrollbar::startTimerIfNeeded):
        (WebCore::Scrollbar::setHoveredPart):
        (WebCore::Scrollbar::setPressedPart):
        (WebCore::Scrollbar::mouseMoved):
        (WebCore::Scrollbar::mouseExited):
        (WebCore::Scrollbar::mouseUp):
        (WebCore::Scrollbar::mouseDown):
        * platform/Scrollbar.h:
        * rendering/RenderScrollbar.cpp:
        (WebCore::RenderScrollbar::setHoveredPart):
        (WebCore::RenderScrollbar::setPressedPart):
        (WebCore::RenderScrollbar::updateScrollbarParts):
        (WebCore::pseudoForScrollbarPart):
        (WebCore::RenderScrollbar::updateScrollbarPart):
        * rendering/RenderScrollbar.h:

2008-10-10  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Dan Bernstein.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=21025
        CSS transition with duration=0 and delay=0 doesn't override ongoing transition

        Test: transitions/interrupt-zero-duration.html

        * page/animation/CompositeAnimation.cpp:
        (WebCore::CompositeAnimation::updateTransitions):

2008-10-10  Kevin Ollivier  <kevino@theolliviers.com>

        wx build fix. Add new scrollbar-related sources.

        * WebCoreSources.bkl:

2008-10-10  David Hyatt  <hyatt@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=21522

        Support increment/decrement/start/end on scrollbars.  Allows a fully functional scrollbar to be
        created.  (Just :hover/:active left to finish it up.)

        Reviewed by Adam Roben

        Added scrollbars/scrollbar-buttons.html

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::SelectorChecker::checkScrollbarPseudoClass):

2008-10-10  David Hyatt  <hyatt@apple.com>

        Rename some pseudoclasses.  Removing "-scrollbar-" from a bunch of the pseudoclasses.  Renaming
        back/forward to decrement/increment.  Adding start/end pseudoclasses.

        Reviewed by Eric Seidel

        * css/CSSSelector.cpp:
        (WebCore::CSSSelector::extractPseudoType):
        * css/CSSSelector.h:
        (WebCore::CSSSelector::):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::SelectorChecker::checkScrollbarPseudoClass):

2008-10-10  David Hyatt  <hyatt@apple.com>

        Switch window-active to window-inactive, since that will work better as far as degrading in other
        browsers.

        Reviewed by Tim Hatcher

        * css/CSSSelector.cpp:
        (WebCore::CSSSelector::extractPseudoType):
        * css/CSSSelector.h:
        (WebCore::CSSSelector::):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::SelectorChecker::checkScrollbarPseudoClass):

2008-10-09  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=21310

        Redesigned how animation events are sent in order to get rid of
        AnimationEventDispatcher. ImplicitAnimation and KeyframeAnimation
        are now ref counted. While calling the event handler, I keep a
        reference to this class to avoid it getting destroyed out from under me.

        I also moved most of the functionality of CompositeAnimation to
        and internal class (CompositeAnimationPrivate) to reduce the exposure
        of the internals of the various animation classes.

        We have several transition and animation LayoutTests which verify that
        this fix works as expected and continues to avoid crashes.

        * page/animation/AnimationBase.cpp:
        (WebCore::AnimationBase::AnimationBase):
        * page/animation/AnimationBase.h:
        (WebCore::AnimationBase::cancelTimers):
        (WebCore::AnimationBase::waitingForStyleAvailable):
        * page/animation/CompositeAnimation.cpp:
        (WebCore::CompositeAnimationPrivate::CompositeAnimationPrivate):
        (WebCore::CompositeAnimationPrivate::suspended):
        (WebCore::CompositeAnimationPrivate::~CompositeAnimationPrivate):
        (WebCore::CompositeAnimationPrivate::updateTransitions):
        (WebCore::CompositeAnimationPrivate::updateKeyframeAnimations):
        (WebCore::CompositeAnimationPrivate::animate):
        (WebCore::CompositeAnimationPrivate::setAnimating):
        (WebCore::CompositeAnimationPrivate::animating):
        (WebCore::CompositeAnimationPrivate::getAnimationForProperty):
        (WebCore::CompositeAnimationPrivate::resetTransitions):
        (WebCore::CompositeAnimationPrivate::resetAnimations):
        (WebCore::CompositeAnimationPrivate::cleanupFinishedAnimations):
        (WebCore::CompositeAnimationPrivate::setAnimationStartTime):
        (WebCore::CompositeAnimationPrivate::setTransitionStartTime):
        (WebCore::CompositeAnimationPrivate::suspendAnimations):
        (WebCore::CompositeAnimationPrivate::resumeAnimations):
        (WebCore::CompositeAnimationPrivate::overrideImplicitAnimations):
        (WebCore::CompositeAnimationPrivate::resumeOverriddenImplicitAnimations):
        (WebCore::compareAnimationIndices):
        (WebCore::CompositeAnimationPrivate::styleAvailable):
        (WebCore::CompositeAnimationPrivate::isAnimatingProperty):
        (WebCore::CompositeAnimationPrivate::setWaitingForStyleAvailable):
        (WebCore::CompositeAnimation::CompositeAnimation):
        (WebCore::CompositeAnimation::~CompositeAnimation):
        (WebCore::CompositeAnimation::animate):
        (WebCore::CompositeAnimation::animating):
        (WebCore::CompositeAnimation::setWaitingForStyleAvailable):
        (WebCore::CompositeAnimation::resetTransitions):
        (WebCore::CompositeAnimation::suspendAnimations):
        (WebCore::CompositeAnimation::resumeAnimations):
        (WebCore::CompositeAnimation::suspended):
        (WebCore::CompositeAnimation::styleAvailable):
        (WebCore::CompositeAnimation::setAnimating):
        (WebCore::CompositeAnimation::isAnimatingProperty):
        (WebCore::CompositeAnimation::setAnimationStartTime):
        (WebCore::CompositeAnimation::setTransitionStartTime):
        (WebCore::CompositeAnimation::overrideImplicitAnimations):
        (WebCore::CompositeAnimation::resumeOverriddenImplicitAnimations):
        * page/animation/CompositeAnimation.h:
        * page/animation/ImplicitAnimation.cpp:
        (WebCore::ImplicitAnimation::sendTransitionEvent):
        * page/animation/ImplicitAnimation.h:
        (WebCore::ImplicitAnimation::create):
        * page/animation/KeyframeAnimation.cpp:
        (WebCore::KeyframeAnimation::sendAnimationEvent):
        * page/animation/KeyframeAnimation.h:
        (WebCore::KeyframeAnimation::create):

2008-10-09  David Hyatt  <hyatt@apple.com>

        Add support for scrollbar orientation as a pseudoclass.  Add support for whether or not the scrollbar
        is active as well.

        Reviewed by Tim Hatcher

        Added scrollbars/scrollbar-orientation.html

        * css/CSSSelector.cpp:
        (WebCore::CSSSelector::extractPseudoType):
        * css/CSSSelector.h:
        (WebCore::CSSSelector::):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::SelectorChecker::checkScrollbarPseudoClass):
        * platform/Scrollbar.cpp:
        (WebCore::Scrollbar::isWindowActive):
        * platform/Scrollbar.h:
        * rendering/RenderScrollbar.cpp:
        (WebCore::RenderScrollbar::paint):
        (WebCore::RenderScrollbar::partForStyleResolve):
        * rendering/RenderScrollbar.h:

2008-10-09  David Hyatt  <hyatt@apple.com>

        Add support for pseudo classes on scrollbar pseudo elements.  As an initial proof of concept only
        :enabled/:disabled are supported.  More pseudo classes will follow quickly now that this works.

        Reviewed by Tim Hatcher

        Added scrollbars/disabled-scrollbar.html

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::SelectorChecker::checkSelector):
        (WebCore::CSSStyleSelector::SelectorChecker::checkOneSelector):
        (WebCore::CSSStyleSelector::SelectorChecker::checkScrollbarPseudoClass):
        * css/CSSStyleSelector.h:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::getPseudoStyle):
        * rendering/RenderObject.h:
        * rendering/RenderScrollbar.cpp:
        (WebCore::RenderScrollbar::setEnabled):
        (WebCore::RenderScrollbar::scrollbarForStyleResolve):
        (WebCore::RenderScrollbar::getScrollbarPseudoStyle):
        (WebCore::RenderScrollbar::paintPart):
        * rendering/RenderScrollbar.h:

2008-10-09  Eric Carlson  <eric.carlson@apple.com>

        Media controls should not show when element is not visible

        https://bugs.webkit.org/show_bug.cgi?id=21155

        Reviewed by Adele Peterson.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::recalcStyle): New, call renderer()->updateFromElement to stay
        in sync with visibility changes
        * html/HTMLMediaElement.h:
        * rendering/RenderMedia.cpp:
        (WebCore::RenderMedia::RenderMedia): initialize m_previousVisible
        (WebCore::RenderMedia::updateControlVisibility): consider style()->visibility() when determining
        if element is visible or not. Don't animate controller visibility when change triggered by
        showing or hiding media element.
        * rendering/RenderMedia.h: declare m_previousVisible

2008-10-09  Timothy Hatcher  <timothy@apple.com>

        Annotate the Objective-C DOM APIs with the JavaScriptCore/WebKitAvailability.h
        availability macros and version macros.

        https://bugs.webkit.org/show_bug.cgi?id=21496
        rdar://problem/6259225

        Reviewed by Sam Weinig.

        * bindings/objc/DOMCSS.h: Add a version #if around catgory interface.
        * bindings/objc/DOMEventException.h: Include JavaScriptCore/WebKitAvailability.h
        and add an #if around the enum.
        * bindings/objc/DOMException.h: Ditto. Give the enum a name and remove the
        comment to match the other headers.
        * bindings/objc/DOMExtensions.h: Annotate the methods with version 3.0 or later.
        * bindings/objc/DOMObject.h: Add a version #if around class interface.
        * bindings/objc/DOMRangeException.h: Include JavaScriptCore/WebKitAvailability.h
        and add a version #if around the enum.
        * bindings/objc/DOMSVGException.h: Ditto. Use the latest version since SVG is new.
        * bindings/objc/DOMXPathException.h: Ditto. Use the 3.0 version.
        * bindings/objc/PublicDOMInterfaces.h: Annotate classes and protocols for
        when they where added to WebKit. Also annotate individual methods that are
        deprecated or where added after the class was added to WebKit.
        * bindings/objc/WebScriptObject.h: Include JavaScriptCore/WebKitAvailability.h
        since this header is included by most DOM headers. Annotate the JSObject method.

        * bindings/scripts/CodeGeneratorObjC.pm:
        (ReadPublicInterfaces): Parse out the availability macro for each function/property.
        And parse out the availability version for the class/protocol. Default to
        WEBKIT_VERSION_LATEST if the class is new.
        (GenerateHeader): Include JavaScriptCore/WebKitAvailability.h if needed. Add the
        interface availability version check if the class has a required version. Create
        a public interface key (used to lookup in $publicInterfaces) and make a declaration
        suffix that includes the availability macro (if needed). Use the "available in 1.3
        and later but deprecated in 3.0" macro instead of "deprecated in 10.5 and later" as
        the default availability macro for old style methods. Tweak line breaks in the generated
        headers to look good and not have too many extra lines.

2008-10-09  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dave Hyatt

        https://bugs.webkit.org/show_bug.cgi?id=20947

        Refactor setStyle() methods into styleWillChange()
        and styleDidChange(), so most of the setStyle() overrides can
        be removed.

        * rendering/RenderBR.cpp:
        (WebCore::RenderBR::styleDidChange):
        * rendering/RenderBR.h:
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::styleWillChange):
        (WebCore::RenderBlock::styleDidChange):
        * rendering/RenderBlock.h:
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::~RenderBox):
        (WebCore::RenderBox::destroy):
        (WebCore::RenderBox::styleWillChange):
        (WebCore::RenderBox::styleDidChange):
        * rendering/RenderBox.h:
        * rendering/RenderButton.cpp:
        (WebCore::RenderButton::styleWillChange):
        (WebCore::RenderButton::styleDidChange):
        * rendering/RenderButton.h:
        * rendering/RenderFieldset.cpp:
        (WebCore::RenderFieldset::styleDidChange):
        * rendering/RenderFieldset.h:
        * rendering/RenderFileUploadControl.cpp:
        (WebCore::RenderFileUploadControl::styleDidChange):
        * rendering/RenderFileUploadControl.h:
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::styleDidChange):
        * rendering/RenderInline.h:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::styleChanged):
        * rendering/RenderLayer.h:
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::styleDidChange):
        * rendering/RenderListBox.h:
        * rendering/RenderListItem.cpp:
        (WebCore::RenderListItem::styleDidChange):
        * rendering/RenderListItem.h:
        * rendering/RenderListMarker.cpp:
        (WebCore::RenderListMarker::styleWillChange):
        (WebCore::RenderListMarker::styleDidChange):
        * rendering/RenderListMarker.h:
        * rendering/RenderMenuList.cpp:
        (WebCore::RenderMenuList::styleDidChange):
        * rendering/RenderMenuList.h:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::setStyle):
        (WebCore::RenderObject::setStyleInternal):
        (WebCore::RenderObject::styleWillChange):
        (WebCore::RenderObject::styleDidChange):
        * rendering/RenderObject.h:
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::styleDidChange):
        * rendering/RenderReplaced.h:
        * rendering/RenderSVGGradientStop.cpp:
        (WebCore::RenderSVGGradientStop::styleDidChange):
        * rendering/RenderSVGGradientStop.h:
        * rendering/RenderScrollbarPart.cpp:
        (WebCore::RenderScrollbarPart::styleDidChange):
        * rendering/RenderScrollbarPart.h:
        * rendering/RenderSlider.cpp:
        (WebCore::RenderSlider::styleDidChange):
        * rendering/RenderSlider.h:
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::styleDidChange):
        * rendering/RenderTable.h:
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::styleWillChange):
        (WebCore::RenderTableCell::styleDidChange):
        * rendering/RenderTableCell.h:
        * rendering/RenderTableRow.cpp:
        (WebCore::RenderTableRow::styleWillChange):
        * rendering/RenderTableRow.h:
        * rendering/RenderText.cpp:
        (WebCore::RenderText::styleDidChange):
        * rendering/RenderText.h:
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::styleDidChange):
        * rendering/RenderTextControl.h:
        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::styleDidChange):
        * rendering/RenderWidget.h:

2008-10-09  David Hyatt  <hyatt@apple.com>

        Make sure to destroy a custom scrollbar's RenderObjects before the arena goes away.  When our widget
        parent is nulled out is a good time.

        Reviewed by Oliver Hunt

        * rendering/RenderScrollbar.cpp:
        (WebCore::RenderScrollbar::~RenderScrollbar):
        (WebCore::RenderScrollbar::setParent):
        (WebCore::RenderScrollbar::updateScrollbarPart):
        * rendering/RenderScrollbar.h:

2008-10-09  David Hyatt  <hyatt@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=21446

        This patch gets CSS scrollbars up and limping.  There's no way to distinguish between states or between
        orientation and back vs. forward on the buttons, but it's a start.

        Reviewed by Oliver Hunt

        Added scrollbars/basic-scrollbar.html

        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSSelector.cpp:
        (WebCore::CSSSelector::extractPseudoType):
        * css/CSSSelector.h:
        (WebCore::CSSSelector::):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::SelectorChecker::checkOneSelector):
        * platform/ScrollTypes.h:
        (WebCore::):
        * platform/Scrollbar.h:
        (WebCore::Scrollbar::styleChanged):
        * platform/ScrollbarThemeComposite.cpp:
        (WebCore::ScrollbarThemeComposite::paint):
        (WebCore::ScrollbarThemeComposite::splitTrack):
        * platform/ScrollbarThemeComposite.h:
        (WebCore::ScrollbarThemeComposite::paintScrollbarBackground):
        (WebCore::ScrollbarThemeComposite::paintTrackBackground):
        (WebCore::ScrollbarThemeComposite::paintTrackPiece):
        * platform/win/ScrollbarThemeSafari.cpp:
        (WebCore::ScrollbarThemeSafari::paintTrackBackground):
        * platform/win/ScrollbarThemeSafari.h:
        * platform/win/ScrollbarThemeWin.cpp:
        (WebCore::ScrollbarThemeWin::paintTrack):
        * platform/win/ScrollbarThemeWin.h:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::createScrollbar):
        (WebCore::RenderLayer::styleChanged):
        * rendering/RenderScrollbar.cpp: Added.
        (WebCore::RenderScrollbar::createCustomScrollbar):
        (WebCore::RenderScrollbar::RenderScrollbar):
        (WebCore::RenderScrollbar::~RenderScrollbar):
        (WebCore::RenderScrollbar::getScrollbarPseudoStyle):
        (WebCore::RenderScrollbar::updateScrollbarParts):
        (WebCore::RenderScrollbar::updateScrollbarPart):
        (WebCore::RenderScrollbar::paintPart):
        (WebCore::RenderScrollbar::buttonRect):
        (WebCore::RenderScrollbar::minimumThumbLength):
        * rendering/RenderScrollbar.h: Added.
        (WebCore::RenderScrollbar::styleChanged):
        (WebCore::RenderScrollbar::owningRenderer):
        * rendering/RenderScrollbarPart.cpp: Added.
        (WebCore::RenderScrollbarPart::RenderScrollbarPart):
        (WebCore::RenderScrollbarPart::~RenderScrollbarPart):
        (WebCore::RenderScrollbarPart::layout):
        (WebCore::RenderScrollbarPart::layoutHorizontalPart):
        (WebCore::RenderScrollbarPart::layoutVerticalPart):
        (WebCore::calcScrollbarThicknessUsing):
        (WebCore::RenderScrollbarPart::computeScrollbarWidth):
        (WebCore::RenderScrollbarPart::computeScrollbarHeight):
        (WebCore::RenderScrollbarPart::calcPrefWidths):
        (WebCore::RenderScrollbarPart::setStyle):
        * rendering/RenderScrollbarPart.h: Added.
        (WebCore::RenderScrollbarPart::renderName):
        (WebCore::RenderScrollbarPart::requiresLayer):
        * rendering/RenderScrollbarTheme.cpp: Added.
        (WebCore::RenderScrollbarTheme::renderScrollbarTheme):
        (WebCore::RenderScrollbarTheme::buttonSizesAlongTrackAxis):
        (WebCore::RenderScrollbarTheme::hasButtons):
        (WebCore::RenderScrollbarTheme::hasThumb):
        (WebCore::RenderScrollbarTheme::minimumThumbLength):
        (WebCore::RenderScrollbarTheme::backButtonRect):
        (WebCore::RenderScrollbarTheme::forwardButtonRect):
        (WebCore::RenderScrollbarTheme::trackRect):
        (WebCore::RenderScrollbarTheme::paintScrollCorner):
        (WebCore::RenderScrollbarTheme::paintScrollbarBackground):
        (WebCore::RenderScrollbarTheme::paintTrackBackground):
        (WebCore::RenderScrollbarTheme::paintTrackPiece):
        (WebCore::RenderScrollbarTheme::paintButton):
        (WebCore::RenderScrollbarTheme::paintThumb):
        * rendering/RenderScrollbarTheme.h: Added.
        (WebCore::RenderScrollbarTheme::~RenderScrollbarTheme):
        (WebCore::RenderScrollbarTheme::scrollbarThickness):
        (WebCore::RenderScrollbarTheme::buttonsPlacement):
        (WebCore::RenderScrollbarTheme::supportsControlTints):
        (WebCore::RenderScrollbarTheme::shouldCenterOnThumb):
        (WebCore::RenderScrollbarTheme::initialAutoscrollTimerDelay):
        (WebCore::RenderScrollbarTheme::autoscrollTimerDelay):
        (WebCore::RenderScrollbarTheme::registerScrollbar):
        (WebCore::RenderScrollbarTheme::unregisterScrollbar):
        * rendering/style/RenderStyle.h:
        (WebCore::RenderStyle::):

2008-10-09  Eric Seidel  <eric@webkit.org>

        Reviewed by Oliver Hunt.

        Fix Canvex DOOM Game
        Gradient clips were not getting cleared after filling the
        gradient, this was causing nothing to draw in Canvex
        https://bugs.webkit.org/show_bug.cgi?id=21498

        Tests forthcoming.

        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::fillPath):
        (WebCore::GraphicsContext::strokePath):
        (WebCore::GraphicsContext::fillRect):

2008-10-09  Eric Seidel  <eric@webkit.org>

        Reviewed by Oliver Hunt.

        Fix transformed patterns
        https://bugs.webkit.org/show_bug.cgi?id=21498

        Test: fast/canvas/patternfill-repeat.html

        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::setStrokePattern):
        (WebCore::GraphicsContext::setFillPattern):
        (WebCore::GraphicsContext::setStrokeGradient):
        (WebCore::GraphicsContext::setFillGradient):
        * platform/graphics/GraphicsContext.h:
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::applyStrokePattern):
        (WebCore::applyFillPattern):
        (WebCore::GraphicsContext::drawPath):
        (WebCore::GraphicsContext::fillPath):
        (WebCore::GraphicsContext::strokePath):
        (WebCore::GraphicsContext::fillRect):
        * platform/graphics/qt/GraphicsContextQt.cpp:
        * platform/graphics/wx/GraphicsContextWx.cpp:

2008-10-09  Kevin Ollivier  <kevino@theolliviers.com>

        wx build fixes.

        * platform/wx/WidgetWx.cpp:
        * plugins/wx/PluginViewWx.cpp:
        (WebCore::PluginView::invalidateRect):
        * webcore-base.bkl:

2008-10-09  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Darin Adler.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=21217
        Animations assert when navigating from page

        Changed assertions to test the right flag for the paused state

        * page/animation/AnimationBase.cpp:
        (WebCore::AnimationBase::updateStateMachine):

2008-10-09  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Dan Bernstein.

        Fixed > 180 degree rotation bug
        Ensure that validateTransformFunctionList() is called after updating keyframe styles

        https://bugs.webkit.org/show_bug.cgi?id=21420

        Test: animations/big-rotation.html

        * page/animation/KeyframeAnimation.cpp:
        (WebCore::KeyframeAnimation::KeyframeAnimation):

2008-10-09  Brady Eidson  <beidson@apple.com>

        Reviewed by Anders

        <rdar://problem/6250856> - Calling [WebView close] from within a redirection callback can cause bad things

        The API usage to reveal this crash was so particular that a layout test is not possible with our current infrastructure.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::changeLocation): Protect the Frame from deletion
        (WebCore::FrameLoader::continueLoadAfterNavigationPolicy): stopAllLoaders() might clear the Frame's page,
          so perform a second null check on the page.  Bail if it has been cleared.

2008-10-09  Alp Toker  <alp@nuanti.com>

        Build fix for recent DOM generation Makefile changes when custom
        CFLAGS/CXXFLAGS are passed in.

        * GNUmakefile.am:

2008-10-09  Jan Michael Alonzo  <jmalonzo@webkit.org>

        Reviewed by Alp Toker.

        https://bugs.webkit.org/show_bug.cgi?id=21390
        [Gtk] Linux/Gtk: GtkLauncher crashes on Acid3 (but after test 80 this time)

        * platform/gtk/ScrollViewGtk.cpp:
        (WebCore::ScrollView::platformRemoveChild):

2008-10-09  Darin Adler  <darin@apple.com>

       - try to fix Qt build

        * bridge/qt/qt_runtime.cpp:
        (JSC::Bindings::convertQVariantToValue): Pass JSGlobalData instead of ExecState to RegExp constructor.

2008-10-08  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Oliver Hunt & Sam Weinig.

        Fixes: https://bugs.webkit.org/show_bug.cgi?id=15413 (SVGElementInstance does not implement EventTarget)
        Fixes: https://bugs.webkit.org/show_bug.cgi?id=15430 (SVGElementInstances should rebuild themselves lazily)
        Fixes: https://bugs.webkit.org/show_bug.cgi?id=20550 (SVGUseElement.setAttribute crashes Safari)

        Rebuild SVG use element shadow tree lazily. Mark SVGElementInstance with the "needsUpdate" flag.
        Next time SVGUseElement::recalcStyle is invoked (ie. via Document::updateDocumentsRendering()) the
        use tree is rebuild.

        Make SVGElementInstance a real EventTarget, as the SVG specification demands.
        When dispatching events to a shadow tree element of a use element, the associated SVGElementInstance
        is used as event target. The SVGElementInstance, the shadow tree element and the corresponding element
        share an event listener list. Every event listener change on the SVGElementInstance object is forwared
        to the corresponding element. Each change marks the SVGElementInstance tree dirty, and causes a reclone.
        Each event listener defined via attributes (onclick/onkeydown/...) is copied from the correspondingElement
        to the shadow tree element - through the cloneNode calls - if the use element's shadow tree gets rebuild.
        Each listener, dynamically created using addEventListener, gets copied to the corersponding element as well.

        Now that the target/currentTarget properties of the Events are correct, event bubbling works as expected,
        see resources/use-instanceRoot-event-bubbling.js for details.

        Tests: svg/custom/use-elementInstance-event-target.svg (reenabled)
               svg/custom/use-elementInstance-methods.svg (reenabled)
               svg/custom/use-setAttribute-crash.svg (covers bug 20550)
               svg/custom/use-instanceRoot-as-event-target.xhtml (covers bug 15413)
               svg/custom/use-instanceRoot-event-bubbling.xhtml (covers bug 15413)
               svg/custom/use-instanceRoot-event-listeners.xhtml (covers bug 15413 & 15430)

        * DerivedSources.make:
        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSEventListener.h:
        (WebCore::JSLazyEventListener::wasCreatedFromMarkup):
        * bindings/js/JSEventTarget.cpp:
        * bindings/js/JSEventTargetSVGElementInstance.cpp: Removed.
        * bindings/js/JSEventTargetSVGElementInstance.h: Removed.
        * bindings/js/JSSVGElementInstanceCustom.cpp:
        (WebCore::JSSVGElementInstance::addEventListener):
        (WebCore::JSSVGElementInstance::removeEventListener):
        (WebCore::JSSVGElementInstance::pushEventHandlerScope):
        * bindings/scripts/CodeGeneratorJS.pm:
        * bindings/scripts/CodeGeneratorObjC.pm:
        * dom/EventListener.h:
        (WebCore::EventListener::wasCreatedFromMarkup):
        * dom/EventTargetNode.cpp:
        (WebCore::updateSVGElementInstancesAfterEventListenerChange):
        (WebCore::EventTargetNode::addEventListener):
        (WebCore::EventTargetNode::removeEventListener):
        (WebCore::eventTargetAsSVGElementInstance):
        (WebCore::eventTargetRespectingSVGTargetRules):
        (WebCore::EventTargetNode::dispatchEvent):
        (WebCore::EventTargetNode::dispatchGenericEvent):
        (WebCore::EventTargetNode::removeEventListenerForType):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::clear):
        (WebCore::instanceAssociatedWithShadowTreeElement):
        (WebCore::EventHandler::updateMouseEventTargetNode):
        * page/EventHandler.h:
        * svg/EventTargetSVGElementInstance.cpp: Removed.
        * svg/EventTargetSVGElementInstance.h: Removed.
        * svg/SVGElementInstance.cpp:
        (WebCore::SVGElementInstance::SVGElementInstance):
        (WebCore::SVGElementInstance::~SVGElementInstance):
        (WebCore::SVGElementInstance::childNodes):
        (WebCore::SVGElementInstance::setShadowTreeElement):
        (WebCore::SVGElementInstance::forgetWrapper):
        (WebCore::SVGElementInstance::appendChild):
        (WebCore::SVGElementInstance::invalidateAllInstancesOfElement):
        (WebCore::SVGElementInstance::setNeedsUpdate):
        (WebCore::SVGElementInstance::associatedFrame):
        (WebCore::SVGElementInstance::addEventListener):
        (WebCore::SVGElementInstance::removeEventListener):
        (WebCore::SVGElementInstance::dispatchEvent):
        (WebCore::SVGElementInstance::onabort):
        (WebCore::SVGElementInstance::setOnabort):
        (WebCore::SVGElementInstance::onblur):
        (WebCore::SVGElementInstance::setOnblur):
        (WebCore::SVGElementInstance::onchange):
        (WebCore::SVGElementInstance::setOnchange):
        (WebCore::SVGElementInstance::onclick):
        (WebCore::SVGElementInstance::setOnclick):
        (WebCore::SVGElementInstance::oncontextmenu):
        (WebCore::SVGElementInstance::setOncontextmenu):
        (WebCore::SVGElementInstance::ondblclick):
        (WebCore::SVGElementInstance::setOndblclick):
        (WebCore::SVGElementInstance::onerror):
        (WebCore::SVGElementInstance::setOnerror):
        (WebCore::SVGElementInstance::onfocus):
        (WebCore::SVGElementInstance::setOnfocus):
        (WebCore::SVGElementInstance::oninput):
        (WebCore::SVGElementInstance::setOninput):
        (WebCore::SVGElementInstance::onkeydown):
        (WebCore::SVGElementInstance::setOnkeydown):
        (WebCore::SVGElementInstance::onkeypress):
        (WebCore::SVGElementInstance::setOnkeypress):
        (WebCore::SVGElementInstance::onkeyup):
        (WebCore::SVGElementInstance::setOnkeyup):
        (WebCore::SVGElementInstance::onload):
        (WebCore::SVGElementInstance::setOnload):
        (WebCore::SVGElementInstance::onmousedown):
        (WebCore::SVGElementInstance::setOnmousedown):
        (WebCore::SVGElementInstance::onmousemove):
        (WebCore::SVGElementInstance::setOnmousemove):
        (WebCore::SVGElementInstance::onmouseout):
        (WebCore::SVGElementInstance::setOnmouseout):
        (WebCore::SVGElementInstance::onmouseover):
        (WebCore::SVGElementInstance::setOnmouseover):
        (WebCore::SVGElementInstance::onmouseup):
        (WebCore::SVGElementInstance::setOnmouseup):
        (WebCore::SVGElementInstance::onmousewheel):
        (WebCore::SVGElementInstance::setOnmousewheel):
        (WebCore::SVGElementInstance::onbeforecut):
        (WebCore::SVGElementInstance::setOnbeforecut):
        (WebCore::SVGElementInstance::oncut):
        (WebCore::SVGElementInstance::setOncut):
        (WebCore::SVGElementInstance::onbeforecopy):
        (WebCore::SVGElementInstance::setOnbeforecopy):
        (WebCore::SVGElementInstance::oncopy):
        (WebCore::SVGElementInstance::setOncopy):
        (WebCore::SVGElementInstance::onbeforepaste):
        (WebCore::SVGElementInstance::setOnbeforepaste):
        (WebCore::SVGElementInstance::onpaste):
        (WebCore::SVGElementInstance::setOnpaste):
        (WebCore::SVGElementInstance::ondragenter):
        (WebCore::SVGElementInstance::setOndragenter):
        (WebCore::SVGElementInstance::ondragover):
        (WebCore::SVGElementInstance::setOndragover):
        (WebCore::SVGElementInstance::ondragleave):
        (WebCore::SVGElementInstance::setOndragleave):
        (WebCore::SVGElementInstance::ondrop):
        (WebCore::SVGElementInstance::setOndrop):
        (WebCore::SVGElementInstance::ondragstart):
        (WebCore::SVGElementInstance::setOndragstart):
        (WebCore::SVGElementInstance::ondrag):
        (WebCore::SVGElementInstance::setOndrag):
        (WebCore::SVGElementInstance::ondragend):
        (WebCore::SVGElementInstance::setOndragend):
        (WebCore::SVGElementInstance::onreset):
        (WebCore::SVGElementInstance::setOnreset):
        (WebCore::SVGElementInstance::onresize):
        (WebCore::SVGElementInstance::setOnresize):
        (WebCore::SVGElementInstance::onscroll):
        (WebCore::SVGElementInstance::setOnscroll):
        (WebCore::SVGElementInstance::onsearch):
        (WebCore::SVGElementInstance::setOnsearch):
        (WebCore::SVGElementInstance::onselect):
        (WebCore::SVGElementInstance::setOnselect):
        (WebCore::SVGElementInstance::onselectstart):
        (WebCore::SVGElementInstance::setOnselectstart):
        (WebCore::SVGElementInstance::onsubmit):
        (WebCore::SVGElementInstance::setOnsubmit):
        (WebCore::SVGElementInstance::onunload):
        (WebCore::SVGElementInstance::setOnunload):
        * svg/SVGElementInstance.h:
        (WebCore::SVGElementInstance::needsUpdate):
        (WebCore::SVGElementInstance::toNode):
        (WebCore::SVGElementInstance::toSVGElementInstance):
        (WebCore::SVGElementInstance::correspondingElement):
        (WebCore::SVGElementInstance::correspondingUseElement):
        (WebCore::SVGElementInstance::shadowTreeElement):
        (WebCore::SVGElementInstance::parentNode):
        (WebCore::SVGElementInstance::previousSibling):
        (WebCore::SVGElementInstance::nextSibling):
        (WebCore::SVGElementInstance::firstChild):
        (WebCore::SVGElementInstance::lastChild):
        (WebCore::SVGElementInstance::ownerDocument):
        (WebCore::SVGElementInstance::hasChildNodes):
        (WebCore::SVGElementInstance::setFirstChild):
        (WebCore::SVGElementInstance::setLastChild):
        (WebCore::SVGElementInstance::setNextSibling):
        (WebCore::SVGElementInstance::setPreviousSibling):
        (WebCore::SVGElementInstance::refEventTarget):
        (WebCore::SVGElementInstance::derefEventTarget):
        * svg/SVGElementInstance.idl:
        * svg/SVGStyledElement.cpp:
        (WebCore::SVGStyledElement::svgAttributeChanged):
        (WebCore::SVGStyledElement::childrenChanged):
        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::svgAttributeChanged):
        (WebCore::shadowTreeContainsChangedNodes):
        (WebCore::SVGUseElement::recalcStyle):
        (WebCore::dumpInstanceTree):
        (WebCore::SVGUseElement::buildPendingResource):
        (WebCore::SVGUseElement::buildInstanceTree):
        (WebCore::SVGUseElement::transferEventListenersToShadowTree):
        * svg/SVGUseElement.h:

2008-10-08  Sam Weinig  <sam@webkit.org>

        Reviewed by Cameron Zwarich.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=21241
        REGRESSION (r36977): getRGBColorValue().red returning incorrect value

        Update JSRGBColor to use the new static function per getter approach.

        Test: fast/dom/css-RGBValue.html

        * bindings/js/JSRGBColor.cpp:
        (WebCore::):
        (jsRGBColorRed):
        (jsRGBColorGreen):
        (jsRGBColorBlue):
        * bindings/js/JSRGBColor.h:

2008-10-08  Eric Seidel  <eric@webkit.org>

        Reviewed by Darin Adler, Nikolas Zimmermann and Dave Hyatt.

        svgElement.className.baseValue = "foo" does not work
        https://bugs.webkit.org/show_bug.cgi?id=20651

        * dom/StyledElement.cpp:
        (WebCore::StyledElement::classAttributeChanged):
        (WebCore::StyledElement::parseMappedAttribute):
        * dom/StyledElement.h:
        * svg/SVGStyledElement.cpp:
        (WebCore::SVGStyledElement::svgAttributeChanged):

2008-10-08  Anthony Ricaud  <rik24d@gmail.com>

        Make the toolbar label text-shadow not disappear when clicking on the
        search result count or around the search field.

        Reviewed by Timothy Hatcher.

        * inspector/front-end/inspector.css:
        (.toolbar-item:active .toolbar-label): Make this rule also require the
        toggleable class with the toolbar-item class.

2008-10-08  Tor Arne Vestbø  <tavestbo@trolltech.com>

        Reviewed by Simon.

        Updated the qrc file for the Web Inspector to contain the current set
        of images.

        * inspector/front-end/WebKit.qrc:

2008-10-08  Prasanth Ullattil  <pullatti@trolltech.com>

        Reviewed by Simon.

        Fix the linking of applications against WebKit on Qt/Windows.

        The prl files that qmake creates are buggy on Unix, but we they're
        fine on Windows and we have to have them there in order to get the
        dependencies correct.

        * WebCore.pro:

2008-10-08  Ariya Hidayat  <ariya.hidayat@trolltech.com>

        Reviewed by Simon.

        Speed up rectangle filling by not re-creating a QBrush all the time.

        This triggers faster path in QPainter where the brush is reused.

        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::GraphicsContextPlatformPrivate::GraphicsContextPlatformPrivate):
        (WebCore::GraphicsContext::fillRect):

2008-10-08  Thiago Macieira  <thiago.macieira@nokia.com>

        Reviewed by Simon.

        Fixes: Encoding of Qt URLs

        This encoding was added by Simon and I because QUrl's
        tolerant parser wasn't tolerant enough. Now it is, so we don't need
        this anymore.

        * platform/qt/KURLQt.cpp:
        (WebCore::KURL::operator QUrl):

2008-10-08  Marius Storm-Olsen  <marius@trolltech.com>

        Reviewed by Simon.

        Fixes dependencies in qmake generated visual studio projects.

        Only add debug lib name if we're in the debug build_pass, else the release version.
        The MSVC solution generator would pick up the debug javascriptcore lib as a dependency.

        * WebCore.pro:

2008-10-08  Prasanth Ullattil  <pullatti@trolltech.com>

        Reviewed by Simon.

        Fix compilation errors on VS2008 64Bit

        * platform/text/TextStream.cpp:
        (WebCore::TextStream::operator<<):
        * platform/text/TextStream.h:
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginView::init):

2008-10-07  Alp Toker  <alp@nuanti.com>

        GTK+ build fix for older automake versions (1.7). Discussed in bug
        #21392.

        * GNUmakefile.am:

2008-10-07  Anders Carlsson  <andersca@apple.com>

        Reviewed by Antti Koivisto.

        <rdar://problem/6273887> Crash in ApplicationCacheGroup

        Make sure to stop loading even before a cache update is in progress so that the
        manifest load will be stopped.

        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::ApplicationCacheGroup::~ApplicationCacheGroup):
        (WebCore::ApplicationCacheGroup::stopLoading):
        (WebCore::ApplicationCacheGroup::cacheUpdateFailed):

2008-10-07  Timothy Hatcher  <timothy@apple.com>

        Auto-generate DOMDocument's createNodeIterator: and createTreeWalker: methods.

        https://bugs.webkit.org/show_bug.cgi?id=21433

        Reviewed by Sam Weinig.

        * WebCore.xcodeproj/project.pbxproj: Add ObjCNodeFilterCondition.{mm,h}.
        * bindings/objc/DOM.mm: Remove previous category implementations
        on DOMDocument for createNodeIterator: and createTreeWalker:. Also
        moves ObjCNodeFilterCondition to its own file.
        * bindings/objc/DOMTraversal.h: Remove the category methods that added
        createNodeIterator: and createTreeWalker: to DOMDocument. This is fine
        to do since DOmDocument.h is included still, and has these methods.
        * bindings/objc/DOMUtility.mm:
        (JSC::createDOMWrapper): Remove special case for JSNodeIterator and
        JSTreeWalker now that the ObjC binding conforms to the standard wrap.
        * bindings/objc/ObjCNodeFilterCondition.h: Split out from DOM.mm.
        (WebCore::ObjCNodeFilterCondition::create): Moved from DOM.mm.
        (WebCore::ObjCNodeFilterCondition::ObjCNodeFilterCondition): Ditto.
        * bindings/objc/ObjCNodeFilterCondition.mm: Split out from DOM.mm.
        (WebCore::ObjCNodeFilterCondition::acceptNode): Moved from DOM.mm.
        * bindings/objc/PublicDOMInterfaces.h: Add the createNodeIterator: and
        createTreeWalker: methods to DOMDocument.
        * bindings/scripts/CodeGeneratorObjC.pm:
        (GetObjCTypeGetter): Add a case for NodeFilter.
        (AddIncludesForType): Include ObjCNodeFilterCondition.h for NodeFilter.
        (GenerateImplementation): Remove existing NodeFilter special case that
        used the m_filter member variable. Add a new special getter for protocol
        types that aren't EventTarget, so the right class is used for NodeFilter.
        Add a special case for NodeFilter where it creates an ObjCNodeFilterCondition.
        * dom/Document.idl: Remove the #ifdef LANGUAGE_OBJECTIVE_C. Add the
        OldStyleObjC extended attribute to createNodeIterator and createTreeWalker.
        Rename the entityReferenceExpansion parameter to expandEntityReferences to
        match the previous ObjC API.
        * dom/NodeIterator.idl: Remove ObjCIvar from the filter attribute. The
        m_filter member variable was never used in practice, it was always nil!
        We can remove it and not pad the object because this can't be subclassed.
        * dom/TreeWalker.idl: Ditto.

2008-10-07  Timothy Hatcher  <timothy@apple.com>

        Auto-generate the DOMEventTarget protocol implementation for
        DOMNode and DOMSVGElementInstance.

        https://bugs.webkit.org/show_bug.cgi?id=21432

        Reviewed by Darin Adler.

        * WebCore.xcodeproj/project.pbxproj: Add ObjCEventListener.{mm,h}.
        * bindings/objc/DOM.mm: Remove many unneeded header includes. Move
        ObjCEventListener to it's own file. Remove the manual impelmentations
        of the DOMEventTarget protocol for DOMNode and DOMSVGElementInstance.
        * bindings/objc/DOMEvents.h: Remove the categories that defined
        DOMEventTarget for DOMNode and DOMSVGElementInstance.
        * bindings/objc/ObjCEventListener.h: Split out from DOM.mm.
        * bindings/objc/ObjCEventListener.mm: Split out from DOM.mm.
        (WebCore::ObjCEventListener::find): Moved from DOM.mm.
        (WebCore::ObjCEventListener::wrap): Use PassRefPtr to prevent the
        callers from doing a manual deref.
        (WebCore::ObjCEventListener::ObjCEventListener): Moved from DOM.mm.
        (WebCore::ObjCEventListener::~ObjCEventListener): Ditto.
        * bindings/scripts/CodeGeneratorObjC.pm:
        (GetObjCTypeGetter): Add a case for EventListener and use WTF::getPtr.
        (AddIncludesForType): Include ObjCEventListener.h for EventListener.
        And include EventTargetSVGElementInstance.h for SVGElementInstance.
        (GenerateHeader): Remove the check for multiple parents.
        (GenerateImplementation): Remove the check for multiple parents. Remove
        the @deprecatedFunctions array since deprecated methods get generated
        into the main @interface now to work with protocols. Add support
        for the EventTargetNodeCast extended attribute. Add support for
        EventListener parameters.
        * dom/Node.idl: Define superclasses for ObjC so the implementation
        and interface implement the DOMEventTarget protocol. Explicitly
        specify Object as a superclass to use DOMEventTarget. Object will turn
        into DOMObject. This is needed to take the code generator down the right
        path of multiple super-classes as protocols. It is ObjC only for legacy
        reasons. The event target methods are normally on NodeEventTarget, a
        subclass of Node. But the ObjC API has never has this subclass and
        they are on DOMNode.
        * svg/SVGElementInstance.idl: Ditto.

2008-10-07  David Hyatt  <hyatt@apple.com>

        Add new pseudo-elements and pseudo-classes that will enable scrollbars to be styled by CSS.

        The new pseudo-elements are:
            scrollbar
            scrollbar-button
            scrollbar-corner
            scrollbar-thumb
            scrollbar-track

        These elements will work with all the usual pseudo-classes (:hover, :active, :enabled, :disabled, etc.) and with
        the following new pseudo-classes:
            scrollbar-active
            scrollbar-back
            scrollbar-forward
            scrollbar-horizontal
            scrollbar-vertical

        Reviewed by Adele

        * css/CSSSelector.cpp:
        (WebCore::CSSSelector::extractPseudoType):
        * css/CSSSelector.h:
        (WebCore::CSSSelector::):

2008-10-06  Timothy Hatcher  <timothy@apple.com>

        Add support to the Resources panel for queries like "#123", "foo #123",
        "line: 123" and "foo line: 123". These will match the query limiting
        the search only to the line specified. If only a line is specified,
        the whole line is matched.

        https://bugs.webkit.org/show_bug.cgi?id=21422

        Reviewed by Darin Adler.

        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype.sourceRow): Don't return the last
        row if the index is greater than the rows collection. Let it return
        undefined by indexing out-of-bounds.
        * inspector/front-end/SourceView.js:
        (WebInspector.SourceView.prototype.performSearch): Add support for
        queries like "#123", "foo #123", "line: 123" and "foo line: 123".
        Also match the whole query to the whole document in case there are
        colors like "#333".

2008-10-07  Alp Toker  <alp@nuanti.com>

        Reviewed by Mark Rowe.

        https://bugs.webkit.org/show_bug.cgi?id=21392
        [GTK] Auto-generate JS DOM binding sources list

        Remove the huge lists of generated DOM binding sources and headers in
        the build system. These are difficult to maintain and can be derived
        automatically.

        The new strategy is to re-use the existing lists of IDL sources (which
        are needed for dist support anyway). This will also ease the addition
        of new language bindings.

        * GNUmakefile.am:

2008-10-07  Tor Arne Vestbø  <tavestbo@trolltech.com>

        Reviewed by Simon.

        Don't attempt to paint when updating control tints

        We don't have a valid PlatformGraphicsContext so schedule
        the dirty scrollbar/scrollview area for repaint instead.

        * platform/qt/ScrollbarThemeQt.cpp:
        (WebCore::ScrollbarThemeQt::paint):
        (WebCore::ScrollbarThemeQt::paintScrollCorner):

2008-10-07  Holger Hans Peter Freyther  <zecke@selfish.org>

        [qt] Build fix after Scrollbar.h and Widget.h changes.

        * plugins/qt/PluginViewQt.cpp:
        (WebCore::PluginView::getValue):
        (WebCore::PluginView::init):

2008-10-06  David Hyatt  <hyatt@apple.com>

        Enable viewless Mac WebKit to (kinda sorta) paint basic pages (with no frames on them).

        Reviewed by Sam Weinig

        * WebCore.base.exp:
        * WebCore.xcodeproj/project.pbxproj:
        * loader/EmptyClients.h:
        (WebCore::EmptyFrameLoaderClient::hasWebView):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadWithDocumentLoader):
        (WebCore::FrameLoader::transitionToCommitted):
        * loader/FrameLoaderClient.h:
        * page/FocusController.cpp:
        (WebCore::FocusController::setActive):
        * page/FrameView.cpp:
        (WebCore::FrameView::FrameView):
        (WebCore::FrameView::init):
        (WebCore::FrameView::layoutIfNeededRecursive):
        * page/FrameView.h:

2008-10-06  Dan Bernstein  <mitz@apple.com>

        - build fix

        * bindings/objc/DOMEvents.h:

2008-10-06  Mark Mentovai  <mark@moxienet.com>

        Reviewed by Tim Hatcher.

        Use #if ENABLE(feature) where possible, and #if ENABLE_feature where
        Platform.h is not available, in preference to #ifdef ENABLE_feature.
        #ifdef is wrong now that features are disabled by #defining
        ENABLE_feature to 0.

        https://bugs.webkit.org/show_bug.cgi?id=21338

        * bindings/objc/DOMEvents.h:
        * bindings/objc/PublicDOMInterfaces.h:
        * dom/Document.idl:
        * page/DOMWindow.idl:
        * svg/svgtags.in:

2008-10-06  Mark Mentovai  <mark@moxienet.com>

        Reviewed by Sam Weinig.

        * platform/network/mac/FormDataStreamMac.mm: #import <wtf/Threading.h>
        to get the declaration for isMainThread().

2008-10-06  Jeremy Moskovich  <jeremy@chromium.org>

        Reviewed by Tim Hatcher.

        WebCoreObjCExtras.c is actually an obj-c++ file, so change its name
        to reflect that.

        * WebCore.xcodeproj/project.pbxproj:
        * platform/mac/WebCoreObjCExtras.c: Removed.
        * platform/mac/WebCoreObjCExtras.mm: Copied from WebCore/platform/mac/WebCoreObjCExtras.c.

2008-10-06  Jeremy Moskovich  <jeremy@chromium.org>

        Reviewed by Dan Bernstein.

        Added C++ forward declaration for the NSURLAuthenticationChallenge class
        so that the m_currentMacChallenge variable doesn't cause a
        compilation error when ResourceHandleInternal.h is included from a C++ file.
        Fixes: https://bugs.webkit.org/show_bug.cgi?id=21411

        * platform/network/ResourceHandleInternal.h:

2008-10-06  Steve Falkenburg  <sfalken@apple.com>

        Windows build fix.

        * WebCore.vcproj/WebCore.vcproj:

2008-10-06  Steve Falkenburg  <sfalken@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=21416
        Add missing null checks identified by Application Verifier.

        Reviewed by Darin Adler.

        * platform/win/SharedTimerWin.cpp:
        (WebCore::clearTimer):

2008-10-06  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Tim Hatcher.

        Removed accidentally left in debugging statement.

        * inspector/front-end/inspector.js:

2008-10-06  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Tim Hatcher and Oliver Hunt.

        https://bugs.webkit.org/show_bug.cgi?id=21412
        Bug 21412: Refactor user initiated profile count to be more stable

        * inspector/InspectorController.cpp: Keep track of the user-initiated
        profiles here now.
        (WebCore::InspectorController::InspectorController):
        (WebCore::InspectorController::startUserInitiatedProfiling):
        (WebCore::InspectorController::stopUserInitiatedProfiling):
        * inspector/InspectorController.h:
        The front end will now need to check for the existence of the user-
        initiated profile title and use its count instead of keeping its own.
        * inspector/front-end/ProfilesPanel.js:

2008-10-06  Dan Bernstein  <mitz@apple.com>

        Reviewed by Sam Weinig.

        - separate GDI text drawing into its own function

        * platform/graphics/win/FontCGWin.cpp:
        (WebCore::drawGDIGlyphs):
        (WebCore::Font::drawGlyphs):

2008-10-03  Steve Falkenburg  <sfalken@apple.com>

        <rdar://problem/6249833> Fix default button appearance

        Reviewed by Adele Peterson.

        * rendering/RenderThemeWin.cpp:
        (WebCore::RenderThemeWin::supportsFocus):
        (WebCore::RenderThemeWin::determineClassicState):
        (WebCore::RenderThemeWin::determineButtonState):
        (WebCore::RenderThemeWin::getClassicThemeData):
        (WebCore::RenderThemeWin::getThemeData):
        (WebCore::drawControl):
        * rendering/RenderThemeWin.h:

2008-10-06  Tor Arne Vestbø  <tavestbo@trolltech.com>

        Reviewed by Simon.

        Add native virtual keycode to PlatformKeyboardEvent

        * platform/PlatformKeyboardEvent.h:
        * platform/gtk/KeyEventGtk.cpp:
        (WebCore::PlatformKeyboardEvent::PlatformKeyboardEvent):
        * platform/mac/KeyEventMac.mm:
        (WebCore::PlatformKeyboardEvent::PlatformKeyboardEvent):
        * platform/qt/PlatformKeyboardEventQt.cpp:
        (WebCore::PlatformKeyboardEvent::PlatformKeyboardEvent):
        * platform/win/KeyEventWin.cpp:
        (WebCore::PlatformKeyboardEvent::PlatformKeyboardEvent):
        * platform/wx/KeyboardEventWx.cpp:
        (WebCore::PlatformKeyboardEvent::PlatformKeyboardEvent):

2008-10-06  Tor Arne Vestbø  <tavestbo@trolltech.com>

        Reviewed by Simon.

        Enable WebCore::String <> CFStringRef conversion functions for QtWebKit/Mac

        * platform/text/PlatformString.h:
        * platform/text/StringImpl.h:
        * platform/text/cf/StringCF.cpp:
        * platform/text/cf/StringImplCF.cpp:

2008-10-06  Tor Arne Vestbø  <tavestbo@trolltech.com>

        Reviewed by Simon.

        Use bundles on QtWebKit/Mac for platform modules

        * platform/FileSystem.h:
        * platform/qt/FileSystemQt.cpp:
        (WebCore::unloadModule):

2008-10-06  Ariya Hidayat  <ariya.hidayat@trolltech.com>

        Reviewed by Simon.

        Build fix for MinGW.

        * platform/win/SystemTimeWin.cpp:
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginView::invalidateRect):

2008-10-06  Adam Roben  <aroben@apple.com>

        Mimic the inspector/ directory structure in WebCore.vcproj

        * WebCore.vcproj/WebCore.vcproj:

2008-10-06  Adam Roben  <aroben@apple.com>

        Windows build fix

        * WebCore.vcproj/WebCore.vcproj: Update the Include path for all
        configurations to include WebCore/inspector.

2008-10-04  Eric Seidel  <eric@webkit.org>

        Reviewed by Darin Adler.

        SVG should support ascent and descent properties <font-face> instead of <font>!
        https://bugs.webkit.org/show_bug.cgi?id=21365

        Tested by many many existing SVG tests.

        * svg/SVGFontFaceElement.cpp:
        (WebCore::SVGFontFaceElement::ascent):
        (WebCore::SVGFontFaceElement::descent):

2008-10-05  Darin Fisher  <darin@chromium.org>

        Reviewed by Eric Seidel.

        REGRESSION: crash in ScriptElement::notifyFinished
        Fixes https://bugs.webkit.org/show_bug.cgi?id=21329

        * dom/ScriptElement.cpp:
        (WebCore::ScriptElementData::notifyFinished): Revert part of r35744 to
        ensure that the ScriptElementData object is not destroyed prematurely.

2008-10-05  Chris Lord  <chris@openedhand.com>

        Reviewed by Alp Toker. Landed by Jan Alonzo.

        https://bugs.webkit.org/show_bug.cgi?id=20624
        WebKit-gtk uses deprecated GtkType/GtkObject

        * plugins/gtk/gtk2xtbin.c:
        (gtk_xtbin_get_type):
        * plugins/gtk/gtk2xtbin.h:

2008-10-05  Luke Kenneth Casson Leighton  <lkcl@lkcl.net>

        Reviewed by David Hyatt.

        GTK_WINDOW_HWND not GTK_WINDOWING_HWND
        https://bugs.webkit.org/show_bug.cgi?id=20725

        Updated to ToT by Jan Alonzo.

        * plugins/gtk/PluginViewGtk.cpp:
        (WebCore::PluginView::getValue):

2008-10-05  Jan Michael Alonzo  <jmalonzo@webkit.org>

        Reviewed by Darin Adler.

        Invalid cast from GdkWindow to GtkWidget
        https://bugs.webkit.org/show_bug.cgi?id=21391

        Fix a misplaced closing parenthesis to actually cast the widget, not the window

        * platform/gtk/PlatformScreenGtk.cpp:
        (WebCore::screenDepth):

2008-10-05  Adam Barth  <abarth@webkit.org>

        Reviewed by Darin Alder.

        Attach the Origin header to POST requests to help defend against
        cross-site request forgery.

        https://bugs.webkit.org/show_bug.cgi?id=20792

        Collin Jackson <collinj@webkit.org> also contributed to this patch.

        Tests: http/tests/security/originHeader/origin-header-for-data.html
               http/tests/security/originHeader/origin-header-for-empty.html
               http/tests/security/originHeader/origin-header-for-get.html
               http/tests/security/originHeader/origin-header-for-https.html
               http/tests/security/originHeader/origin-header-for-post.html

        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::createWindow):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::createWindow):
        (WebCore::FrameLoader::urlSelected):
        (WebCore::FrameLoader::submitForm):
        (WebCore::FrameLoader::outgoingOrigin):
        (WebCore::FrameLoader::loadURL):
        (WebCore::FrameLoader::addExtraFieldsToRequest):
        (WebCore::FrameLoader::loadPostRequest):
        (WebCore::FrameLoader::loadResourceSynchronously):
        (WebCore::FrameLoader::loadItem):
        * loader/FrameLoader.h:
        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::create):
        * loader/loader.cpp:
        (WebCore::Loader::Host::servePendingRequests):
        * platform/SecurityOrigin.cpp:
        (WebCore::SecurityOrigin::toHTTPOrigin):
        * platform/SecurityOrigin.h:
        * platform/network/ResourceRequestBase.h:
        (WebCore::ResourceRequestBase::httpOrigin):
        (WebCore::ResourceRequestBase::setHTTPOrigin):
        (WebCore::ResourceRequestBase::clearHTTPOrigin):
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::makeSimpleCrossSiteAccessRequest):
        (WebCore::XMLHttpRequest::makeCrossSiteAccessRequestWithPreflight):
        (WebCore::XMLHttpRequest::handleAsynchronousPreflightResult):
        (WebCore::XMLHttpRequest::didReceiveResponsePreflight):

2008-10-04  Oliver Hunt  <oliver@apple.com>

        Reviewed by Tim Hatcher.

        Bug 21381: Incremental parsing of html causes bogus line numbers in some cases
        <https://bugs.webkit.org/show_bug.cgi?id=21381>

        If we hit a parsing boundary (end of a packet, etc) in the middle of a
        <script> element when we are doing an incremental parse, we exit the
        parser, and reenter later when more data is available.  During this
        reentry we incorrectly reset the scriptStartLineno to the current line
        in the parser, which is now part way through the script element.

        The solution is to track whether we are entering or reentering the parsing
        of a script element.  We do this simply by 0 checking scriptStartLineno,
        and resetting it after we complete parsing of each script element.

        Test: http/tests/incremental/pause-in-script-element.pl

        * ChangeLog:
        * html/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::parseSpecial):
        (WebCore::HTMLTokenizer::scriptHandler):

2008-10-04  Alp Toker  <alp@nuanti.com>

        Reviewed by David Hyatt. Landed by Jan Alonzo.

        https://bugs.webkit.org/show_bug.cgi?id=20924
        [Gtk] Linux/Gtk: Recent tree revisions fail Acid2 and Acid3

        https://bugs.webkit.org/show_bug.cgi?id=19578
        [CURL] problem in parseDataUrl

        De-obfuscate parseDataUrl() and fix regressions introduced in r35954.
        This patch also fixes encoding support in escaped (non-Base64) data
        URLs. All manual data URL tests now pass in both GLib and non-GLib
        code paths.

        * platform/network/curl/ResourceHandleManager.cpp:
        (WebCore::parseDataUrl):

2008-10-04  Timothy Hatcher  <timothy@apple.com>

        Makes breakpoints and debugging code during page load work in the
        Web Inspector's debugger. Specifically, this makes the source
        code for loading resources show up in the Scripts panel.

        https://bugs.webkit.org/show_bug.cgi?id=19053
        rdar://problem/5933408

        Reviewed by Mark Rowe.

        * WebCore.xcodeproj/project.pbxproj: Mark the inspector group as
        not using tabs and a tab width of 8.
        * inspector/InspectorController.cpp:
        (WebCore::addResourceSourceToFrame): Return a bool to report if the
        source was added successfully or not.
        (WebCore::addSourceToFrame): Ditto.
        * inspector/front-end/ScriptView.js:
        (WebInspector.ScriptView.prototype.setupSourceFrameIfNeeded):
        Return early if the InspectorController.addSourceToFrame fails.
        Moved the delete of the _frameNeedsSetup property after that call so
        if the source wasn't added it will be attempted again.
        * inspector/front-end/SourceView.js:
        (WebInspector.SourceView.prototype.detach): Move a comment.
        (WebInspector.SourceView.prototype.setupSourceFrameIfNeeded):
        Don't check if the resource is finished or failed, just attempt
        to add the source to the frame. WebCore has the source, but the
        finished property hasn't been set yet. Return early if the
        InspectorController.addSourceToFrame fails. Moved the delete
        of the _frameNeedsSetup property after that call so if the source
        wasn't added it will be attempted again.
        (WebInspector.SourceView.prototype._resourceLoadingFinished):
        Clear the _frameNeedsSetup and _sourceFrameSetup properties so
        the source frame will we populated again now that the resource
        load has finished.
        * manual-tests/inspector/debugger-pause-during-load.html: Added.

2008-10-04  Mark Rowe  <mrowe@apple.com>

        Reviewed by Tim Hatcher.

        Add a 'Check For Weak VTables' build phase to catch weak vtables as early as possible.

        * WebCore.xcodeproj/project.pbxproj:

2008-10-04  David Hyatt  <hyatt@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=21373

        Tear down scrollbars in FrameView rather than ScrollView so that the connection to the hostWindow()
        is still present.

        Reviewed by Mark Rowe

        * page/FrameView.cpp:
        (WebCore::FrameView::~FrameView):

2008-10-04  Sam Weinig  <sam@webkit.org>

        Reviewed by Dan Bernstein.

        Avoid copying a Vector when using getSupportedKeySizes.

        * html/HTMLKeygenElement.cpp:
        (WebCore::HTMLKeygenElement::HTMLKeygenElement):
        * platform/SSLKeyGenerator.h:
        * platform/gtk/TemporaryLinkStubs.cpp:
        (WebCore::getSupportedKeySizes):
        * platform/mac/SSLKeyGeneratorMac.mm:
        (WebCore::getSupportedKeySizes):
        * platform/qt/TemporaryLinkStubs.cpp:
        (WebCore::getSupportedKeySizes):
        * platform/win/TemporaryLinkStubs.cpp:
        (WebCore::getSupportedKeySizes):
        * platform/wx/TemporaryLinkStubs.cpp:
        (WebCore::getSupportedKeySizes):

2008-10-04  Darin Adler  <darin@apple.com>

        Reviewed by Cameron Zwarich.

        - prepare for https://bugs.webkit.org/show_bug.cgi?id=21295
          Bug 21295: Replace ExecState with a call frame Register pointer

        * bindings/js/JSQuarantinedObjectWrapper.cpp:
        (WebCore::JSQuarantinedObjectWrapper::allowsUnwrappedAccessFrom):
        Remove bogus "const".
        * bindings/js/JSQuarantinedObjectWrapper.h: Ditto.

2008-10-04  David Hyatt  <hyatt@apple.com>

        Make PopupMenuClient obey the platform abstraction.  Remove any connection to Document and RenderStyle.

        Reviewed by Darin Adler

        * WebCore.xcodeproj/project.pbxproj:
        * platform/PopupMenuClient.h:
        * platform/gtk/PopupMenuGtk.cpp:
        (WebCore::PopupMenu::show):
        * platform/mac/PopupMenuMac.mm:
        (WebCore::PopupMenu::populate):
        (WebCore::PopupMenu::show):
        * platform/qt/PopupMenuQt.cpp:
        (WebCore::PopupMenu::populate):
        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenu::calculatePositionAndSize):
        (WebCore::PopupMenu::paint):
        (WebCore::PopupWndProc):
        * rendering/RenderMenuList.cpp:
        (WebCore::RenderMenuList::itemStyle):
        (WebCore::RenderMenuList::menuStyle):
        (WebCore::RenderMenuList::hostWindow):
        * rendering/RenderMenuList.h:
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::itemStyle):
        (WebCore::RenderTextControl::menuStyle):
        (WebCore::RenderTextControl::hostWindow):
        * rendering/RenderTextControl.h:

2008-10-04  Matt Lilek  <webkit@mattlilek.com>

        Build fix - restore Private role to headers that had it before the move.

        * WebCore.xcodeproj/project.pbxproj:

2008-10-04  Darin Adler  <darin@apple.com>

        - try to fix build

        * DerivedSources.make: Add new inspector directory to VPATH.
        * GNUmakefile.am: Add new inspector directory to includes.
        Re-sort the IDL_BINDINGS list. Add new inspector directory
        to VPATH.

2008-10-04  Matt Lilek  <webkit@mattlilek.com>

        Not reviewed, attempt to fix Gtk build.

        * GNUmakefile.am:

2008-10-03  Timothy Hatcher  <timothy@apple.com>

        Move the Web Inspector files into a top-level "inspector" folder.

        https://bugs.webkit.org/show_bug.cgi?id=21359

        Reviewed by Dave Hyatt.

        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * inspector/InspectorClient.h: Renamed from WebCore/page/InspectorClient.h.
        * inspector/InspectorController.cpp: Renamed from WebCore/page/InspectorController.cpp.
        * inspector/InspectorController.h: Renamed from WebCore/page/InspectorController.h.
        * inspector/JavaScriptCallFrame.cpp: Renamed from WebCore/page/JavaScriptCallFrame.cpp.
        * inspector/JavaScriptCallFrame.h: Renamed from WebCore/page/JavaScriptCallFrame.h.
        * inspector/JavaScriptCallFrame.idl: Renamed from WebCore/page/JavaScriptCallFrame.idl.
        * inspector/JavaScriptDebugListener.h: Renamed from WebCore/page/JavaScriptDebugListener.h.
        * inspector/JavaScriptDebugServer.cpp: Renamed from WebCore/page/JavaScriptDebugServer.cpp.
        * inspector/JavaScriptDebugServer.h: Renamed from WebCore/page/JavaScriptDebugServer.h.
        * inspector/JavaScriptProfile.cpp: Renamed from WebCore/page/JavaScriptProfile.cpp.
        * inspector/JavaScriptProfile.h: Renamed from WebCore/page/JavaScriptProfile.h.
        * inspector/JavaScriptProfileNode.cpp: Renamed from WebCore/page/JavaScriptProfileNode.cpp.
        * inspector/JavaScriptProfileNode.h: Renamed from WebCore/page/JavaScriptProfileNode.h.
        * inspector/front-end/Breakpoint.js: Renamed from WebCore/page/inspector/Breakpoint.js.
        * inspector/front-end/BreakpointsSidebarPane.js: Renamed from WebCore/page/inspector/BreakpointsSidebarPane.js.
        * inspector/front-end/CallStackSidebarPane.js: Renamed from WebCore/page/inspector/CallStackSidebarPane.js.
        * inspector/front-end/Console.js: Renamed from WebCore/page/inspector/Console.js.
        * inspector/front-end/DataGrid.js: Renamed from WebCore/page/inspector/DataGrid.js.
        * inspector/front-end/Database.js: Renamed from WebCore/page/inspector/Database.js.
        * inspector/front-end/DatabaseQueryView.js: Renamed from WebCore/page/inspector/DatabaseQueryView.js.
        * inspector/front-end/DatabaseTableView.js: Renamed from WebCore/page/inspector/DatabaseTableView.js.
        * inspector/front-end/DatabasesPanel.js: Renamed from WebCore/page/inspector/DatabasesPanel.js.
        * inspector/front-end/ElementsPanel.js: Renamed from WebCore/page/inspector/ElementsPanel.js.
        * inspector/front-end/ElementsTreeOutline.js: Renamed from WebCore/page/inspector/ElementsTreeOutline.js.
        * inspector/front-end/FontView.js: Renamed from WebCore/page/inspector/FontView.js.
        * inspector/front-end/ImageView.js: Renamed from WebCore/page/inspector/ImageView.js.
        * inspector/front-end/Images/back.png: Renamed from WebCore/page/inspector/Images/back.png.
        * inspector/front-end/Images/checker.png: Renamed from WebCore/page/inspector/Images/checker.png.
        * inspector/front-end/Images/clearConsoleButtons.png: Renamed from WebCore/page/inspector/Images/clearConsoleButtons.png.
        * inspector/front-end/Images/closeButtons.png: Renamed from WebCore/page/inspector/Images/closeButtons.png.
        * inspector/front-end/Images/consoleButtons.png: Renamed from WebCore/page/inspector/Images/consoleButtons.png.
        * inspector/front-end/Images/database.png: Renamed from WebCore/page/inspector/Images/database.png.
        * inspector/front-end/Images/databaseTable.png: Renamed from WebCore/page/inspector/Images/databaseTable.png.
        * inspector/front-end/Images/databasesIcon.png: Renamed from WebCore/page/inspector/Images/databasesIcon.png.
        * inspector/front-end/Images/debuggerContinue.png: Renamed from WebCore/page/inspector/Images/debuggerContinue.png.
        * inspector/front-end/Images/debuggerPause.png: Renamed from WebCore/page/inspector/Images/debuggerPause.png.
        * inspector/front-end/Images/debuggerStepInto.png: Renamed from WebCore/page/inspector/Images/debuggerStepInto.png.
        * inspector/front-end/Images/debuggerStepOut.png: Renamed from WebCore/page/inspector/Images/debuggerStepOut.png.
        * inspector/front-end/Images/debuggerStepOver.png: Renamed from WebCore/page/inspector/Images/debuggerStepOver.png.
        * inspector/front-end/Images/debuggingButtons.png: Renamed from WebCore/page/inspector/Images/debuggingButtons.png.
        * inspector/front-end/Images/disclosureTriangleSmallDown.png: Renamed from WebCore/page/inspector/Images/disclosureTriangleSmallDown.png.
        * inspector/front-end/Images/disclosureTriangleSmallDownBlack.png: Renamed from WebCore/page/inspector/Images/disclosureTriangleSmallDownBlack.png.
        * inspector/front-end/Images/disclosureTriangleSmallDownWhite.png: Renamed from WebCore/page/inspector/Images/disclosureTriangleSmallDownWhite.png.
        * inspector/front-end/Images/disclosureTriangleSmallRight.png: Renamed from WebCore/page/inspector/Images/disclosureTriangleSmallRight.png.
        * inspector/front-end/Images/disclosureTriangleSmallRightBlack.png: Renamed from WebCore/page/inspector/Images/disclosureTriangleSmallRightBlack.png.
        * inspector/front-end/Images/disclosureTriangleSmallRightDown.png: Renamed from WebCore/page/inspector/Images/disclosureTriangleSmallRightDown.png.
        * inspector/front-end/Images/disclosureTriangleSmallRightDownBlack.png: Renamed from WebCore/page/inspector/Images/disclosureTriangleSmallRightDownBlack.png.
        * inspector/front-end/Images/disclosureTriangleSmallRightDownWhite.png: Renamed from WebCore/page/inspector/Images/disclosureTriangleSmallRightDownWhite.png.
        * inspector/front-end/Images/disclosureTriangleSmallRightWhite.png: Renamed from WebCore/page/inspector/Images/disclosureTriangleSmallRightWhite.png.
        * inspector/front-end/Images/dockButtons.png: Renamed from WebCore/page/inspector/Images/dockButtons.png.
        * inspector/front-end/Images/elementsIcon.png: Renamed from WebCore/page/inspector/Images/elementsIcon.png.
        * inspector/front-end/Images/errorIcon.png: Renamed from WebCore/page/inspector/Images/errorIcon.png.
        * inspector/front-end/Images/errorMediumIcon.png: Renamed from WebCore/page/inspector/Images/errorMediumIcon.png.
        * inspector/front-end/Images/excludeButtons.png: Renamed from WebCore/page/inspector/Images/excludeButtons.png.
        * inspector/front-end/Images/focusButtons.png: Renamed from WebCore/page/inspector/Images/focusButtons.png.
        * inspector/front-end/Images/forward.png: Renamed from WebCore/page/inspector/Images/forward.png.
        * inspector/front-end/Images/glossyHeader.png: Renamed from WebCore/page/inspector/Images/glossyHeader.png.
        * inspector/front-end/Images/glossyHeaderPressed.png: Renamed from WebCore/page/inspector/Images/glossyHeaderPressed.png.
        * inspector/front-end/Images/glossyHeaderSelected.png: Renamed from WebCore/page/inspector/Images/glossyHeaderSelected.png.
        * inspector/front-end/Images/glossyHeaderSelectedPressed.png: Renamed from WebCore/page/inspector/Images/glossyHeaderSelectedPressed.png.
        * inspector/front-end/Images/goArrow.png: Renamed from WebCore/page/inspector/Images/goArrow.png.
        * inspector/front-end/Images/largerResourcesButtons.png: Renamed from WebCore/page/inspector/Images/largerResourcesButtons.png.
        * inspector/front-end/Images/nodeSearchButtons.png: Renamed from WebCore/page/inspector/Images/nodeSearchButtons.png.
        * inspector/front-end/Images/paneBottomGrow.png: Renamed from WebCore/page/inspector/Images/paneBottomGrow.png.
        * inspector/front-end/Images/paneBottomGrowActive.png: Renamed from WebCore/page/inspector/Images/paneBottomGrowActive.png.
        * inspector/front-end/Images/paneGrowHandleLine.png: Renamed from WebCore/page/inspector/Images/paneGrowHandleLine.png.
        * inspector/front-end/Images/pauseOnExceptionButtons.png: Renamed from WebCore/page/inspector/Images/pauseOnExceptionButtons.png.
        * inspector/front-end/Images/percentButtons.png: Renamed from WebCore/page/inspector/Images/percentButtons.png.
        * inspector/front-end/Images/profileGroupIcon.png: Renamed from WebCore/page/inspector/Images/profileGroupIcon.png.
        * inspector/front-end/Images/profileIcon.png: Renamed from WebCore/page/inspector/Images/profileIcon.png.
        * inspector/front-end/Images/profileSmallIcon.png: Renamed from WebCore/page/inspector/Images/profileSmallIcon.png.
        * inspector/front-end/Images/profilesIcon.png: Renamed from WebCore/page/inspector/Images/profilesIcon.png.
        * inspector/front-end/Images/recordButtons.png: Renamed from WebCore/page/inspector/Images/recordButtons.png.
        * inspector/front-end/Images/reloadButtons.png: Renamed from WebCore/page/inspector/Images/reloadButtons.png.
        * inspector/front-end/Images/resourceCSSIcon.png: Renamed from WebCore/page/inspector/Images/resourceCSSIcon.png.
        * inspector/front-end/Images/resourceDocumentIcon.png: Renamed from WebCore/page/inspector/Images/resourceDocumentIcon.png.
        * inspector/front-end/Images/resourceDocumentIconSmall.png: Renamed from WebCore/page/inspector/Images/resourceDocumentIconSmall.png.
        * inspector/front-end/Images/resourceJSIcon.png: Renamed from WebCore/page/inspector/Images/resourceJSIcon.png.
        * inspector/front-end/Images/resourcePlainIcon.png: Renamed from WebCore/page/inspector/Images/resourcePlainIcon.png.
        * inspector/front-end/Images/resourcePlainIconSmall.png: Renamed from WebCore/page/inspector/Images/resourcePlainIconSmall.png.
        * inspector/front-end/Images/resourcesIcon.png: Renamed from WebCore/page/inspector/Images/resourcesIcon.png.
        * inspector/front-end/Images/resourcesSizeGraphIcon.png: Renamed from WebCore/page/inspector/Images/resourcesSizeGraphIcon.png.
        * inspector/front-end/Images/resourcesTimeGraphIcon.png: Renamed from WebCore/page/inspector/Images/resourcesTimeGraphIcon.png.
        * inspector/front-end/Images/scriptsIcon.png: Renamed from WebCore/page/inspector/Images/scriptsIcon.png.
        * inspector/front-end/Images/searchSmallBlue.png: Renamed from WebCore/page/inspector/Images/searchSmallBlue.png.
        * inspector/front-end/Images/searchSmallBrightBlue.png: Renamed from WebCore/page/inspector/Images/searchSmallBrightBlue.png.
        * inspector/front-end/Images/searchSmallGray.png: Renamed from WebCore/page/inspector/Images/searchSmallGray.png.
        * inspector/front-end/Images/searchSmallWhite.png: Renamed from WebCore/page/inspector/Images/searchSmallWhite.png.
        * inspector/front-end/Images/segment.png: Renamed from WebCore/page/inspector/Images/segment.png.
        * inspector/front-end/Images/segmentEnd.png: Renamed from WebCore/page/inspector/Images/segmentEnd.png.
        * inspector/front-end/Images/segmentHover.png: Renamed from WebCore/page/inspector/Images/segmentHover.png.
        * inspector/front-end/Images/segmentHoverEnd.png: Renamed from WebCore/page/inspector/Images/segmentHoverEnd.png.
        * inspector/front-end/Images/segmentSelected.png: Renamed from WebCore/page/inspector/Images/segmentSelected.png.
        * inspector/front-end/Images/segmentSelectedEnd.png: Renamed from WebCore/page/inspector/Images/segmentSelectedEnd.png.
        * inspector/front-end/Images/splitviewDimple.png: Renamed from WebCore/page/inspector/Images/splitviewDimple.png.
        * inspector/front-end/Images/splitviewDividerBackground.png: Renamed from WebCore/page/inspector/Images/splitviewDividerBackground.png.
        * inspector/front-end/Images/statusbarBackground.png: Renamed from WebCore/page/inspector/Images/statusbarBackground.png.
        * inspector/front-end/Images/statusbarBottomBackground.png: Renamed from WebCore/page/inspector/Images/statusbarBottomBackground.png.
        * inspector/front-end/Images/statusbarButtons.png: Renamed from WebCore/page/inspector/Images/statusbarButtons.png.
        * inspector/front-end/Images/statusbarMenuButton.png: Renamed from WebCore/page/inspector/Images/statusbarMenuButton.png.
        * inspector/front-end/Images/statusbarMenuButtonSelected.png: Renamed from WebCore/page/inspector/Images/statusbarMenuButtonSelected.png.
        * inspector/front-end/Images/statusbarResizerHorizontal.png: Renamed from WebCore/page/inspector/Images/statusbarResizerHorizontal.png.
        * inspector/front-end/Images/statusbarResizerVertical.png: Renamed from WebCore/page/inspector/Images/statusbarResizerVertical.png.
        * inspector/front-end/Images/timelinePillBlue.png: Renamed from WebCore/page/inspector/Images/timelinePillBlue.png.
        * inspector/front-end/Images/timelinePillGray.png: Renamed from WebCore/page/inspector/Images/timelinePillGray.png.
        * inspector/front-end/Images/timelinePillGreen.png: Renamed from WebCore/page/inspector/Images/timelinePillGreen.png.
        * inspector/front-end/Images/timelinePillOrange.png: Renamed from WebCore/page/inspector/Images/timelinePillOrange.png.
        * inspector/front-end/Images/timelinePillPurple.png: Renamed from WebCore/page/inspector/Images/timelinePillPurple.png.
        * inspector/front-end/Images/timelinePillRed.png: Renamed from WebCore/page/inspector/Images/timelinePillRed.png.
        * inspector/front-end/Images/timelinePillYellow.png: Renamed from WebCore/page/inspector/Images/timelinePillYellow.png.
        * inspector/front-end/Images/tipBalloon.png: Renamed from WebCore/page/inspector/Images/tipBalloon.png.
        * inspector/front-end/Images/tipBalloonBottom.png: Renamed from WebCore/page/inspector/Images/tipBalloonBottom.png.
        * inspector/front-end/Images/tipIcon.png: Renamed from WebCore/page/inspector/Images/tipIcon.png.
        * inspector/front-end/Images/tipIconPressed.png: Renamed from WebCore/page/inspector/Images/tipIconPressed.png.
        * inspector/front-end/Images/toolbarItemSelected.png: Renamed from WebCore/page/inspector/Images/toolbarItemSelected.png.
        * inspector/front-end/Images/treeDownTriangleBlack.png: Renamed from WebCore/page/inspector/Images/treeDownTriangleBlack.png.
        * inspector/front-end/Images/treeDownTriangleWhite.png: Renamed from WebCore/page/inspector/Images/treeDownTriangleWhite.png.
        * inspector/front-end/Images/treeRightTriangleBlack.png: Renamed from WebCore/page/inspector/Images/treeRightTriangleBlack.png.
        * inspector/front-end/Images/treeRightTriangleWhite.png: Renamed from WebCore/page/inspector/Images/treeRightTriangleWhite.png.
        * inspector/front-end/Images/treeUpTriangleBlack.png: Renamed from WebCore/page/inspector/Images/treeUpTriangleBlack.png.
        * inspector/front-end/Images/treeUpTriangleWhite.png: Renamed from WebCore/page/inspector/Images/treeUpTriangleWhite.png.
        * inspector/front-end/Images/userInputIcon.png: Renamed from WebCore/page/inspector/Images/userInputIcon.png.
        * inspector/front-end/Images/userInputPreviousIcon.png: Renamed from WebCore/page/inspector/Images/userInputPreviousIcon.png.
        * inspector/front-end/Images/warningIcon.png: Renamed from WebCore/page/inspector/Images/warningIcon.png.
        * inspector/front-end/Images/warningMediumIcon.png: Renamed from WebCore/page/inspector/Images/warningMediumIcon.png.
        * inspector/front-end/Images/warningsErrors.png: Renamed from WebCore/page/inspector/Images/warningsErrors.png.
        * inspector/front-end/MetricsSidebarPane.js: Renamed from WebCore/page/inspector/MetricsSidebarPane.js.
        * inspector/front-end/Object.js: Renamed from WebCore/page/inspector/Object.js.
        * inspector/front-end/ObjectPropertiesSection.js: Renamed from WebCore/page/inspector/ObjectPropertiesSection.js.
        * inspector/front-end/Panel.js: Renamed from WebCore/page/inspector/Panel.js.
        * inspector/front-end/Placard.js: Renamed from WebCore/page/inspector/Placard.js.
        * inspector/front-end/ProfileView.js: Renamed from WebCore/page/inspector/ProfileView.js.
        * inspector/front-end/ProfilesPanel.js: Renamed from WebCore/page/inspector/ProfilesPanel.js.
        * inspector/front-end/PropertiesSection.js: Renamed from WebCore/page/inspector/PropertiesSection.js.
        * inspector/front-end/PropertiesSidebarPane.js: Renamed from WebCore/page/inspector/PropertiesSidebarPane.js.
        * inspector/front-end/Resource.js: Renamed from WebCore/page/inspector/Resource.js.
        * inspector/front-end/ResourceCategory.js: Renamed from WebCore/page/inspector/ResourceCategory.js.
        * inspector/front-end/ResourceView.js: Renamed from WebCore/page/inspector/ResourceView.js.
        * inspector/front-end/ResourcesPanel.js: Renamed from WebCore/page/inspector/ResourcesPanel.js.
        * inspector/front-end/ScopeChainSidebarPane.js: Renamed from WebCore/page/inspector/ScopeChainSidebarPane.js.
        * inspector/front-end/Script.js: Renamed from WebCore/page/inspector/Script.js.
        * inspector/front-end/ScriptView.js: Renamed from WebCore/page/inspector/ScriptView.js.
        * inspector/front-end/ScriptsPanel.js: Renamed from WebCore/page/inspector/ScriptsPanel.js.
        * inspector/front-end/SidebarPane.js: Renamed from WebCore/page/inspector/SidebarPane.js.
        * inspector/front-end/SidebarTreeElement.js: Renamed from WebCore/page/inspector/SidebarTreeElement.js.
        * inspector/front-end/SourceFrame.js: Renamed from WebCore/page/inspector/SourceFrame.js.
        * inspector/front-end/SourceView.js: Renamed from WebCore/page/inspector/SourceView.js.
        * inspector/front-end/StylesSidebarPane.js: Renamed from WebCore/page/inspector/StylesSidebarPane.js.
        * inspector/front-end/TextPrompt.js: Renamed from WebCore/page/inspector/TextPrompt.js.
        * inspector/front-end/View.js: Renamed from WebCore/page/inspector/View.js.
        * inspector/front-end/WebKit.qrc: Renamed from WebCore/page/inspector/WebKit.qrc.
        * inspector/front-end/inspector.css: Renamed from WebCore/page/inspector/inspector.css.
        * inspector/front-end/inspector.html: Renamed from WebCore/page/inspector/inspector.html.
        * inspector/front-end/inspector.js: Renamed from WebCore/page/inspector/inspector.js.
        * inspector/front-end/treeoutline.js: Renamed from WebCore/page/inspector/treeoutline.js.
        * inspector/front-end/utilities.js: Renamed from WebCore/page/inspector/utilities.js.

2008-10-03  Timothy Hatcher  <timothy@apple.com>

        Adds support to the Web Inspector's Elements panel for fast tag name,
        class name, id and attribute name searching. The panel first tries
        using getElementById, getElementsByClassName and getElementsByTagName
        with the search query. Then does a slower search using XPath for partial
        matches, text and comment matches.

        Adds support for search queries like "<div>", "<h" and "frame>".
        These forms limit the search to tag names, text and comment matches.

        https://bugs.webkit.org/show_bug.cgi?id=21353

        Reviewed by Maciej Stachowiak.

        * page/inspector/ElementsPanel.js:
        (WebInspector.ElementsPanel.prototype.performSearch): Add tag syntax
        support. Add new search functions that try exact matches first.

2008-10-03  Timothy Hatcher  <timothy@apple.com>

        Changes how searching works in the Web Inspector's Elements
        panel. The search tasks are divided into chunks that are small
        units of work that are performed at a time interval. This
        change also prevents queries that will select all elements,
        since that isn't useful.

        https://bugs.webkit.org/show_bug.cgi?id=21285

        Reviewed by Oliver Hunt.

        * page/inspector/ElementsPanel.js:
        (WebInspector.ElementsPanel.prototype.searchCancled):
        Remove the searchResultsProperty form results since there might
        be an unfinished search.
        (WebInspector.ElementsPanel.prototype.performSearch): Divide the
        documents and search functions into chunks that are performed on
        a interval of 25ms. Prevent searches for "//*" and "*".

2008-10-03  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Cameron Zwarich.

        - "this" object in methods called on primitives should be wrapper object
        https://bugs.webkit.org/show_bug.cgi?id=21362

        Updated so toThis conversion for the split window is handled properly.

        * bindings/scripts/CodeGeneratorJS.pm:

2008-10-03  Sam Weinig  <sam@webkit.org>

        Reviewed by David "The Motivator" Hyatt.

        Patch for https://bugs.webkit.org/show_bug.cgi?id=21355
        Move SecurityOrigin out of platform/ to page/.

        It was a layering violation for SecurityOrigin to be in platform
        as it depended on FrameLoader.

        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * page/SecurityOrigin.cpp: Copied from platform/SecurityOrigin.cpp.
        * page/SecurityOrigin.h: Copied from platform/SecurityOrigin.h.
        * page/SecurityOriginHash.h: Copied from platform/SecurityOriginHash.h.
        * platform/SecurityOrigin.cpp: Removed.
        * platform/SecurityOrigin.h: Removed.
        * platform/SecurityOriginHash.h: Removed.

2008-10-03  Marco Barisione  <marco.barisione@collabora.co.uk>

        Reviewed by Alp Toker.

        http://bugs.webkit.org/show_bug.cgi?id=18832
        [curl] file upload does not work

        The curl_off_t integer type has a different size depending if large
        file support is enabled or not. There is no different public API for
        the two cases, so the same function accepts a different type based on
        a compilation option the could be different in WebKit and libcurl.
        To fix the bug we query libcurl at runtime for large file support and
        pass the right type based on that.

        * platform/network/curl/ResourceHandleManager.cpp:
        (WebCore::ResourceHandleManager::setupPOST):

2008-10-03  Jan Michael Alonzo  <jmalonzo@webkit.org>

        Reviewed by David Hyatt.

        Gtk build fixes.

        * platform/gtk/FileChooserGtk.cpp:
        (WebCore::FileChooser::openFileChooser):
        * platform/gtk/PlatformScreenGtk.cpp:
        (WebCore::screenDepth):
        (WebCore::screenDepthPerComponent):
        (WebCore::screenAvailableRect):
        * platform/gtk/PopupMenuGtk.cpp:
        (WebCore::PopupMenu::show):
        * platform/gtk/ScrollViewGtk.cpp:
        (WebCore::ScrollView::platformAddChild):
        (WebCore::ScrollView::platformRemoveChild):
        * platform/gtk/WidgetGtk.cpp:
        (WebCore::Widget::setCursor):
        * plugins/gtk/PluginViewGtk.cpp:
        (WebCore::PluginView::getValue):
        (WebCore::PluginView::forceRedraw):
        (WebCore::PluginView::init):

2008-10-03  David Hyatt  <hyatt@apple.com>

        Fix Qt bustage from missing include.

        * platform/qt/PlatformScreenQt.cpp:

2008-10-03  David Hyatt  <hyatt@apple.com>

        Fix Windows scrollbar bustage in popup menus.

        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupWndProc):

2008-10-03  David Hyatt  <hyatt@apple.com>

        Fix Windows bustage.

        * platform/win/FileChooserWin.cpp:
        (WebCore::FileChooser::openFileChooser):
        * platform/win/PlatformScreenWin.cpp:
        (WebCore::monitorInfoForWidget):
        * platform/win/WidgetWin.cpp:
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginView::getValue):
        (WebCore::PluginView::forceRedraw):
        (WebCore::PluginView::init):

2008-10-03  Darin Adler  <darin@apple.com>

        * bindings/js/JSInspectedObjectWrapper.cpp: Try to fix a build failure
        seen on some machines but not others by adding an include.

2008-10-03  Darin Adler  <darin@apple.com>

        - Qt build fix

        * bridge/qt/qt_runtime.cpp: Remove long-obsolete codeType and
        execute functions. Declarations for these relied on the CodeType
        enumeration, which used to be in ExecState.h; but the functions
        aren't needed at all.
        * bridge/qt/qt_runtime.h: Ditto.

2008-10-03  Darin Adler  <darin@apple.com>

        Reviewed by Geoff Garen.

        - next step of https://bugs.webkit.org/show_bug.cgi?id=21295
          Turn ExecState into a call frame pointer.

        Remove m_globalObject and m_globalData from ExecState.

        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::JSDOMWindowBaseData::JSDOMWindowBaseData):
        Removed an argument now that JSGlobalObject doesn't need it any more.
        (WebCore::JSDOMWindowBase::JSDOMWindowBase): Removed the argument from
        the JSDOMWindowBaseData constructor, and added the this argument to the
        JSGlobalObject constructor. This is because a couple key bits of
        initialization moved from the data constructor to the JSGlobalObject
        constructor.
        * bindings/js/JSDOMWindowBase.h: Ditto.

        * bridge/qt/qt_runtime.cpp:
        (JSC::Bindings::QtRuntimeMethod::QtRuntimeMethod):
        * bridge/runtime_method.cpp:
        (JSC::RuntimeMethod::RuntimeMethod):
        Pass JSGlobalData* instead of ExecState* to the InternalFunction
        constructor.

2008-10-03  David Hyatt  <hyatt@apple.com>

        Fix Windows/Qt build bustage.

        Reviewed by ggaren

        * loader/EmptyClients.h:
        (WebCore::EmptyChromeClient::platformWindow):
        * page/Chrome.cpp:
        (WebCore::Chrome::platformWindow):
        * page/Chrome.h:
        * page/ChromeClient.h:
        * platform/HostWindow.h:
        * platform/qt/PlatformScreenQt.cpp:
        (WebCore::screenDepth):
        (WebCore::screenDepthPerComponent):
        (WebCore::screenIsMonochrome):
        (WebCore::screenRect):
        (WebCore::screenAvailableRect):
        * platform/qt/PopupMenuQt.cpp:
        (WebCore::PopupMenu::show):
        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenu::show):
        (WebCore::PopupMenu::calculatePositionAndSize):
        (WebCore::PopupWndProc):

2008-10-03  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dave Hyatt

        Make setStyle() take a const RenderStyle, to ensure that an
        earlier RenderStyle::diff() remains valid.

        * rendering/RenderBR.cpp:
        * rendering/RenderBR.h:
        * rendering/RenderBlock.cpp:
        * rendering/RenderBlock.h:
        * rendering/RenderBox.cpp:
        * rendering/RenderBox.h:
        * rendering/RenderButton.cpp:
        * rendering/RenderButton.h:
        * rendering/RenderFieldset.cpp:
        * rendering/RenderFieldset.h:
        * rendering/RenderFileUploadControl.cpp:
        * rendering/RenderFileUploadControl.h:
        * rendering/RenderInline.cpp:
        * rendering/RenderInline.h:
        * rendering/RenderListBox.cpp:
        * rendering/RenderListBox.h:
        * rendering/RenderListItem.cpp:
        * rendering/RenderListItem.h:
        * rendering/RenderListMarker.cpp:
        * rendering/RenderListMarker.h:
        * rendering/RenderMenuList.cpp:
        * rendering/RenderMenuList.h:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::setStyle):
        * rendering/RenderObject.h:
        * rendering/RenderReplaced.cpp:
        * rendering/RenderReplaced.h:
        * rendering/RenderSVGBlock.cpp:
        (WebCore::RenderSVGBlock::setStyle):
        * rendering/RenderSVGBlock.h:
        * rendering/RenderSVGGradientStop.cpp:
        * rendering/RenderSVGGradientStop.h:
        * rendering/RenderSlider.cpp:
        * rendering/RenderSlider.h:
        * rendering/RenderTable.cpp:
        * rendering/RenderTable.h:
        * rendering/RenderTableCell.cpp:
        * rendering/RenderTableCell.h:
        * rendering/RenderTableRow.cpp:
        * rendering/RenderTableRow.h:
        * rendering/RenderText.cpp:
        * rendering/RenderText.h:
        * rendering/RenderTextControl.cpp:
        * rendering/RenderTextControl.h:
        * rendering/RenderWidget.cpp:
        * rendering/RenderWidget.h:
        * rendering/style/RenderStyle.h:
        (WebCore::RenderStyle::isDisplayReplacedType):
        (WebCore::RenderStyle::isDisplayInlineType):

2008-10-03  David Hyatt  <hyatt@apple.com>

        Preparation for enabling scrollbars to hit test properly inside transforms.  Clean up the scrollbar
        event handlers to no longer be virtual.  Don't pass a mouse event where none is needed.  Add a new
        method on Scrollbars called transformEvent that will apply all of the transforms to make a new event
        that will work properly for hit testing.  This patch just stubs out that method to return the same
        event untransformed.

        Reviewed by Darin Adler

        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleMouseDoubleClickEvent):
        (WebCore::EventHandler::handleMouseMoveEvent):
        (WebCore::EventHandler::handleMouseReleaseEvent):
        (WebCore::EventHandler::passMousePressEventToScrollbar):
        * page/gtk/EventHandlerGtk.cpp:
        * page/mac/EventHandlerMac.mm:
        * page/qt/EventHandlerQt.cpp:
        * page/win/EventHandlerWin.cpp:
        * page/wx/EventHandlerWx.cpp:
        * platform/Scrollbar.cpp:
        (WebCore::Scrollbar::mouseMoved):
        (WebCore::Scrollbar::mouseExited):
        (WebCore::Scrollbar::mouseUp):
        (WebCore::Scrollbar::mouseDown):
        (WebCore::Scrollbar::transformEvent):
        * platform/Scrollbar.h:

2008-10-03  David Hyatt  <hyatt@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=21340

        Remove "containingWindow()/setContainingWindow()" from Widget.  HostWindow covers this now.

        Reviewed by Dan Bernstein & Darin Adler

        * platform/ScrollView.cpp:
        (WebCore::ScrollView::addChild):
        * platform/Widget.cpp:
        (WebCore::Widget::init):
        * platform/Widget.h:
        * platform/mac/WidgetMac.mm:
        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenu::show):

2008-10-03  Adele Peterson  <adele@apple.com>

        Reviewed by Sam Weinig.

        * css/CSSFontSelector.cpp: (WebCore::fontDataForGenericFamily):
        Return early if settings is nil.

2008-10-03  Rob Buis  <buis@kde.org>

        Reviewed by Darin.

        https://bugs.webkit.org/show_bug.cgi?id=20134
        REGRESSION (2.0.4-3.0.4): No default value set for <input type=range> with an even difference of (max - min)

        Make sure the input element gets the right default value when no value is set.

        Test: fast/forms/range-default-value.html

        * rendering/RenderSlider.cpp:
        (WebCore::RenderSlider::setPositionFromValue):

2008-10-03  David Hyatt  <hyatt@apple.com>

        Instead of a cross-platform init/destroy that forces every ScrollView platform to have a constructor/
        destructor that calls them, switch to having a cross-platform constructor/destructor that calls
        platform-specific init/destroy methods.

        With this change, ScrollViewWin.cpp can be removed from the build (yay!).

        Reviewed by Darin Adler

        * WebCore.vcproj/WebCore.vcproj:
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::ScrollView):
        (WebCore::ScrollView::~ScrollView):
        (WebCore::ScrollView::platformInit):
        (WebCore::ScrollView::platformDestroy):
        (WebCore::ScrollView::platformAddChild):
        (WebCore::ScrollView::platformRemoveChild):
        * platform/ScrollView.h:
        * platform/gtk/ScrollViewGtk.cpp:
        (WebCore::ScrollView::platformInit):
        (WebCore::ScrollView::platformDestroy):
        * platform/mac/ScrollViewMac.mm:
        * platform/qt/ScrollViewQt.cpp:
        (WebCore::ScrollView::platformInit):
        (WebCore::ScrollView::platformDestroy):
        * platform/win/ScrollViewWin.cpp: Removed.
        * platform/wx/ScrollViewWx.cpp:
        (WebCore::ScrollView::platformInit):
        (WebCore::ScrollView::platformDestroy):
        (WebCore::ScrollView::setPlatformWidget):

2008-10-03  Adele Peterson  <adele@apple.com>

        Reviewed by Dan Bernstein.

        Fix for <rdar://problem/6012018>
        https://bugs.webkit.org/show_bug.cgi?id=21335
        CrashTracer: [USER] 4959 crashes in Safari at com.apple.WebCore: WebCore::Frame::settings const + 8

        * css/CSSFontSelector.cpp: (WebCore::fontDataForGenericFamily): Return early if the frame is nil.

2008-10-03  Ariya Hidayat  <ariya.hidayat@trolltech.com>

        Build fix.

        * platform/qt/WidgetQt.cpp:
        (WebCore::Widget::invalidateRect):

2008-10-03  Alp Toker  <alp@nuanti.com>

        Remove some left-over GTK+ includes. No change in functionality.

        * platform/Cursor.h:
        * platform/graphics/Icon.h:
        * platform/gtk/RenderThemeGtk.h:

2008-10-03  Alp Toker  <alp@nuanti.com>

        Build fix for trailing comment after #endif

        * dom/ElementRareData.h:

2008-10-03  David Hyatt  <hyatt@apple.com>

        Remove addToDirtyRegion.

        Reviewed by Oliver Hunt

        * page/Chrome.cpp:
        * page/Chrome.h:
        * page/ChromeClient.h:
        * platform/ScrollView.h:
        * platform/gtk/ScrollViewGtk.cpp:
        * platform/qt/ScrollViewQt.cpp:
        * platform/win/ScrollViewWin.cpp:

2008-10-03  Dan Bernstein  <mitz@apple.com>

        Reviewed by Maciej Stachowiak.

        - fix a CachedResource leak introduced in r37176

        Undo r37176 and instead allow pruneDeadResources() to be re-entered, but
        afterwards bail out of the outer pruneDeadResources().

        * loader/Cache.cpp:
        (WebCore::Cache::Cache):
        (WebCore::Cache::pruneDeadResources):
        (WebCore::Cache::remove):
        * loader/Cache.h:

2008-10-03  David Hyatt  <hyatt@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=21330

        Fix Gtk adjustments so that they are properly checked again before creating horizontal/vertical
        scrollbars.

        Reviewed by Oliver Hunt

        * platform/ScrollView.cpp:
        (WebCore::ScrollView::setHasHorizontalScrollbar):
        (WebCore::ScrollView::setHasVerticalScrollbar):
        (WebCore::ScrollView::platformHasHorizontalAdjustment):
        (WebCore::ScrollView::platformHasVerticalAdjustment):
        * platform/ScrollView.h:
        * platform/gtk/ScrollViewGtk.cpp:
        (WebCore::ScrollView::adjustmentChanged):
        (WebCore::ScrollView::ScrollView):
        (WebCore::ScrollView::~ScrollView):
        (WebCore::ScrollView::setGtkAdjustments):
        (WebCore::ScrollView::platformHandleHorizontalAdjustment):
        (WebCore::ScrollView::platformHandleVerticalAdjustment):

2008-10-03  Julien Chaffraix  <jchaffraix@webkit.org>

        Reviewed by Maciej Stachowiak.

        Bug 21106: .in format discussed changes
        https://bugs.webkit.org/show_bug.cgi?id=21106

        Change "upperCase" to "interfaceName" per-tag parameter as
        discussed on the mailing list. Removed the per-attribute version
        as it was not used.

        Also add the "Element" suffix to all interfaceName parameter to match
        the class name (and thus remove it from make_names.pl).

        * dom/make_names.pl:
        * html/HTMLTagNames.in:
        * svg/svgtags.in:

2008-10-03  David Hyatt  <hyatt@apple.com>

        Preserve Qt's disabling of blitting when any native widgets are present anywhere on the page (ick).
        Hopefully this is a temporary hack that could eventually be removed.

        Reviewed by Sam Weinig

        * platform/ScrollView.cpp:
        (WebCore::ScrollView::scrollContents):
        * platform/ScrollView.h:
        (WebCore::ScrollView::rootPreventsBlitting):
        * platform/qt/ScrollViewQt.cpp:
        (WebCore::ScrollView::ScrollView):
        (WebCore::ScrollView::~ScrollView):
        (WebCore::ScrollView::platformAddChild):
        (WebCore::ScrollView::platformRemoveChild):

2008-10-02  David Hyatt  <hyatt@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=21328

        Make widget invalidation more cross-platform.

        (1) Make invalidateRect a pure virtual function on Widget.  All leaf widgets must now implement this function.

        (2) Scrollbars now send invalidations through the ScrollbarClient.  windowClipRect on ScrollbarClient has been removed and replaced with this invalidation call.
        This allows all scrollbar invalidations to go through the render tree so that transforms and reflections will be respected.

        (3) Plugins now have the native window invalidation code for windowed plugins.  Windowless plugins do a repaintRectangle on the plugin's renderer.

        (4) FrameViews now do a repaintRectangle on their owner element's renderer.

        Reviewed by Sam Weinig

        * WebCore.base.exp:
        * page/FrameView.cpp:
        (WebCore::FrameView::invalidateRect):
        (WebCore::FrameView::invalidateScrollbarRect):
        * page/FrameView.h:
        * platform/PopupMenu.h:
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::scrollContents):
        * platform/ScrollView.h:
        * platform/Scrollbar.cpp:
        (WebCore::Scrollbar::setEnabled):
        (WebCore::Scrollbar::invalidateRect):
        * platform/Scrollbar.h:
        * platform/ScrollbarClient.h:
        * platform/Widget.h:
        * platform/gtk/WidgetGtk.cpp:
        * platform/mac/WidgetMac.mm:
        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenu::invalidateScrollbarRect):
        * platform/win/WidgetWin.cpp:
        * plugins/PluginView.cpp:
        (WebCore::PluginView::invalidateTimerFired):
        (WebCore::PluginView::invalidateWindowlessPluginRect):
        * plugins/PluginView.h:
        * plugins/gtk/PluginViewGtk.cpp:
        (WebCore::PluginView::invalidateRect):
        * plugins/qt/PluginViewQt.cpp:
        (WebCore::PluginView::invalidateRect):
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginView::invalidateRect):
        (WebCore::PluginView::invalidateRegion):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::invalidateScrollbarRect):
        * rendering/RenderLayer.h:
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::paintObject):
        (WebCore::RenderListBox::paintScrollbar):
        (WebCore::RenderListBox::invalidateScrollbarRect):
        * rendering/RenderListBox.h:

2008-10-02  Dan Bernstein  <mitz@apple.com>

        Reviewed by Geoffrey Garen and Sam Weinig.

        - fix SVGFontFaceElement leaks seen in Acid3
        - make font-face elements take effect only when they are in the document tree

        Test: svg/custom/font-face-not-in-document.svg

        * svg/SVGFontData.h: Changed the m_svgFontFaceElement member from a
        RefPtr to a plain pointer to break a ref cycle.
        (WebCore::SVGFontData::svgFontFaceElement):

        * svg/SVGFontFaceElement.cpp: Changed to insert and remove the
        @font-face rule from the document's mapped element sheet when the
        element is inserted and removed from the document, and to update it
        only when the element is in the document.
        (WebCore::SVGFontFaceElement::SVGFontFaceElement):
        (WebCore::SVGFontFaceElement::parseMappedAttribute):
        (WebCore::SVGFontFaceElement::rebuildFontFace):
        (WebCore::SVGFontFaceElement::insertedIntoDocument):
        (WebCore::SVGFontFaceElement::removedFromDocument):
        (WebCore::SVGFontFaceElement::childrenChanged):
        (WebCore::SVGFontFaceElement::removeFromMappedElementSheet):
        * svg/SVGFontFaceElement.h:

2008-10-01  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dave Hyatt

        Fix RenderFileUploadControl::setStyle() and
        RenderMenuList::setStyle() to not touch the style; replace
        with html4.css and CSSStyleSelector changes.

        https://bugs.webkit.org/show_bug.cgi?id=21287

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::adjustRenderStyle):
        * css/html4.css:
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::setStyle):
        * rendering/RenderFileUploadControl.cpp:
        * rendering/RenderMenuList.cpp:
        (WebCore::RenderMenuList::setStyle):

2008-10-01  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dave Hyatt

        Clean up code that changes the RenderStyle passed in to
        table renderer setStyle() methods.

        https://bugs.webkit.org/show_bug.cgi?id=21287

        Tests: fast/table/floating-th.html
               fast/table/table-display-types-strict.html
               fast/table/table-display-types.html

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::adjustRenderStyle):
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::setStyle):
        * rendering/RenderTableRow.cpp:
        (WebCore::RenderTableRow::setStyle):
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::setStyle):

2008-10-02  Darin Adler  <darin@apple.com>

        - fix build

        * bindings/scripts/CodeGeneratorJS.pm: Need to replace the -> with a . here too.
        Not just locally in my generated file!

2008-10-02  Adele Peterson  <adele@apple.com>

        Reviewed by Dan Bernstein.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=21299
        REGRESSION: <input> color specified in inline style applies to placeholder

        I recently added a pseudo-class for the placeholder, but that can be overridden by inline style changes.  A pseudo-element
        is more appropriate.  This change adds "-webkit-input-placeholder".

        * css/CSSSelector.cpp: (WebCore::CSSSelector::extractPseudoType):
        Added definition for "-webkit-input-placeholder" pseudo element.
        * css/CSSSelector.h: (WebCore::CSSSelector::): Added PseudoInputPlaceholder.
        * css/CSSStyleSelector.cpp: (WebCore::CSSStyleSelector::SelectorChecker::checkOneSelector):
        Added case for PseudoInputPlaceholder.
        * css/html4.css: Added rule for -webkit-input-placeholder pseudo-element.
        * rendering/style/RenderStyle.h: (WebCore::RenderStyle::): Added INPUT_PLACEHOLDER.

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::setValue): Check that its a text field before calling updatePlaceholderVisibility.
        (WebCore::HTMLInputElement::setValueFromRenderer): ditto.
        (WebCore::HTMLInputElement::updatePlaceholderVisibility): Instead of calling setChanged(), call updatePlaceholderVisibility on the renderer.
        setChanged wouldn't actually trigger setStyle since the style for the input element won't actually change.
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::createInnerTextStyle): Get the pseudoStyle when the placeholder is visible.
        (WebCore::RenderTextControl::updatePlaceholderVisibility): Sets the style on the inner text block, and calls updateFromElement so
        the text will be updated correctly.
        * rendering/RenderTextControl.h:

2008-10-02  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=21280
        <rdar://problem/6227690> There are a bunch of tables on this page that don't seem to be real tables

        Updated AXTable detection to be more robust to false-positives. Specifically, added checks
        to ensure that there is more than one valid table cell, and that at least half of the cells
        have borders or have specific background colors. Modified the table detection layout test
        to test for the tables mentioned in the bug

        * page/AccessibilityTable.cpp:
        (WebCore::AccessibilityTable::isTableExposableThroughAccessibility):

2008-10-02  Darin Adler  <darin@apple.com>

        Reviewed by Geoff Garen.

        - https://bugs.webkit.org/show_bug.cgi?id=21321
          Bug 21321: speed up JavaScriptCore by inlining Heap in JSGlobalData

        * bindings/js/GCController.cpp:
        (WebCore::collect): Use heap. instead of heap-> to work with the heap.
        (WebCore::GCController::gcTimerFired): Ditto.
        (WebCore::GCController::garbageCollectNow): Ditto.
        * bindings/js/JSDOMWindowShell.cpp:
        (WebCore::JSDOMWindowShell::operator new): Ditto.
        * storage/Database.cpp:
        (WebCore::Database::Database): Ditto.

2008-10-02  Dan Bernstein  <mitz@apple.com>

        Reviewed by Alexey Proskuryakov.

        - fix a Database leak that resulted in Document leaks

        * storage/Database.cpp:
        (WebCore::Database::openDatabase): Account for the fact that RefCounted
        objects start out with a ref count of 1.

2008-10-02  Sam Weinig  <sam@webkit.org>

        Reviewed by Mr. Geoffrey Garen.

        Always mark your parent before marking members.

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::mark):

2008-10-02  David Hyatt  <hyatt@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=21314

        Make scrollBackingStore cross-platform.

        Reviewed by Sam Weinig

        * loader/EmptyClients.h:
        (WebCore::EmptyChromeClient::repaint):
        (WebCore::EmptyChromeClient::scroll):
        * page/Chrome.cpp:
        (WebCore::Chrome::repaint):
        (WebCore::Chrome::scroll):
        * page/Chrome.h:
        * page/ChromeClient.h:
        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleAutoscroll):
        * platform/HostWindow.h:
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::scrollContents):
        (WebCore::ScrollView::addPanScrollIcon):
        (WebCore::ScrollView::removePanScrollIcon):
        * platform/ScrollView.h:
        * platform/gtk/ScrollViewGtk.cpp:
        * platform/qt/ScrollViewQt.cpp:
        (WebCore::ScrollView::ScrollViewPrivate::ScrollViewPrivate):
        (WebCore::ScrollView::~ScrollView):
        * platform/win/ScrollViewWin.cpp:
        (WebCore::ScrollView::ScrollView):
        (WebCore::ScrollView::~ScrollView):

2008-10-02  Kevin Ollivier  <kevino@theolliviers.com>

        wx build fixes after Frame/ScrollView changes.

        * WebCoreSources.bkl:
        * platform/wx/ScrollViewWx.cpp:
        (WebCore::ScrollView::platformContentsToScreen):
        (WebCore::ScrollView::platformScreenToContents):
        (WebCore::ScrollView::platformIsOffscreen):

2008-10-02  Brett Wilson  <brettw@chromium.org>

        Reviewed by Sam Weinig

        https://bugs.webkit.org/show_bug.cgi?id=21292

        Revert the changes to enclosingIntRect made in r12530 since the new code
        doesn't round correctly.

        * ChangeLog:
        * platform/graphics/FloatRect.cpp:
        (WebCore::enclosingIntRect):

2008-10-02  Dan Bernstein  <mitz@apple.com>

        Reviewed by Anders Carlsson and Eric Seidel.

        - fix HTMLCanvaseElement leak from -webkit-canvas() values

        Changed the m_element member of CSSCanvasValue from a RefPtr to a plain
        pointer, as the document owns the canvas elements. Added code to release
        those elements in Document::removedLastRef() because they reference
        the document.

        * css/CSSCanvasValue.cpp:
        (WebCore::CSSCanvasValue::element):
        * css/CSSCanvasValue.h:
        (WebCore::CSSCanvasValue::CSSCanvasValue):
        * dom/Document.cpp:
        (WebCore::Document::removedLastRef):

2008-10-02  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Maciej Stachowiak.

        Build fix for platforms that don't implement WTF::ThreadSpecific.

        * bindings/js/JSDOMBinding.cpp: (WebCore::wrapperSet):
        Guard ThreadSpecific use with #if ENABLE(WORKERS). No platform defines this yet, but this
        code is only needed for JS bindings in worker threads.

2008-10-01  David Hyatt  <hyatt@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=21298

        Make updateScrollbars cross-platform.  For now a stubbed out scrollContents function is invoked to do the scrolling of the backing store.  Next patch
        will make that cross-platform.

        The ScrollView now implements ScrollbarClient, which means that there was a clash of windowClipRect methods from the
        multiple inheritance.  For now I solved this by adding a Scrollbar* to the ScrollbarClient version of the method, but longer term
        windowClipRect is going to be removed from ScrollbarClient (when Widget invalidation gets rewritten).

        Reviewed by Sam Weinig

        * page/FrameView.cpp:
        (WebCore::FrameView::windowClipRect):
        (WebCore::FrameView::isActive):
        * page/FrameView.h:
        (WebCore::FrameView::visibleContentsResized):
        * platform/PopupMenu.h:
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::init):
        (WebCore::ScrollView::destroy):
        (WebCore::ScrollView::setHasHorizontalScrollbar):
        (WebCore::ScrollView::setHasVerticalScrollbar):
        (WebCore::ScrollView::valueChanged):
        (WebCore::ScrollView::updateScrollbars):
        (WebCore::ScrollView::scrollContents):
        (WebCore::ScrollView::platformHandleHorizontalAdjustment):
        (WebCore::ScrollView::platformHandleVerticalAdjustment):
        * platform/ScrollView.h:
        * platform/Scrollbar.cpp:
        (WebCore::Scrollbar::windowClipRect):
        * platform/ScrollbarClient.h:
        * platform/gtk/ScrollViewGtk.cpp:
        (WebCore::ScrollView::platformHandleHorizontalAdjustment):
        (WebCore::ScrollView::platformHandleVerticalAdjustment):
        * platform/qt/ScrollViewQt.cpp:
        (WebCore::ScrollView::scrollContents):
        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenu::windowClipRect):
        * platform/win/ScrollViewWin.cpp:
        (WebCore::ScrollView::scrollContents):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::windowClipRect):
        * rendering/RenderLayer.h:
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::panScroll):
        (WebCore::RenderListBox::windowClipRect):
        * rendering/RenderListBox.h:

2008-10-02  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=21304
        Stop using a static wrapper map for WebCore JS bindings

        The static domObjects map was not thread safe.

        * dom/Document.h:
        (WebCore::Document::messagePorts): Added an accessor for JSDocument to iterate over message
        ports.
        (WebCore::Document::xmlHttpRequests): Ditto for XMLHttpRequests.

        * dom/Document.cpp:
        (WebCore::Document::createdXMLHttpRequest):
        (WebCore::Document::destroyedXMLHttpRequest):
        Moved XMLHttpRequest tracking from a global map to Document.

        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * webcore-base.bkl:
        * bindings/DOMProtect.cpp: Removed.
        * bindings/DOMProtect.h: Removed.
        Removed gcProtect(Unprotect)DOMObject - its callers do not have a JSGlobalData reference,
        so they can no longer protect bindings objects.

        * dom/MessagePort.cpp:
        (WebCore::CloseMessagePortTimer::CloseMessagePortTimer):
        (WebCore::CloseMessagePortTimer::fired):
        (WebCore::MessagePort::MessagePort):
        (WebCore::MessagePort::queueCloseEvent):
        (WebCore::MessagePort::setPendingActivity):
        (WebCore::MessagePort::unsetPendingActivity):
        * dom/MessagePort.h:
        (WebCore::MessagePort::hasPendingActivity):
        MessagePort now counts outstanding async events, so JSDocument::mark can decide whether
        to protect it.

        * xml/XMLHttpRequest.h:
        (WebCore::XMLHttpRequest::hasPendingActivity):
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::XMLHttpRequest):
        (WebCore::XMLHttpRequest::~XMLHttpRequest):
        (WebCore::XMLHttpRequest::loadRequestAsynchronously):
        (WebCore::XMLHttpRequest::dropProtection):
        (WebCore::XMLHttpRequest::didFinishLoadingPreflight):
        (WebCore::XMLHttpRequest::cancelRequests):
        (WebCore::XMLHttpRequest::detachRequests):
        (WebCore::XMLHttpRequest::setPendingActivity):
        (WebCore::XMLHttpRequest::unsetPendingActivity):
        Moved XMLHttpRequest tracking from a global map to Document.

        * bindings/js/JSDOMBinding.cpp:
        (WebCore::wrapperSet):
        (WebCore::DOMObjectWrapperMap::mapFor):
        (WebCore::DOMObjectWrapperMap::get):
        (WebCore::DOMObjectWrapperMap::set):
        (WebCore::DOMObjectWrapperMap::remove):
        (WebCore::getCachedDOMObjectWrapper):
        (WebCore::cacheDOMObjectWrapper):
        (WebCore::forgetDOMObject):
        (WebCore::getCachedDOMNodeWrapper):
        (WebCore::forgetDOMNode):
        (WebCore::cacheDOMNodeWrapper):
        (WebCore::markActiveObjectsForDocument):
        * bindings/js/JSDOMBinding.h:
        (WebCore::createDOMObjectWrapper):
        (WebCore::getDOMObjectWrapper):
        Wrapper map is now kept as JSGlobalData::clientData. Also changed debug-only wrapperSet
        to be per-thread (this is slower than going to JSGlobalData, but fast enough for debug).
        WebCore objects can never migrate between threads.

        * bindings/js/JSDocumentCustom.cpp:
        (WebCore::JSDocument::mark):
        Call markActiveObjectsForDocument() from JSDOMBinding.

        * bindings/js/JSCSSRuleCustom.cpp:
        (WebCore::toJS):
        * bindings/js/JSCSSValueCustom.cpp:
        (WebCore::toJS):
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::markDOMObjectWrapper):
        (WebCore::JSDOMWindow::mark):
        * bindings/js/JSEventCustom.cpp:
        (WebCore::toJS):
        * bindings/js/JSEventTarget.cpp:
        (WebCore::toJS):
        * bindings/js/JSHTMLCollectionCustom.cpp:
        (WebCore::toJS):
        * bindings/js/JSImageDataCustom.cpp:
        (WebCore::toJS):
        * bindings/js/JSMessageChannelCustom.cpp:
        (WebCore::JSMessageChannel::mark):
        * bindings/js/JSMessagePortCustom.cpp:
        (WebCore::JSMessagePort::mark):
        * bindings/js/JSNodeCustom.cpp:
        (WebCore::JSNode::mark):
        * bindings/js/JSSVGPathSegCustom.cpp:
        (WebCore::toJS):
        * bindings/js/JSStyleSheetCustom.cpp:
        (WebCore::toJS):
        * bindings/js/JSXMLHttpRequestCustom.cpp:
        (WebCore::JSXMLHttpRequest::mark):
        * bindings/js/JSXMLHttpRequestUploadCustom.cpp:
        (WebCore::JSXMLHttpRequestUpload::mark):
        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::finishedWithEvent):
        * bindings/scripts/CodeGeneratorJS.pm:
        Pass a JSGlobalData reference to functions that track JS wrapper objects.

2008-10-02  Dan Bernstein  <mitz@apple.com>

        - build fix

        * page/JavaScriptCallFrame.idl:

2008-10-02  Oliver Hunt  <oliver@apple.com>

        Reviewed by NOBODY (Build fix).

        Add new file to project files

        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:

2008-10-02  Geoffrey Garen  <ggaren@apple.com>

        Not reviewed.

        Try to fix some more builds.

        * GNUmakefile.am:
        * WebCore.pro:

2008-10-02  Geoffrey Garen  <ggaren@apple.com>

        Not reviewed.

        Try to fix Windows build.

        * WebCore.vcproj/WebCore.vcproj:

2008-10-01  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Darin Adler and Cameron Zwarich.

        Updated for JavaScriptCore API changes: use a SourceCode instead of
        broken out parameters; treat sourceId as intptr_t.

        * ForwardingHeaders/kjs/SourceRange.h: Copied from ForwardingHeaders/kjs/SourceProvider.h.
        * bindings/js/JSXMLHttpRequestCustom.cpp:
        (WebCore::JSXMLHttpRequest::send):
        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::evaluate):
        * bindings/js/StringSourceProvider.h:
        (WebCore::StringSourceProvider::create):
        (WebCore::StringSourceProvider::StringSourceProvider):

        (WebCore::makeSource): Added a makeSource function for convenience.

        * bindings/objc/WebScriptObject.mm:
        (-[WebScriptObject evaluateWebScript:]):
        * bridge/NP_jsobject.cpp:
        (_NPN_Evaluate):
        * bridge/jni/jni_jsobject.mm:
        (JavaJSObject::call):
        (JavaJSObject::eval):
        (JavaJSObject::getMember):
        (JavaJSObject::setMember):
        (JavaJSObject::removeMember):

        * bridge/jni/jni_runtime.h:
        (JSC::Bindings::JavaString::operator UString): Replaced the explicit
        ustring() function with an implicit operator because this class already
        holds a UString::rep.

        * page/Console.cpp:
        (WebCore::retrieveLastCaller):
        (WebCore::Console::trace):
        * page/InspectorController.cpp:
        (WebCore::jsStringRef):
        (WebCore::InspectorController::addBreakpoint):
        (WebCore::InspectorController::removeBreakpoint):
        (WebCore::InspectorController::didParseSource):
        (WebCore::InspectorController::failedToParseSource):
        * page/InspectorController.h:
        * page/JavaScriptCallFrame.cpp:
        (WebCore::JavaScriptCallFrame::JavaScriptCallFrame):
        * page/JavaScriptCallFrame.h:
        (WebCore::JavaScriptCallFrame::create):
        (WebCore::JavaScriptCallFrame::sourceIdentifier):
        (WebCore::JavaScriptCallFrame::update):
        * page/JavaScriptDebugListener.h:
        * page/JavaScriptDebugServer.cpp:
        (WebCore::JavaScriptDebugServer::addBreakpoint):
        (WebCore::JavaScriptDebugServer::removeBreakpoint):
        (WebCore::JavaScriptDebugServer::hasBreakpoint):
        (WebCore::dispatchDidParseSource):
        (WebCore::dispatchFailedToParseSource):
        (WebCore::JavaScriptDebugServer::sourceParsed):
        (WebCore::JavaScriptDebugServer::callEvent):
        (WebCore::JavaScriptDebugServer::atStatement):
        (WebCore::JavaScriptDebugServer::returnEvent):
        (WebCore::JavaScriptDebugServer::exception):
        (WebCore::JavaScriptDebugServer::willExecuteProgram):
        (WebCore::JavaScriptDebugServer::didExecuteProgram):
        (WebCore::JavaScriptDebugServer::didReachBreakpoint):
        * page/JavaScriptDebugServer.h:
        * page/inspector/ScriptsPanel.js: Renamed internal uses of sourceId and
        sourceIdentifier to sourceID.

2008-10-01  Dan Bernstein  <mitz@apple.com>

        Reviewed by Geoffrey Garen.

        - fix SVGFontFaceElement leak seen on svg/custom/acid3-test-77.html

        Broke a ref cycle by changing the m_svgFontFaceElement members of
        CSSFontFaceSource and CSSFontFaceSrcValue from RefPtrs to plain
        pointers. Also made sure that the @font-face rule added by
        SVGFontFaceElement to the document's mapped element sheet is removed
        when the font-face element is deleted or moved to another document.

        * css/CSSFontFaceSource.cpp:
        (WebCore::CSSFontFaceSource::CSSFontFaceSource):
        (WebCore::CSSFontFaceSource::getFontData):
        * css/CSSFontFaceSource.h:
        (WebCore::CSSFontFaceSource::svgFontFaceElement):
        * css/CSSFontFaceSrcValue.h:
        (WebCore::CSSFontFaceSrcValue::svgFontFaceElement):
        (WebCore::CSSFontFaceSrcValue::CSSFontFaceSrcValue):
        * svg/SVGFontFaceElement.cpp:
        (WebCore::SVGFontFaceElement::~SVGFontFaceElement):
        (WebCore::SVGFontFaceElement::willMoveToNewOwnerDocument):
        (WebCore::SVGFontFaceElement::didMoveToNewOwnerDocument):
        (WebCore::SVGFontFaceElement::removeFromMappedElementSheet):
        * svg/SVGFontFaceElement.h:

2008-10-01  Oliver Hunt  <oliver@apple.com>

        Reviewed by Maciej Stachowiak.

        Bug 20315: Memory leak with Canvas getImageData
        <https://bugs.webkit.org/show_bug.cgi?id=20315>

        This wasn't a leak, the issue was that we were reporting the cost
        of the CanvasPixelArray when creating the JSCanvasPixelArray wrapper
        and we should have been reporting the cost when we create the
        JSImageData wrapper.

        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSCanvasPixelArrayCustom.cpp: Removed.
          This was only needed to report the extra memory cost
          of the CPA.
        * bindings/js/JSImageDataCustom.cpp:
        (WebCore::toJS):
          We need a custom toJS function now so that we can report
          the extra memory cost.
        * bindings/scripts/CodeGeneratorJS.pm:
          Need to replace the reference to CanvasPixelArray with ImageData
          to be able to create the custom toJS implementation.
        * html/CanvasPixelArray.idl:
        * html/ImageData.idl:

2008-10-01  Dan Bernstein  <mitz@apple.com>

        Reviewed by Mark Rowe.

        - https://bugs.webkit.org/show_bug.cgi?id=21293
          REGRESSION: Crash beneath RenderSVGViewportContainer::viewportTransform() during SVGSVGElement destruction

        * svg/SVGMarkerElement.cpp:
        (WebCore::SVGMarkerElement::~SVGMarkerElement): Call detach() here so
        that renderer destruction happens before the SVGMarkerElement is
        destroyed.
        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::~SVGSVGElement): Ditto for SVGSVGElement.

2008-10-01  Evan Martin  <evan@chromium.org>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=20669

        * css/makeprop.pl:
        Die if gperf fails.

2008-10-01  Evan Martin  <evan@chromium.org>

        Reviewed by Eric Seidel.

        * loader/icon/IconDatabase.h:
        IconDatabase uses HashMap, so it needs to #include the header.

2008-10-01  Dan Bernstein  <mitz@apple.com>

        Reviewed by Mark Rowe.

        - fix an assertion failure in http/tests/security/canvas-remote-read-svg-image.html due to re-entry into Cache::pruneDeadResources()

        * loader/Cache.cpp:
        (WebCore::Cache::remove): Disable pruning temporarily during
        CachedResource deletion.

2008-10-01  Dan Bernstein  <mitz@apple.com>

        Reviewed by Mark Rowe.

        - fix SVGFontElement leaks seen on buildbot by breaking a ref cycle

        * svg/SVGFontFaceElement.cpp:
        (WebCore::SVGFontFaceElement::rebuildFontFace):
        * svg/SVGFontFaceElement.h:
        (WebCore::SVGFontFaceElement::associatedFontElement):

2008-10-01  Brett Wilson  <brettw@chromium.org>

        Reviewed by Maciej Stachowiak.

        Document the rounding behavior of the mapRect(IntRect) function in
        AffineTransform.h.

        * platform/graphics/AffineTransform.h:

2008-10-01  David Hyatt  <hyatt@apple.com>

        Move prohibitsScrolling from the Frame to the ScrollView.

        Reviewed by Sam Weinig

        * WebCore.base.exp:
        * page/Frame.cpp:
        (WebCore::FramePrivate::FramePrivate):
        * page/Frame.h:
        * page/FramePrivate.h:
        * page/FrameView.cpp:
        (WebCore::FrameView::scrollRectIntoViewRecursively):
        (WebCore::FrameView::setScrollPosition):
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::init):
        (WebCore::ScrollView::scrollRectIntoViewRecursively):
        (WebCore::ScrollView::setScrollPosition):
        * platform/ScrollView.h:
        (WebCore::ScrollView::setProhibitsScrolling):
        (WebCore::ScrollView::prohibitsScrolling):
        * platform/gtk/ScrollViewGtk.cpp:
        (WebCore::ScrollView::updateScrollbars):
        * platform/qt/ScrollViewQt.cpp:
        (WebCore::ScrollView::updateScrollbars):
        * platform/win/ScrollViewWin.cpp:
        (WebCore::ScrollView::updateScrollbars):

2008-10-01  Mark Rowe  <mrowe@apple.com>

        Reviewed by Geoff Garen.

        Fix leaks seen during http/tests/xmlhttprequest/access-control-basic-non-simple-allow.html.

        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::didFinishLoadingPreflight): Balance the ref and GC protect
        that we do during the loadRequestAsynchronously of the preflight request with a deref and
        GC unprotect.

2008-10-01  David Hyatt  <hyatt@apple.com>

        Rename allowsScrolling/setAllowsScrolling to canHaveScrollbars/setCanHaveScrollbars to make it more
        clear that the boolean doesn't actually stop all scrolling.  It just gets rid of scrollbars.

        Reviewed by Tim Hatcher

        * WebCore.base.exp:
        * page/FrameView.cpp:
        (WebCore::FrameView::setCanHaveScrollbars):
        * page/FrameView.h:
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::setCanHaveScrollbars):
        (WebCore::ScrollView::wheelEvent):
        * platform/ScrollView.h:
        (WebCore::ScrollView::canHaveScrollbars):

2008-10-01  Dan Bernstein  <mitz@apple.com>

        Reviewed by Mark Rowe.

        - fix some CachedResource leaks seen on buildbot

        The issue here was that emptying the cache was a no-op when it only
        contained resources with no data. Changed to go after those
        resources when the desired cache capacity is zero.

        * loader/Cache.cpp:
        (WebCore::Cache::pruneLiveResources):
        (WebCore::Cache::pruneDeadResources):
        * loader/Cache.h:
        (WebCore::Cache::prune):

2008-10-01  David Hyatt  <hyatt@apple.com>

        Make isOffscreen cross-platform.  Only Mac implements this method, so hold off on adding API to the
        HostWindow object until other platforms decide they want this method.  (We need it for Win though at some point.)

        Reviewed by Adam Roben

        * platform/ScrollView.cpp:
        (WebCore::ScrollView::isOffscreen):
        (WebCore::ScrollView::platformIsOffscreen):
        * platform/ScrollView.h:
        * platform/gtk/ScrollViewGtk.cpp:
        * platform/mac/ScrollViewMac.mm:
        (WebCore::ScrollView::platformIsOffscreen):
        * platform/qt/ScrollViewQt.cpp:
        * platform/wx/ScrollViewWx.cpp:

2008-10-01  David Hyatt  <hyatt@apple.com>

        Make show/hide/setParentVisible cross-platform on ScrollView.

        Reviewed by Adam Roben

        * platform/ScrollView.cpp:
        (WebCore::ScrollView::setParentVisible):
        (WebCore::ScrollView::show):
        (WebCore::ScrollView::hide):
        * platform/ScrollView.h:
        * platform/win/ScrollViewWin.cpp:

2008-10-01  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=21284
        Bug 21284: Max height affects max width
        - Looks like a cut and paste bug
        - Added layout test fast/css/max-height-and-max-width.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):

2008-10-01  David Hyatt  <hyatt@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=21282

        Make contentsToScreen/screenToContents cross-platform.  Only implemented by Mac/Win right now.

        Reviewed by Adam Roben

        * loader/EmptyClients.h:
        (WebCore::EmptyChromeClient::screenToWindow):
        (WebCore::EmptyChromeClient::windowToScreen):
        * page/Chrome.cpp:
        (WebCore::Chrome::screenToWindow):
        (WebCore::Chrome::windowToScreen):
        * page/Chrome.h:
        * page/ChromeClient.h:
        * platform/HostWindow.h:
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::contentsToScreen):
        (WebCore::ScrollView::screenToContents):
        (WebCore::ScrollView::platformContentsToScreen):
        (WebCore::ScrollView::platformScreenToContents):
        * platform/ScrollView.h:
        * platform/mac/ScrollViewMac.mm:
        (WebCore::ScrollView::platformContentsToScreen):
        (WebCore::ScrollView::platformScreenToContents):
        * platform/win/ScrollViewWin.cpp:

2008-10-01  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        - fix <rdar://problem/6255862> domfuzz: null deref in WebCore::HTMLParser::handleResidualStyleCloseTagAcrossBlocks(WebCore::HTMLStackElem*)

        Test: fast/parser/residual-style-close-across-removed-block.html

        * html/HTMLParser.cpp:
        (WebCore::HTMLParser::handleResidualStyleCloseTagAcrossBlocks): Removed
        an assertion that turned out to be wrong in this case, and changed to
        terminate the algorithm at the first empty block.

2008-10-01  David Hyatt  <hyatt@apple.com>

        Make setFrameRect on ScrollView cross-platform.

        Reviewed by Sam Weinig

        * page/FrameView.h:
        (WebCore::FrameView::contentsResized):
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::setFrameRect):
        * platform/ScrollView.h:
        * platform/gtk/ScrollViewGtk.cpp:
        * platform/qt/ScrollViewQt.cpp:
        * platform/win/ScrollViewWin.cpp:

2008-10-01  Sam Weinig  <sam@webkit.org>

        Reviewed by Adele Peterson.

        Move setTimeout, clearTimeout, setInterval, clearInterval, atob and btoa
        to JSDOMWindow from JSDOMWindowBase.

        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::removeTimeout):
        * bindings/js/JSDOMWindowBase.h:
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::setTimeoutOrInterval):
        (WebCore::JSDOMWindow::setTimeout):
        (WebCore::JSDOMWindow::clearTimeout):
        (WebCore::JSDOMWindow::setInterval):
        (WebCore::JSDOMWindow::clearInterval):
        (WebCore::JSDOMWindow::atob):
        (WebCore::JSDOMWindow::btoa):
        * page/DOMWindow.idl:

2008-10-01  Dan Bernstein  <mitz@apple.com>

        - Mac build fix

        * WebCore.base.exp:

2008-10-01  Timothy Hatcher  <timothy@apple.com>

        Prevent stealing focus from the search field when focusing a DOM node.

        https://bugs.webkit.org/show_bug.cgi?id=21275

        Reviewed by Kevin McCullough.

        * page/inspector/ElementsPanel.js:
        (WebInspector.ElementsPanel.treeOutline.focusedNodeChanged):
        Don't steal focus if the current focus element is the search field.

2008-09-30  Sam Weinig  <sam@webkit.org>

        Reviewed by Nikolas Zimmermann and Alexey Proskuryakov.

        Final patch for https://bugs.webkit.org/show_bug.cgi?id=21122
        Autogenerate JS event listeners

        - Generate getting/setting of EventListeners.

        - Adding a new named EventListener now has the same process as adding any other DOM
          attribute. (Add a method with the same name in the c++ file).

        (The EventListeners for MessagePort have been intentionally left custom so that we
        can continue to experiment with making those EventListeners work in a frame-less world.)

        * bindings/js/JSDOMApplicationCacheCustom.cpp: Remove custom methods.
        * bindings/js/JSDOMWindowCustom.cpp: ditto.
        * bindings/js/JSEventTargetNodeCustom.cpp: ditto.
        * bindings/js/JSXMLHttpRequestCustom.cpp: ditto.
        * bindings/js/JSXMLHttpRequestUploadCustom.cpp: ditto.
        * bindings/scripts/CodeGeneratorJS.pm: Add code to generate EventListener
        getter/setters
        * dom/EventTargetNode.cpp: Add getter/setters for named EventListener.
        * dom/EventTargetNode.h: ditto.
        * dom/EventTargetNode.idl: Mark EventListeners as Protected so that the codegenerator
        will use JSEventListerner instead of JSUnprotectedEventListener.
        * loader/appcache/DOMApplicationCache.idl: Remove custom attributes..
        * page/DOMWindow.cpp: Add getter/setters for named EventListener
        * page/DOMWindow.h: ditto.
        * page/DOMWindow.idl: Mark EventListeners as Protected so that the codegenerator
        will use JSEventListerner instead of JSUnprotectedEventListener.
        * xml/XMLHttpRequest.idl: Remove custom attributes.
        * xml/XMLHttpRequestUpload.idl: ditto.

2008-09-30  Mark Rowe  <mrowe@apple.com>

        Reviewed by Dan Bernstein.

        Add a leak counter for CachedResources since we've had two recent leaks involving them.

        * loader/CachedResource.cpp:
        (WebCore::CachedResource::CachedResource):
        (WebCore::CachedResource::~CachedResource):

2008-09-30  Dan Bernstein  <mitz@apple.com>

        Reviewed by Dave Hyatt.

        - fix https://bugs.webkit.org/show_bug.cgi?id=21127
          <rdar://problem/6259134> REGRESSION: CFF format fonts fail to load

        If TTLoadEmbeddedFont fails, use AddFontMemResourceEx after changing
        the font name in memory.

        * WebCore.vcproj/WebCore.vcproj: Renamed GetEOTHeader.* to
        OpenTypeUtilities.*.

        * platform/graphics/win/FontCustomPlatformData.cpp:
        (WebCore::FontCustomPlatformData::~FontCustomPlatformData): Added a call
        to RemoveFontMemResourceEx to match AddFontMemResourceEx when it is
        used.
        (WebCore::FontCustomPlatformData::fontPlatformData): Added a code path
        for fonts loaded using AddFontMemResourceEx.
        (WebCore::createFontCustomPlatformData): Added a call to
        renameAndActivateFont() if TTLoadEmbeddedFont fails. If
        TTLoadEmbeddedFont succeeds, set the font name to the null string, as
        fontPlatformData() will retrieve the name from the font reference.

        * platform/graphics/win/FontCustomPlatformData.h:
        (WebCore::FontCustomPlatformData::FontCustomPlatformData): Added a
        font name member.

        * platform/graphics/win/GetEOTHeader.cpp: Renamed.
        * platform/graphics/win/GetEOTHeader.h: Renamed.

        * platform/graphics/win/OpenTypeUtilities.cpp: Copied from platform/graphics/win/GetEOTHeader.cpp.
        (WebCore::BigEndianUShort::BigEndianUShort): Added a constructor.
        (WebCore::BigEndianULong::BigEndianULong): Ditto.
        (WebCore::renameAndActivateFont): Added. Creates an in-memory copy of
        the font data and modifies it to have the given name, then activates
        it using AddFontMemResourceEx.

        * platform/graphics/win/OpenTypeUtilities.h: Copied from platform/graphics/win/GetEOTHeader.h.

2008-09-30  Mark Rowe  <mrowe@apple.com>

        Reviewed by Dan Bernstein.

        Fix many leaks seen on fast/backgrounds/svg-as-mask.html.

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::arenaDelete): Balance the calls to addClient on maskLayer's images
        with calls to removeClient when we're being destroyed.

2008-09-30  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Antti Koivisto.

        https://bugs.webkit.org/show_bug.cgi?id=21243

        Fix loopstart and loopend default values.

        Tests: media/loopend-limits.html
               media/loopstart-limits.html

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::loopStart): the spec says start() is the default value
        (WebCore::HTMLMediaElement::loopEnd): the spec says end() is the default value

2008-09-30  Kevin Ollivier  <kevino@theolliviers.com>

        wx build fixes. Add file to build and remove call to (now gone) ScrollView::update.

        * WebCoreSources.bkl:
        * platform/wx/ScrollViewWx.cpp:
        (WebCore::ScrollView::ScrollViewPrivate::OnScrollWinEvents):

2008-09-30  Dan Bernstein  <mitz@apple.com>

        Reviewed by Sam Weinig.

        - fix HTMLViewSourceDocument leaks by breaking a ref cycle which
          was fixed in r17249 and re-introduced in r31435.

        * html/HTMLViewSourceDocument.cpp:
        (WebCore::HTMLViewSourceDocument::HTMLViewSourceDocument):
        (WebCore::HTMLViewSourceDocument::addSpanWithClassName):
        (WebCore::HTMLViewSourceDocument::addLine):
        (WebCore::HTMLViewSourceDocument::addLink):
        * html/HTMLViewSourceDocument.h:

2008-09-30  Sam Weinig  <sam@webkit.org>

        Reviewed by Eric Seidel.

        More for https://bugs.webkit.org/show_bug.cgi?id=21122
        Autogenerate JS event listeners

        - Make EventListener getter/setters names in c++ files match those in
          JS (ie. onLoadListener -> onload).
        - Add standard way to access the frame associated with the EventTarget
          for EventListener lookup.
        - Autogenerate dispatchEvent, it wasn't doing anything custom.

        * bindings/js/JSDOMApplicationCacheCustom.cpp:
        (WebCore::JSDOMApplicationCache::mark):
        (WebCore::JSDOMApplicationCache::addEventListener):
        (WebCore::JSDOMApplicationCache::removeEventListener):
        (WebCore::JSDOMApplicationCache::setOnchecking):
        (WebCore::JSDOMApplicationCache::onchecking):
        (WebCore::JSDOMApplicationCache::setOnerror):
        (WebCore::JSDOMApplicationCache::onerror):
        (WebCore::JSDOMApplicationCache::setOnnoupdate):
        (WebCore::JSDOMApplicationCache::onnoupdate):
        (WebCore::JSDOMApplicationCache::setOndownloading):
        (WebCore::JSDOMApplicationCache::ondownloading):
        (WebCore::JSDOMApplicationCache::setOnprogress):
        (WebCore::JSDOMApplicationCache::onprogress):
        (WebCore::JSDOMApplicationCache::setOnupdateready):
        (WebCore::JSDOMApplicationCache::onupdateready):
        (WebCore::JSDOMApplicationCache::setOncached):
        (WebCore::JSDOMApplicationCache::oncached):
        * bindings/js/JSEventTargetNodeCustom.cpp:
        (WebCore::JSEventTargetNode::addEventListener):
        (WebCore::JSEventTargetNode::removeEventListener):
        (WebCore::JSEventTargetNode::getListener):
        (WebCore::JSEventTargetNode::setListener):
        * bindings/js/JSMessagePortCustom.cpp:
        (WebCore::JSMessagePort::mark):
        (WebCore::JSMessagePort::addEventListener):
        (WebCore::JSMessagePort::removeEventListener):
        (WebCore::JSMessagePort::setOnmessage):
        (WebCore::JSMessagePort::onmessage):
        (WebCore::JSMessagePort::setOnclose):
        (WebCore::JSMessagePort::onclose):
        * bindings/js/JSXMLHttpRequestCustom.cpp:
        (WebCore::JSXMLHttpRequest::mark):
        (WebCore::JSXMLHttpRequest::onreadystatechange):
        (WebCore::JSXMLHttpRequest::setOnreadystatechange):
        (WebCore::JSXMLHttpRequest::onabort):
        (WebCore::JSXMLHttpRequest::setOnabort):
        (WebCore::JSXMLHttpRequest::onerror):
        (WebCore::JSXMLHttpRequest::setOnerror):
        (WebCore::JSXMLHttpRequest::onload):
        (WebCore::JSXMLHttpRequest::setOnload):
        (WebCore::JSXMLHttpRequest::onloadstart):
        (WebCore::JSXMLHttpRequest::setOnloadstart):
        (WebCore::JSXMLHttpRequest::onprogress):
        (WebCore::JSXMLHttpRequest::setOnprogress):
        (WebCore::JSXMLHttpRequest::addEventListener):
        (WebCore::JSXMLHttpRequest::removeEventListener):
        * bindings/js/JSXMLHttpRequestUploadCustom.cpp:
        (WebCore::JSXMLHttpRequestUpload::mark):
        (WebCore::JSXMLHttpRequestUpload::onabort):
        (WebCore::JSXMLHttpRequestUpload::setOnabort):
        (WebCore::JSXMLHttpRequestUpload::onerror):
        (WebCore::JSXMLHttpRequestUpload::setOnerror):
        (WebCore::JSXMLHttpRequestUpload::onload):
        (WebCore::JSXMLHttpRequestUpload::setOnload):
        (WebCore::JSXMLHttpRequestUpload::onloadstart):
        (WebCore::JSXMLHttpRequestUpload::setOnloadstart):
        (WebCore::JSXMLHttpRequestUpload::onprogress):
        (WebCore::JSXMLHttpRequestUpload::setOnprogress):
        (WebCore::JSXMLHttpRequestUpload::addEventListener):
        (WebCore::JSXMLHttpRequestUpload::removeEventListener):
        * bindings/scripts/CodeGeneratorJS.pm:
        * dom/EventTarget.h:
        * dom/EventTargetNode.cpp:
        (WebCore::EventTargetNode::associatedFrame):
        * dom/EventTargetNode.h:
        * dom/EventTargetNode.idl:
        * dom/MessagePort.cpp:
        (WebCore::MessagePort::associatedFrame):
        * dom/MessagePort.h:
        (WebCore::MessagePort::setOnmessage):
        (WebCore::MessagePort::onmessage):
        (WebCore::MessagePort::setOnclose):
        (WebCore::MessagePort::onclose):
        * dom/MessagePort.idl:
        * loader/appcache/DOMApplicationCache.h:
        (WebCore::DOMApplicationCache::setOnchecking):
        (WebCore::DOMApplicationCache::onchecking):
        (WebCore::DOMApplicationCache::setOnerror):
        (WebCore::DOMApplicationCache::onerror):
        (WebCore::DOMApplicationCache::setOnnoupdate):
        (WebCore::DOMApplicationCache::onnoupdate):
        (WebCore::DOMApplicationCache::setOndownloading):
        (WebCore::DOMApplicationCache::ondownloading):
        (WebCore::DOMApplicationCache::setOnprogress):
        (WebCore::DOMApplicationCache::onprogress):
        (WebCore::DOMApplicationCache::setOnupdateready):
        (WebCore::DOMApplicationCache::onupdateready):
        (WebCore::DOMApplicationCache::setOncached):
        (WebCore::DOMApplicationCache::oncached):
        (WebCore::DOMApplicationCache::associatedFrame):
        * loader/appcache/DOMApplicationCache.idl:
        * svg/EventTargetSVGElementInstance.cpp:
        (WebCore::EventTargetSVGElementInstance::associatedFrame):
        (WebCore::EventTargetSVGElementInstance::addEventListener):
        (WebCore::EventTargetSVGElementInstance::removeEventListener):
        (WebCore::EventTargetSVGElementInstance::dispatchEvent):
        * svg/EventTargetSVGElementInstance.h:
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::associatedFrame):
        * xml/XMLHttpRequest.h:
        (WebCore::XMLHttpRequest::setOnreadystatechange):
        (WebCore::XMLHttpRequest::onreadystatechange):
        (WebCore::XMLHttpRequest::setOnabort):
        (WebCore::XMLHttpRequest::onabort):
        (WebCore::XMLHttpRequest::setOnerror):
        (WebCore::XMLHttpRequest::onerror):
        (WebCore::XMLHttpRequest::setOnload):
        (WebCore::XMLHttpRequest::onload):
        (WebCore::XMLHttpRequest::setOnloadstart):
        (WebCore::XMLHttpRequest::onloadstart):
        (WebCore::XMLHttpRequest::setOnprogress):
        (WebCore::XMLHttpRequest::onprogress):
        * xml/XMLHttpRequest.idl:
        * xml/XMLHttpRequestUpload.cpp:
        (WebCore::XMLHttpRequestUpload::associatedFrame):
        * xml/XMLHttpRequestUpload.h:
        (WebCore::XMLHttpRequestUpload::setOnabort):
        (WebCore::XMLHttpRequestUpload::onabort):
        (WebCore::XMLHttpRequestUpload::setOnerror):
        (WebCore::XMLHttpRequestUpload::onerror):
        (WebCore::XMLHttpRequestUpload::setOnload):
        (WebCore::XMLHttpRequestUpload::onload):
        (WebCore::XMLHttpRequestUpload::setOnloadstart):
        (WebCore::XMLHttpRequestUpload::onloadstart):
        (WebCore::XMLHttpRequestUpload::setOnprogress):
        (WebCore::XMLHttpRequestUpload::onprogress):
        * xml/XMLHttpRequestUpload.idl:

2008-09-30  Darin Adler  <darin@apple.com>

        - roll out assertion breaking regression tests

        * platform/ScrollView.cpp:
        (WebCore::ScrollView::repaintContentRectangle): Temporarily remove assertion
        that fires in regression tests. Hyatt can add it back later. The assertion
        fires in the regression test because of layout that triggers repaint occuring
        during the process of removing a frame.

2008-09-30  Adele Peterson  <adele@apple.com>

        Reviewed by Darin Adler.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=21227
        <rdar://problem/6222134> add a way to set color for input placeholder text

        Test: fast/forms/placeholder-pseudo-style.html

        This change adds "-webkit-input-placeholder-mode" as a pseudo class that can be used to style
        input elements when they are displaying the placeholder text.

        * css/CSSSelector.cpp: (WebCore::CSSSelector::extractPseudoType): Add case for inputPlaceholderMode.
        * css/CSSSelector.h: (WebCore::CSSSelector::): Add PseudoInputPlaceholderMode.
        * css/CSSStyleSelector.cpp: (WebCore::CSSStyleSelector::SelectorChecker::checkOneSelector):
        Add check for PseudoInputPlaceholderMode that asks the node if placeholderShouldBeVisible is true.
        * css/html4.css: Add rule to make placeholder text default to darkGray.

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::init): Initialize m_placeholderShouldBeVisible.
        (WebCore::HTMLInputElement::dispatchFocusEvent): Call updatePlaceholderVisibility.
        (WebCore::HTMLInputElement::dispatchBlurEvent): ditto.
        (WebCore::HTMLInputElement::parseMappedAttribute): ditto.
        (WebCore::HTMLInputElement::setValue): ditto.
        (WebCore::HTMLInputElement::setValueFromRenderer): ditto.
        (WebCore::HTMLInputElement::updatePlaceholderVisibility): Sets m_placeholderShouldBeVisible based on the current value and the focus state.
         This calculation used to be done in the renderer, but since the node knows everything about the state, it can make that decision, and the
         renderer will just ask the node if it should draw the placeholder.
        * html/HTMLInputElement.h: (WebCore::HTMLInputElement::placeholderShouldBeVisible):

        * rendering/RenderTextControl.cpp:
        (WebCore::disabledTextColor): Moved to the top of the file.  If there's not very much contrast between the disabled color and the background color,
        just leave the text color alone.  We don't want to change a good contrast color scheme so that it has really bad contrast.
        If the the contrast was already poor, then it doesn't do any good to change it to a different poor contrast color scheme.
        (WebCore::RenderTextControl::createInnerTextStyle): If the node says the placeholder should be visible, prepare by overriding the text security to be "none".
        This can only happen as a result of either a setStyle call (which will be followed by a call to updateFromElement) or from createSubtreeIfNeeded, which
        is called directly from updateFromElement.  updateFromElement will immediately update the text displayed.
        (WebCore::RenderTextControl::updateFromElement): If the placeholder visibility has changed, update the text that is displayed.
        (WebCore::RenderTextControl::forwardEvent): Remove calls to update the placeholder state.  This is now done in HTMLInputElement.
        * rendering/RenderTextControl.h:

2008-09-30  Beth Dakin  <bdakin@apple.com>

        Reviewed by Darin Adler.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=20396 Abort caused
        by failed allocation due to invalid counter/attr
        and corresponding: <rdar://problem/6152371>

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseCounterContent): The spec indicates that
        only identifiers should be accepted here.

2008-09-30  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Oliver Hunt.

        Bug 21255: console.profileEnd() without a console.profile() crashes the
        web inspector

        * page/Console.cpp:
        (WebCore::Console::profileEnd):

2008-09-30  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Tim Hatcher.

        Bug 21252: calling console.profile() with a title that is 2 chars or
        shorter does not linkify it

        - Previously we tried to not linkify very short URLs but since profile
        titles can be any length this is not always true.

        * page/inspector/inspector.js:

2008-09-30  Dave Hyatt  <hyatt@apple.com>

        Remove the update() method on ScrollView.  This method was only called in one place, and its purpose
        was to cause a display/flush to happen.  Here is a breakdown of the method use on each platform:
        (1) Not used on Mac
        (2) Used on Windows
        (3) Used on Qt, but implemented incorrectly to cause a full repaint for no reason.
        (4) Used on Gtk, but implemented incorrectly to cause a full repaint for no reason.
        (5) Used on wx, but probably not needed (since wx has platform widgets like Mac).

        There is now a paint method on HostWindow that does an immediate mode repaint of an empty rect to
        cause the display/flush to happen if needed (thus saving an extra method on ChromeClient).
        With the changes to this method, the new behavior is as follows:
        (1) Not used on Mac
        (2) Used on Windows
        (3) Nothing happens on Qt, but only because they have not implemented immediate mode updating.
        (4) Gtk now behaves like Windows and will process updates but not do any incorrect additional invalidation.
        (5) Not used on wx

        This method was originally added for Windows. It's not clear the display/flush is really even necessary on the other
        platforms.  At the very least stopping unnecessary full invalidations on Qt/Gtk is a good thing. :)

        Reviewed by Sam Weinig

        * ChangeLog:
        * dom/Document.cpp:
        (WebCore::Document::implicitClose):
        * platform/HostWindow.h:
        (WebCore::HostWindow::paint):
        * platform/ScrollView.h:
        * platform/gtk/ScrollViewGtk.cpp:
        * platform/mac/ScrollViewMac.mm:
        * platform/qt/ScrollViewQt.cpp:
        * platform/win/ScrollViewWin.cpp:
        * platform/wx/ScrollViewWx.cpp:

2008-09-30  Timothy Hatcher  <timothy@apple.com>

        Focus the DOM tree in the Web Inspector when a node is inspected.
        So when the search field has focus, the focus moves to the tree,
        allowing the arrow keys work. This can happen when using the new
        find in page feature.

        https://bugs.webkit.org/show_bug.cgi?id=21251

        Reviewed by Geoff Garen.

        * page/inspector/ElementsPanel.js:
        (WebInspector.ElementsPanel): Set currentFocusElement to
        the main-panels element if the panel is visible.
        (WebInspector.ElementsPanel.prototype.updateBreadcrumb):
        Remove a set of currentFocusElement since this moved.
        * page/inspector/inspector.js:
        (WebInspector.set currentFocusElement): Always focus the element.
        This ensures that when focus changes in the page and we don't
        catch it, we will still focus the elements even if we think it
        was already focused.

2008-09-30  Timothy Hatcher  <timothy@apple.com>

        Make the Web Inspector's toolbar icons darker when the mouse is
        pressed on them. This matches the standard NSToolbar look.

        https://bugs.webkit.org/show_bug.cgi?id=21249
        rdar://problem/6033752

        Reviewed by Adam Roben.

        * page/inspector/Images/databasesIcon.png:
        * page/inspector/Images/elementsIcon.png:
        * page/inspector/Images/profilesIcon.png:
        * page/inspector/Images/resourcesIcon.png:
        * page/inspector/Images/scriptsIcon.png:
        * page/inspector/Panel.js:
        * page/inspector/inspector.css:

2008-09-30  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Tim Hatcher.

        Bug 21139: Profiler log message is wrong
        - Correctly fix =(
        Don't call _format twice.

        * page/Page.h:
        * page/inspector/Console.js:
        * page/inspector/ProfilesPanel.js:
        * page/inspector/inspector.js:

2008-09-30  Dave Hyatt  <hyatt@apple.com>

        http://bugs.webkit.org/show_bug.cgi?id=21250

        Rename updateContents to repaintContentRectangle and make it cross-platform by always sending
        repaints up through the ChromeClient.

        Reviewed by Darin Adler

        * loader/EmptyClients.h:
        (WebCore::EmptyChromeClient::repaint):
        * page/Chrome.cpp:
        (WebCore::Chrome::repaint):
        * page/Chrome.h:
        * page/ChromeClient.h:
        * page/FrameView.cpp:
        (WebCore::FrameView::hostWindow):
        (WebCore::FrameView::repaintContentRectangle):
        * page/FrameView.h:
        * platform/HostWindow.h:
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::repaintContentRectangle):
        (WebCore::ScrollView::platformRepaintContentRectangle):
        * platform/ScrollView.h:
        * platform/gtk/ScrollViewGtk.cpp:
        * platform/mac/ScrollViewMac.mm:
        (WebCore::ScrollView::platformRepaintContentRectangle):
        * platform/qt/ScrollViewQt.cpp:
        * platform/win/ScrollViewWin.cpp:
        * platform/wx/ScrollViewWx.cpp:
        (WebCore::ScrollView::platformRepaintContentRectangle):

2008-09-30  Alexey Proskuryakov  <ap@webkit.org>

        Non-Mac build fixes.

        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCoreSources.bkl:
        * webcore-base.bkl:
        Added DOMProtect.{cpp,h}.

2008-09-39  Kevin Decker  <kdecker@apple.com>

        Reviewed by John Sullivan.

        * bridge/npapi.h: Added skeleton for a new plug-in drawing model, the NPCoreAnimationDrawingModel. This model will eventually pave the way
        for hardware accelerated drawing in plug-ins and out of process plug-in rendering.

2008-09-29  Julien Chaffraix  <jchaffraix@webkit.org>

        Reviewed by Maciej Stachowiak.

        Bug 21106: .in format discussed changes
        https://bugs.webkit.org/show_bug.cgi?id=21106

        - Removed "cppNamespace" global parameter and hard-coded "WebCore" as it
        is the only namespace used.

        - Removed "generateFactory" and "generateWrapperFactory" parameters and
        re-introduced the command line options.

        - Cleaned up the output of make_names.pl (removed unneeded new line).

        * DerivedSources.make: Added factories command line options.
        * GNUmakefile.am: Ditto.
        * WebCore.pro: Ditto and removed some arguments that were migrated to
        the .in files.

        * dom/make_names.pl: Clean up (see above).

        * html/HTMLAttributeNames.in: Removed "cppNamespace", "generateFactory"
        and "generateWrapperFactory" occurences.
        * html/HTMLTagNames.in: Ditto.
        * svg/svgattrs.in: Ditto.
        * svg/svgtags.in: Ditto.
        * svg/xlinkattrs.in: Ditto.
        * xml/xmlattrs.in: Ditto.

2008-09-29  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by John Sullivan.

        <rdar://problem/6255456> AX: <file> input button shouldn't have children exposed
        Make sure that certain types of elements do not return children and, moreover, do not waste their
        energy trying to return children

        Test: accessibility/nochildren-elements.html

        * page/AccessibilityObject.h:
        (WebCore::AccessibilityObject::canHaveChildren):
        * page/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::canHaveChildren):
        (WebCore::AccessibilityRenderObject::addChildren):
        * page/AccessibilityRenderObject.h:

2008-09-30  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=21213
        MessagePort crash when GC collects an object with a pending close event

        Test: fast/events/message-channel-gc-2.html
              fast/events/message-channel-listener-circular-ownership.html

        * bindings/DOMProtect.cpp: Added.
        (WebCore::gcProtectDOMObject):
        (WebCore::gcUnprotectDOMObject):
        * bindings/DOMProtect.h: Added.
        Added an abstraction for GC protection to avoid the need to call JS bindings code from
        DOM objects directly.

        * dom/MessagePort.cpp:
        (WebCore::CloseMessagePortTimer::fired):
        (WebCore::MessagePort::queueCloseEvent):
        GC protect MessagePort wrapper while there is a pending close event.
        This may be necessary for message events, too, but that case is not a crasher, and actually
        behaves to the letter of the current HTML5 text, so I'll consider it later.

        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::loadRequestAsynchronously):
        (WebCore::XMLHttpRequest::dropProtection):
        Use gcProtectDOMObject here, too. Unfortunately, XMLHttpRequest has more dependencies on JSC.

        * bindings/js/JSMessagePortCustom.cpp:
        (WebCore::JSMessagePort::addEventListener):
        (WebCore::JSMessagePort::removeEventListener):
        (WebCore::JSMessagePort::setOnmessage):
        (WebCore::JSMessagePort::setOnclose):
        Don't tell DOMWindowBase that MessagePort is a NodeEventTarget, this is not true. I do not
        know if this was causing any real issues, but we shouldn't lie to DOMWindowBase.

        * bindings/js/JSXMLHttpRequestUploadCustom.cpp:
        (WebCore::JSXMLHttpRequestUpload::mark):
        While at it, changed to use a typedef for event listeners from XMLHttpRequestUpload, not
        from XMLHttpRequest.

2008-09-30  Adam Roben  <aroben@apple.com>

        Windows build fix

        * DerivedSources.cpp: Add JSEventTargetNode.cpp.

2008-09-29  Sam Weinig  <sam@webkit.org>

        Reviewed by Tim Hatcher.

        Patch for https://bugs.webkit.org/show_bug.cgi?id=21122
        Autogenerate JS event listeners

        - Generate EventTargetNode.

        * DerivedSources.make:
        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * bindings/js/JSEventListener.cpp:
        * bindings/js/JSEventTarget.cpp: Added.
        (WebCore::toJS):
        * bindings/js/JSEventTarget.h: Added.
        * bindings/js/JSEventTargetBase.cpp: Removed.
        * bindings/js/JSEventTargetBase.h:
        * bindings/js/JSEventTargetNode.cpp: Removed.
        * bindings/js/JSEventTargetNode.h: Removed.
        * bindings/js/JSEventTargetNodeCustom.cpp: Added.
        (WebCore::JSEventTargetNode::addEventListener):
        (WebCore::JSEventTargetNode::removeEventListener):
        (WebCore::JSEventTargetNode::dispatchEvent):
        (WebCore::JSEventTargetNode::getListener):
        (WebCore::JSEventTargetNode::setListener):
        (WebCore::JSEventTargetNode::pushEventHandlerScope):
        * bindings/js/JSEventTargetSVGElementInstance.cpp:
        (WebCore::):
        (WebCore::JSEventTargetSVGElementInstancePrototype::self):
        (WebCore::JSEventTargetSVGElementInstancePrototype::getOwnPropertySlot):
        (jsEventTargetAddEventListener):
        (jsEventTargetRemoveEventListener):
        (jsEventTargetDispatchEvent):
        * bindings/js/JSEventTargetSVGElementInstance.h:
        (WebCore::JSEventTargetSVGElementInstancePrototype::JSEventTargetSVGElementInstancePrototype):
        (WebCore::JSEventTargetSVGElementInstancePrototype::classInfo):
        * bindings/scripts/CodeGeneratorJS.pm:
        * dom/EventTargetNode.idl: Added.

2008-09-29  Darin Adler  <darin@apple.com>

        Reviewed by Sam Weinig.

        - https://bugs.webkit.org/show_bug.cgi?id=21214
          work on getting rid of ExecState

        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::JSDOMWindowBase): Removed globalThisValue argument
        for base class constructor.

2008-09-29  David Hyatt  <hyatt@apple.com>

        Add the new HostWindow base class.  A HostWindow hosts a hierarchy of Widgets.  The Chrome object on Page
        now subclasses from HostWindow.  The new class will allow objects in platform/ like Widgets, Scrollbars
        and ScrollViews to talk to the HostWindow object in order to do backing store operations and invalidations.
        (Right now the platform layering is simply being violated by ScrollViews going directly to the ChromeClient.)

        Reviewed by Sam Weinig

        * WebCore.xcodeproj/project.pbxproj:
        * page/Chrome.h:
        * platform/HostWindow.h: Added.
        (WebCore::HostWindow::HostWindow):
        (WebCore::HostWindow::~HostWindow):

2008-09-29  Kevin Decker  <kdecker@apple.com>

        Reviewed by Anders Carlsson.

        * bridge/npapi.h: Tweaked NPNVariable enum. NPNVsupportsCocoaBool,  NPNVsupportsCarbonBool are now in the 3000 range instead of
        2000.

2008-09-29  Dan Bernstein  <mitz@apple.com>

        Reviewed by Adam Roben.

        - WebCore part of fixing <rdar://problem/6247906> REGRESSION (r19500): Crash on quit beneath CloseThemeData

        * rendering/RenderThemeWin.cpp:
        (WebCore::RenderThemeWin::setWebKitIsBeingUnloaded): Added.
        (WebCore::RenderThemeWin::~RenderThemeWin): Check if WebKit is being
        unloaded, to avoid calling uxtheme.dll functions after that library has
        been unloaded.
        * rendering/RenderThemeWin.h:

2008-09-29  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by John Sullivan

        <rdar://problem/6240743> AXLoadComplete is sent for non-top level web areas and bogus web areas

        Sends AXLoadComplete only when the top level web area is finished loading

        * dom/Document.cpp:
        (WebCore::Document::implicitClose):

2008-09-29  Timothy Hatcher  <timothy@apple.com>

        Makes the node highlight always show up when hovering a node in
        the Web Inspector now that the highlight does not scroll to reveal
        the node. Also adds a hover effect in the inspector when hovering
        causes a highlight in the page. This ties the user hovering action
        to the highlight so it is clear what causes the highlight to appear.

        Also the highlight now temporarily shows up for 2 seconds after
        selecting a node in the DOM tree. So arrowing around in the tree
        will show the node on the page, providing feedback to the user.

        Plus fixes an issue where quickly moving away from hovering
        a node would keep showing the page highlight. This was happening
        in breadcrumbs and the DOM tree.

        https://bugs.webkit.org/show_bug.cgi?id=21220

        Reviewed by Kevin McCullough.

        * page/inspector/Console.js:
        (WebInspector.Console.prototype._mouseOverNode): Added. Used for
        hovering DOM nodes in the console.
        (WebInspector.Console.prototype._mouseOutOfNode): Ditto.
        (WebInspector.Console.prototype._formatnode): Use the new event
        listeners and add a class name to the anchor element.
        * page/inspector/ElementsPanel.js:
        (WebInspector.ElementsPanel): Add new event listeners to the
        crumbs element to do the node hovering highlight.
        (WebInspector.ElementsPanel.prototype.hide):
        (WebInspector.ElementsPanel.prototype.reset):
        (WebInspector.ElementsPanel.prototype._mouseMovedInCrumbs):
        (WebInspector.ElementsPanel.prototype._mouseMovedOutOfCrumbs):
        (WebInspector.ElementsPanel.prototype.updateBreadcrumb):
        * page/inspector/ElementsTreeOutline.js:
        (WebInspector.ElementsTreeOutline.prototype.set focusedDOMNode):
        Show the node hishlight for 2 seconds then restore the highlight
        to the current hovered node.
        (WebInspector.ElementsTreeOutline.prototype._onmousemove): Set the
        hovered node and set the hovered state on the tree element.
        (WebInspector.ElementsTreeOutline.prototype._onmouseout): Set the
        hovered node to null and removed the hovered state from the previous
        hovered tree element.
        (WebInspector.ElementsTreeElement.prototype.set/get hovered): Adds
        the hovered class to the list item.
        (WebInspector.ElementsTreeElement.prototype.onattach): Ditto.
        * page/inspector/inspector.css:
        * page/inspector/inspector.js:
        (WebInspector.set hoveredDOMNode): Pass a delay to _updateHoverHighlightSoon
        based on the showingDOMNodeHighlight property of 50ms or 500ms. This
        causes the highlight to change sooner if there is one already showing
        and appear later if there isn't one showing. This is like tooltips,
        hovering a node for 500ms will cause highlight then mousing between nodes
        will keep the highlight and change to the new node.
        (WebInspector._updateHoverHighlightSoon): Take a delay being passed in and
        always reset the timeout so continuous mousing does not keep flasshing
        the highlight on the screen.
        (WebInspector._updateHoverHighlight): Removed the alt key check and added
        the showingDOMNodeHighlight property.
        (WebInspector.documentKeyDown): Removed the alt key check.
        (WebInspector.documentKeyUp): Ditto.
        (WebInspector.reset): Clear the hoveredDOMNode.

2008-09-29  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Anders Carlsson

        Fix RenderStyle leak in animation code, and assert that
        keyframe resolution in CSSStyleSelector is not going to clobber
        m_style.

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::keyframeStylesForAnimation):
        * page/animation/KeyframeAnimation.cpp:
        (WebCore::KeyframeAnimation::~KeyframeAnimation):

2008-09-29  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Dave Hyatt

        Fixed https://bugs.webkit.org/show_bug.cgi?id=20995
        Rewrite keyframe resolution to be like styleForElement()

        Test: animations/lineheight-animation.html

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::addKeyframeStyle):
        (WebCore::CSSStyleSelector::~CSSStyleSelector):
        (WebCore::CSSStyleSelector::keyframeStylesForAnimation):
        (WebCore::CSSRuleSet::addRulesFromSheet):
        (WebCore::CSSStyleSelector::mapAnimationName):
        * css/CSSStyleSelector.h:
        * page/animation/CompositeAnimation.cpp:
        (WebCore::CompositeAnimation::updateKeyframeAnimations):
        * page/animation/KeyframeAnimation.cpp:
        (WebCore::KeyframeAnimation::KeyframeAnimation):
        (WebCore::KeyframeAnimation::animate):
        (WebCore::KeyframeAnimation::hasAnimationForProperty):
        (WebCore::KeyframeAnimation::sendAnimationEvent):
        (WebCore::KeyframeAnimation::overrideAnimations):
        (WebCore::KeyframeAnimation::resumeOverriddenAnimations):
        (WebCore::KeyframeAnimation::affectsProperty):
        (WebCore::KeyframeAnimation::validateTransformFunctionList):
        * page/animation/KeyframeAnimation.h:
        * rendering/style/Animation.cpp:
        (WebCore::Animation::animationsMatch):
        * rendering/style/Animation.h:
        * rendering/style/KeyframeList.cpp:
        (WebCore::KeyframeList::~KeyframeList):
        (WebCore::KeyframeList::clear):
        (WebCore::KeyframeList::insert):
        * rendering/style/KeyframeList.h:
        (WebCore::KeyframeValue::KeyframeValue):
        (WebCore::KeyframeList::KeyframeList):
        (WebCore::KeyframeList::operator!=):
        (WebCore::KeyframeList::animationName):
        (WebCore::KeyframeList::addProperty):
        (WebCore::KeyframeList::containsProperty):
        (WebCore::KeyframeList::beginProperties):
        (WebCore::KeyframeList::endProperties):
        (WebCore::KeyframeList::isEmpty):
        (WebCore::KeyframeList::size):
        (WebCore::KeyframeList::beginKeyframes):
        (WebCore::KeyframeList::endKeyframes):
        * rendering/style/RenderStyle.h:
        * rendering/style/StyleRareNonInheritedData.cpp:
        * rendering/style/StyleRareNonInheritedData.h:

2008-09-29  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Eric Seidel

        Clean up fix in PropertyWrapperGetter::equals
        https://bugs.webkit.org/show_bug.cgi?id=21011

        Test: transitions/override-transition-crash.html

        * page/animation/AnimationBase.cpp:
        (WebCore::PropertyWrapperGetter::equals):
        * page/animation/CompositeAnimation.cpp:
        (WebCore::CompositeAnimation::updateTransitions):

2008-09-29  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Eric Seidel

        https://bugs.webkit.org/show_bug.cgi?id=21001
        Starting transition after animation, when animation
        is finished, transition is wrong.

        Test: animations/transition-and-animation-2.html

        * page/animation/AnimationBase.h:
        * page/animation/CompositeAnimation.cpp:
        (WebCore::CompositeAnimation::updateTransitions):
        (WebCore::CompositeAnimation::updateKeyframeAnimations):
        (WebCore::CompositeAnimation::resetTransitions):
        (WebCore::CompositeAnimation::cleanupFinishedAnimations):
        * page/animation/ImplicitAnimation.cpp:
        (WebCore::ImplicitAnimation::ImplicitAnimation):
        (WebCore::ImplicitAnimation::~ImplicitAnimation):
        (WebCore::ImplicitAnimation::animate):
        (WebCore::ImplicitAnimation::reset):
        * page/animation/ImplicitAnimation.h:

2008-09-29  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Sam Weinig

        https://bugs.webkit.org/show_bug.cgi?id=20921
        -webkit-animation-timing-function: inside of keyframes is ignored

        Test: animations/keyframe-timing-functions.html

        * page/animation/AnimationBase.cpp:
        (WebCore::AnimationBase::progress):
        * page/animation/AnimationBase.h:
        * page/animation/ImplicitAnimation.cpp:
        (WebCore::ImplicitAnimation::animate):
        * page/animation/KeyframeAnimation.cpp:
        (WebCore::KeyframeAnimation::animate):

2008-09-29  Dan Bernstein  <mitz@apple.com>

        - Windows build fix

        * platform/ScrollView.cpp:
        (WebCore::ScrollView::platformScroll):

2008-09-29  Dan Bernstein  <mitz@apple.com>

        - another attempt at a Windows build fix

        * platform/ScrollView.cpp:
        (WebCore::platformScroll):

2008-09-29  Dan Bernstein  <mitz@apple.com>

        - Windows build fix

        * platform/ScrollView.cpp:
        (WebCore::ScrollView::platformSetScrollPosition):

2008-09-29  David Hyatt  <hyatt@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=21218

        Accidentally removed a check to see if the scrollbar modes were equal.  This caused a crash on Windows.
        It's silly that the code was this fragile, but for now just put the check back in.

        Reviewed by Dan Bernstein

        * platform/ScrollView.cpp:
        (WebCore::ScrollView::setScrollbarModes):

2008-09-29  David Hyatt  <hyatt@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=21216

        Make setScrollPosition and scroll() cross-platform.

        Reviewed by Anders

        * platform/ScrollView.cpp:
        (WebCore::ScrollView::setScrollPosition):
        (WebCore::ScrollView::scroll):
        * platform/ScrollView.h:
        * platform/gtk/ScrollViewGtk.cpp:
        * platform/mac/ScrollViewMac.mm:
        (WebCore::ScrollView::platformSetScrollPosition):
        (WebCore::ScrollView::platformScroll):
        * platform/qt/ScrollViewQt.cpp:
        * platform/win/ScrollViewWin.cpp:
        * platform/wx/ScrollViewWx.cpp:
        (WebCore::ScrollView::platformSetScrollPosition):
        (WebCore::ScrollView::platformScroll):

2008-09-29  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Oliver.

        Bug 21139: Profiler log message is wrong
        - Because _format was called twice the number in the log was incremented
        too many times, but we were passing it around in the link the whole time

        * page/inspector/ProfilesPanel.js:
        * page/inspector/inspector.js:

2008-09-29  Sam Weinig  <sam@webkit.org>

        Reviewed by Cameron Zwarich.

        Autogenerate EventListeners, addEventListener and removeEventListener
        for JSDOMWindow.

        * bindings/js/JSDOMWindowBase.cpp:
        * bindings/js/JSDOMWindowBase.h:
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::onwebkitanimationstart):
        (WebCore::JSDOMWindow::setOnwebkitanimationstart):
        (WebCore::JSDOMWindow::onwebkitanimationiteration):
        (WebCore::JSDOMWindow::setOnwebkitanimationiteration):
        (WebCore::JSDOMWindow::onwebkitanimationend):
        (WebCore::JSDOMWindow::setOnwebkitanimationend):
        (WebCore::JSDOMWindow::onwebkittransitionend):
        (WebCore::JSDOMWindow::setOnwebkittransitionend):
        (WebCore::JSDOMWindow::addEventListener):
        (WebCore::JSDOMWindow::removeEventListener):
        (WebCore::JSDOMWindow::setListener):
        (WebCore::JSDOMWindow::getListener):
        * bindings/scripts/CodeGeneratorJS.pm:
        * page/DOMWindow.idl:

2008-09-29  Thiago Macieira  <thiago.macieira@nokia.com>

        Reviewed by Simon.

        Changed copyright from Trolltech ASA to Nokia.

        Nokia acquired Trolltech ASA, assets were transferred on September 26th 2008.

        * bindings/js/JSMimeTypeArrayCustom.cpp:
        * bindings/js/JSNavigatorCustom.cpp:
        * bindings/js/JSPluginArrayCustom.cpp:
        * bindings/js/JSPluginCustom.cpp:
        * bindings/js/ScriptControllerMac.mm:
        * bindings/js/ScriptControllerQt.cpp:
        * bridge/qt/qt_class.cpp:
        * bridge/qt/qt_class.h:
        * bridge/qt/qt_instance.cpp:
        * bridge/qt/qt_instance.h:
        * bridge/qt/qt_runtime.cpp:
        * bridge/qt/qt_runtime.h:
        * bridge/testqtbindings.cpp:
        * css/makegrammar.pl:
        * css/makeprop.pl:
        * css/makevalues.pl:
        * dom/Node.cpp:
        * dom/TagNodeList.cpp:
        * dom/TagNodeList.h:
        * dom/XMLTokenizer.cpp:
        * dom/XMLTokenizer.h:
        * dom/XMLTokenizerLibxml2.cpp:
        * dom/XMLTokenizerQt.cpp:
        * editing/Editor.cpp:
        * editing/EditorCommand.cpp:
        * html/CanvasRenderingContext2D.cpp:
        * html/CanvasStyle.cpp:
        * html/HTMLAppletElement.cpp:
        * html/HTMLEmbedElement.cpp:
        * html/HTMLObjectElement.cpp:
        * loader/FrameLoader.cpp:
        * page/Chrome.cpp:
        * page/EditorClient.h:
        * page/Frame.cpp:
        * page/Frame.h:
        * page/FramePrivate.h:
        * page/Navigator.cpp:
        * page/Navigator.h:
        * page/Navigator.idl:
        * page/mac/FrameMac.mm:
        * page/qt/EventHandlerQt.cpp:
        * platform/graphics/qt/FontCacheQt.cpp:
        * platform/graphics/qt/FontCustomPlatformData.cpp:
        * platform/graphics/qt/FontCustomPlatformData.h:
        * platform/graphics/qt/FontPlatformData.h:
        * platform/graphics/qt/FontQt.cpp:
        * platform/graphics/qt/GlyphPageTreeNodeQt.cpp:
        * platform/graphics/qt/GraphicsContextQt.cpp:
        * platform/graphics/qt/ImageDecoderQt.cpp:
        * platform/graphics/qt/ImageDecoderQt.h:
        * platform/graphics/qt/ImageSourceQt.cpp:
        * platform/graphics/qt/MediaPlayerPrivatePhonon.cpp:
        * platform/graphics/qt/MediaPlayerPrivatePhonon.h:
        * platform/graphics/qt/SimpleFontDataQt.cpp:
        * platform/gtk/MIMETypeRegistryGtk.cpp:
        * platform/mac/MIMETypeRegistryMac.mm:
        * platform/network/qt/QNetworkReplyHandler.cpp:
        * platform/network/qt/QNetworkReplyHandler.h:
        * platform/network/qt/ResourceHandleQt.cpp:
        * platform/network/qt/ResourceRequestQt.cpp:
        * platform/qt/ClipboardQt.cpp:
        * platform/qt/EventLoopQt.cpp:
        * platform/qt/KURLQt.cpp:
        * platform/qt/LoggingQt.cpp:
        * platform/qt/MIMETypeRegistryQt.cpp:
        * platform/qt/PasteboardQt.cpp:
        * platform/qt/PlatformScreenQt.cpp:
        * platform/qt/PopupMenuQt.cpp:
        * platform/qt/QWebPopup.cpp:
        * platform/qt/QWebPopup.h:
        * platform/qt/RenderThemeQt.cpp:
        * platform/qt/ScrollbarQt.cpp:
        * platform/qt/ScrollbarThemeQt.cpp:
        * platform/qt/WheelEventQt.cpp:
        * platform/qt/html4-adjustments-qt.css:
        * platform/wx/MimeTypeRegistryWx.cpp:
        * plugins/MimeType.cpp:
        * plugins/MimeType.h:
        * plugins/MimeType.idl:
        * plugins/MimeTypeArray.cpp:
        * plugins/MimeTypeArray.h:
        * plugins/MimeTypeArray.idl:
        * plugins/Plugin.cpp:
        * plugins/Plugin.h:
        * plugins/Plugin.idl:
        * plugins/PluginArray.cpp:
        * plugins/PluginArray.h:
        * plugins/PluginArray.idl:
        * plugins/PluginData.cpp:
        * plugins/PluginData.h:
        * plugins/gtk/PluginDataGtk.cpp:
        * plugins/mac/PluginDataMac.mm:
        * plugins/qt/PluginDataQt.cpp:
        * plugins/win/PluginDataWin.cpp:
        * rendering/RenderTableCol.cpp:
        * rendering/RenderTableCol.h:

2008-09-29  Thiago Macieira  <thiago.macieira@trolltech.com>

        Reviewed by Simon

        Fix compilation with gcc 4.3

         gcc 4.3 is stricter and ctype.h isn't getting included
        automatically here by dependencies. So do it directly.

        * platform/qt/PlatformKeyboardEventQt.cpp:

2008-09-29  Morten Sørvig  <msorvig@trolltech.com>

        Reviewed by Simon.

        Fix compilation with Qt/Mac without plugins.

        * platform/qt/TemporaryLinkStubs.cpp:

2008-09-29  Mark Rowe  <mrowe@apple.com>

        Reviewed by Sam Weinig.

        Apply the ASCII fast path optimization from StringImpl::lower to StringImpl::upper.
        In the few places that we call .upper() in WebCore the strings represent things like
        tag and attribute names, which are nearly always going to be ASCII.

        * platform/text/StringImpl.cpp:
        (WebCore::StringImpl::lower): If we have to resize the buffer, be sure to pass the new length
        in to Unicode::toLower the second time.
        (WebCore::StringImpl::upper):

2008-09-28  Mark Rowe  <mrowe@apple.com>

        Reviewed by Sam Weinig.

        Speed up getPropertyValue('clip') by 25% by using a Vector<UChar> for building a string,
        rather than String::operator+=.

        * css/CSSPrimitiveValue.cpp:
        (WebCore::CSSPrimitiveValue::cssText):

2008-09-28  Mark Rowe  <mrowe@apple.com>

        Reviewed by Oliver Hunt.

        Speed up computedStyle.getPropertyValue('color') by 4.5x.

        Using a Vector<UChar> while building up the property's cssText is substantially cheaper than using String::operator+=
        as it avoids many memory reallocations.

        This also speeds up the jQuery .offset() benchmark at <http://dev.jquery.com/~john/speed/1.2.6/offset-1.2.6.html>
        by 20% due to jQuery's strange need to call getPropertyValue('color') when retrieving the computed styles for
        unrelated properties on an element.

        * css/CSSPrimitiveValue.cpp:
        (WebCore::CSSPrimitiveValue::cssText): Build the result for the color types into a Vector<UChar>
        and use appendNumber rather than the String::number in order to cut down on memory allocations.
        * platform/text/PlatformString.h:
        (WebCore::appendNumber): A helper function for formatting an unsigned character as a number
        into a Vector<UChar>.

2008-09-28  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Remove spurious call to lower().

        * css/MediaQueryEvaluator.cpp:
        (WebCore::MediaQueryEvaluator):

2008-09-28  Sam Weinig  <sam@webkit.org>

        Reviewed by Dan Bernstein.

        Use a CaseFoldingHash instead of calling lower on family strings.

        * css/CSSFontSelector.cpp:
        (WebCore::CSSFontSelector::addFontFaceRule):
        (WebCore::CSSFontSelector::getFontData):
        * css/CSSFontSelector.h:

2008-09-28  Timothy Hatcher  <timothy@apple.com>

        Remove the scrollIntoViewIfNeeded() call when drawing the
        Inspector node highlight.

        <rdar://problem/6115804> Don't scroll when highlighting (21000)
        https://bugs.webkit.org/show_bug.cgi?id=21000

        Reviewed by Dan Bernstein.

        * page/InspectorController.cpp:
        (WebCore::InspectorController::drawNodeHighlight):

2008-09-28  David Hyatt  <hyatt@apple.com>

        Fix crash when WebKit has no instantiated Scrollbars and the appearance prefs for scrollbars are
        changed.

        Reviewed by Dan Bernstein

        * platform/mac/ScrollbarThemeMac.mm:
        (+[ScrollbarPrefsObserver appearancePrefsChanged:]):

2008-09-28  Timothy Hatcher  <timothy@apple.com>

        Clear the current search results in the Inspector when
        the search query is less than 3 characters long. Incremental
        searches only occur for 3 characters or longer, but deleting
        under this limit would not clear the results unless the whole
        query was deleted.

        https://bugs.webkit.org/show_bug.cgi?id=21196

        Reviewed by Dan Bernstein.

        * page/inspector/inspector.js:
        (WebInspector.performSearch): Check for short queries in the
        if statement that triggers the clear.

2008-09-28  Dan Bernstein  <mitz@apple.com>

        Reviewed by Dave Hyatt.

        - fix <rdar://problem/6202962> "Tibetan Machine Uni" font does not work as a web font on Windows because TTLoadEmbeddedFont fails with E_NAMECHANGEFAILED

        * platform/graphics/win/FontCustomPlatformData.cpp:
        (WebCore::EOTStream::EOTStream): Added overlayDst, overlaySrc and
        overlayLength parameters.
        (WebCore::EOTStream::read): Added code to overlay the
        m_overlayLength bytes starting at m_overlayDst with the same number of
        bytes from m_overlaySrc.
        (WebCore::createFontCustomPlatformData): Changed to get overlay
        parameters from getEOTHeader.
        * platform/graphics/win/GetEOTHeader.cpp:
        (WebCore::getEOTHeader): Added code to specify overlaying of the
        family name with the prefix of the full name if they differ, because
        that such a difference causes TTLoadEmbeddedFont to fail.
        * platform/graphics/win/GetEOTHeader.h:

2008-09-28  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=20366
        Reproducible test failure for editing/undo/undo-iframe-location-change.html

        * ChangeLog-2006-05-10: Added bug URLs for a fix that included this test.

2008-09-28  Darin Adler  <darin@apple.com>

        Reviewed by Sam Weinig (except for a few comment and header tweaks).

        - https://bugs.webkit.org/show_bug.cgi?id=21158
          reduce use of virtual functions in Node for speed

        Speeds up Dromaeo a bit less than 1%.

        * bindings/js/JSNamedNodesCollection.cpp: Include Element.h instead of
        Node.h now that some inlines are in there.

        * dom/Attr.h: Override both the virtual and non-virtual name functions.

        * dom/ChildNodeList.cpp:
        (WebCore::ChildNodeList::nodeMatches): Updated to take an Element.
        * dom/ChildNodeList.h: Ditto.
        * dom/ClassNodeList.cpp:
        (WebCore::ClassNodeList::nodeMatches): Ditto.
        * dom/ClassNodeList.h: Ditto.

        * dom/Document.h: Put the Node::isDocumentNode() function's inline
        definition here where it can see the Document class definition.

        * dom/DynamicNodeList.cpp:
        (WebCore::DynamicNodeList::length): Changed to pass an Element.
        (WebCore::DynamicNodeList::itemForwardsFromCurrent): Ditto.
        (WebCore::DynamicNodeList::itemBackwardsFromCurrent): Ditto.
        (WebCore::DynamicNodeList::itemWithName): Ditto.
        * dom/DynamicNodeList.h: Ditto.

        * dom/Element.cpp: Removed virtualHasTagName.
        * dom/Element.h: Made localName, prefix, namespaceURI, and
        styleForRenderer non-virtual. Added virtualPrefix, virtualLocalName,
        virtualNamespaceURI, and removed virtualHasTagName. Put the
        Node::hasTagName, Node::hasAttributes, and Node::attributes
        functions' inline definitions here where they can see the Element
        class definition.

        * dom/NameNodeList.cpp:
        (WebCore::NameNodeList::nodeMatches): Updated to take an Element.
        * dom/NameNodeList.h: Ditto.

        * dom/Node.cpp:
        (WebCore::Node::virtualPrefix): Renamed from prefix.
        (WebCore::Node::virtualLocalName): Renamed from localName.
        (WebCore::Node::virtualNamespaceURI): Renamed from namespaceURI.
        (WebCore::Node::styleForRenderer): Handle the Element case here.

        * dom/Node.h: Removed definition of hasTagName that calls virtual,
        since we now have a non-virtual version. Made hasAttributes,
        attributes, remove, localName, namespaceURI, prefix, isDocumentNode,
        and styleForRenderer non-virtual. Added virtualPrefix,
        virtualLocalName, and virtualNamespaceURI. Removed isMalformed
        and setMalformed, which are used only on HTMLFormElement objects.

        * dom/TagNodeList.cpp:
        (WebCore::TagNodeList::nodeMatches): Updated to take an Element.
        * dom/TagNodeList.h: Ditto.

        * html/HTMLAnchorElement.cpp: Added a comment.
        * html/HTMLFormControlElement.cpp: Ditto.

        * html/HTMLAnchorElement.h: Removed unused, unimplemented setTabIndex
        function. Marked tabIndex function virtual explicitly for clarity.

        * html/HTMLAreaElement.h: Removed unused, unimplemented setTabIndex
        function. Marked isFocusable function virtual explicitly for clarity.

        * html/HTMLElement.h: Marked tabIndex function virtual explicitly for
        clarity.
        * html/HTMLFormControlElement.h: Ditto.

        * html/HTMLFormElement.h: Made isMalformed non-virtual.

        * html/HTMLParser.cpp:
        (WebCore::HTMLParser::handleError): Use the already-cast-to-HTMLElement
        pointer to call localName since that one does not need to call a virtual
        function.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::layoutBlock): Cast to HTMLFormElement before
        calling isMalformed. We already did a tag name check so we know it's
        an HTMLFormELement.

        * xml/XPathUtil.cpp:
        (WebCore::XPath::isValidContextNode): Rewrote to not make so many calls
        to nodeType(), since it's a virtual function.

2008-09-28  David Hyatt  <hyatt@apple.com>

        Make frameRectsChanged() cross-platform on ScrollView.

        Reviewed by Oliver Hunt

        * platform/ScrollView.cpp:
        (WebCore::ScrollView::frameRectsChanged):
        * platform/ScrollView.h:
        * platform/gtk/ScrollViewGtk.cpp:
        * platform/qt/ScrollViewQt.cpp:
        * platform/win/ScrollViewWin.cpp:
        * platform/wx/ScrollViewWx.cpp:

2008-09-28  Oliver Hunt  <oliver@apple.com>

        Reviewed by Maciej Stachowiak.

        Bug 21141: REGRESSION: Exception messages for user entered commands are poor
        <https://bugs.webkit.org/show_bug.cgi?id=21141>

        The bug repsonsible for this was the the JSInspectedObjectWrapper instances
        were not initialising their StructureID's to indicate that the wrapper
        overrides hasInstance, etc.  The solution is simply to use the createStructureID
        helper on JSQuarantinedObjectWrapper to create a correct StructureID.

        * bindings/js/JSInspectedObjectWrapper.cpp:
        (WebCore::JSInspectedObjectWrapper::wrap):

2008-09-28  David Hyatt  <hyatt@apple.com>

        Make sure pixel wheel scrolls (formerly "continuous" wheel events) send deltas to DOM wheel events in
        terms of lines.

        Reviewed by Oliver Hunt

        * dom/EventTargetNode.cpp:
        (WebCore::EventTargetNode::dispatchWheelEvent):

2008-09-28  David Hyatt  <hyatt@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=21191

        Rework mouse wheeling significantly to make the platform event less messy and to enable wheelEvent
        on ScrollView to be cross-platform.

        Give the wheel event a concept of granularity (pixel, line or page).  What used to be called continuous
        events are now pixel wheel events.

        Page scrolling as implemented in bug 17589 was completely broken.  It had the following problems:
        (1) Page scrolling has been corrected to be properly detected (on Windows
        page wheeling is only done in the vertical direction and it is keyed off a special return value of -1).  The
        old code had some bizarre incorrect heuristic for "guessing" that you should page scroll and also thought
        you could page scroll horizontally.
        (2) Page scrolling a layer used the enclosing ScrollView's width/height instead of the layer's width/height.
        This caused the scroll amount for page scrolling to be way too large on layers.

        Bug 17589 got the default horizontal scrolling value wrong.  It assumed 1, when the Vista default is 3.

        Incorporate WebCore's line multiplier right into the deltas of the event.  This eliminates the need
        for separate multiplier fields (or for the need to ask if you're looking for line sensitivity).

        Reviewed by Oliver Hunt

        * editing/EditorCommand.cpp:
        (WebCore::verticalScrollDistance):
        * page/EventHandler.cpp:
        (WebCore::scrollAndAcceptEvent):
        (WebCore::EventHandler::handleWheelEvent):
        * platform/PlatformWheelEvent.h:
        (WebCore::):
        (WebCore::PlatformWheelEvent::pos):
        (WebCore::PlatformWheelEvent::globalPos):
        (WebCore::PlatformWheelEvent::deltaX):
        (WebCore::PlatformWheelEvent::deltaY):
        (WebCore::PlatformWheelEvent::granularity):
        (WebCore::PlatformWheelEvent::x):
        (WebCore::PlatformWheelEvent::globalX):
        (WebCore::PlatformWheelEvent::ignore):
        (WebCore::PlatformWheelEvent::horizontalLineMultiplier):
        (WebCore::PlatformWheelEvent::verticalLineMultiplier):
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::wheelEvent):
        * platform/Scrollbar.h:
        * platform/gtk/ScrollViewGtk.cpp:
        (WebCore::ScrollView::updateScrollbars):
        * platform/gtk/WheelEventGtk.cpp:
        (WebCore::PlatformWheelEvent::PlatformWheelEvent):
        * platform/mac/ScrollViewMac.mm:
        * platform/mac/WheelEventMac.mm:
        (WebCore::PlatformWheelEvent::PlatformWheelEvent):
        * platform/qt/ScrollViewQt.cpp:
        (WebCore::ScrollView::updateScrollbars):
        * platform/qt/WheelEventQt.cpp:
        * platform/win/ScrollViewWin.cpp:
        (WebCore::ScrollView::updateScrollbars):
        * platform/win/WheelEventWin.cpp:
        (WebCore::PlatformWheelEvent::horizontalLineMultiplier):
        (WebCore::PlatformWheelEvent::verticalLineMultiplier):
        (WebCore::PlatformWheelEvent::PlatformWheelEvent):
        * platform/wx/ScrollViewWx.cpp:
        (WebCore::ScrollView::ScrollViewPrivate::OnScrollWinEvents):
        (WebCore::ScrollView::wheelEvent):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateScrollInfoAfterLayout):

2008-09-27  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Sam Weinig.

        fix https://bugs.webkit.org/show_bug.cgi?id=20994
        <rdar://problem/6171023> HTMLVideoElement width and height attributes are now unsigned

        HTML5 spec says HTMLVideoElement width and height attributes should be unsigned. Convert
        all unsigned media attributes from string with toUInt() instead of toInt().

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::playCount): convert from attribute with toUInt().

        * html/HTMLVideoElement.cpp:
        (WebCore::HTMLVideoElement::videoWidth):
        (WebCore::HTMLVideoElement::videoHeight): return unsigned to match idl.
        (WebCore::HTMLVideoElement::width): convert from attribute with toUInt() and return
          unsigned value.
        (WebCore::HTMLVideoElement::height): Ditto.
        (WebCore::HTMLVideoElement::setWidth): take unsigned value.
        (WebCore::HTMLVideoElement::setHeight): Ditto.

        * html/HTMLVideoElement.h: width, height, videoWidth, and videoHeight are unsigned.

        * html/HTMLVideoElement.idl: make width and height unsigned to match HTML5 spec.

2008-09-27  Timothy Hatcher  <timothy@apple.com>

        Fixes an exception when typing a command in the Console.

        Reviewed by Oliver Hunt.

        * page/inspector/Console.js:
        (WebInspector.Console.prototype.addMessage): Null check
        this.previosMessage.

2008-09-27  Timothy Hatcher  <timothy@apple.com>

        Fixes a bug where the Profiles panel sidebar would be empty
        after closing and reopening the Web Inspector.

        https://bugs.webkit.org/show_bug.cgi?id=21179

        Reviewed by Sam Weinig.

        * page/inspector/ProfilesPanel.js:
        (WebInspector.ProfilesPanel.prototype.reset): Don't call
        populateInterface, it is called automatically.
        (WebInspector.ProfilesPanel.prototype._populateProfiles):
        Return early if the sidebar is already populated.

2008-09-27  Dave Hyatt  <hyatt@apple.com>

        Bug 21190.  The line scroll amount on Windows is way too small.  A patch for bug 17589 for wheel sensitivity
        incorrectly applied the tinier wheel step delta (unmultiplied) to line scrolling.  Line scrolling with the
        scrollbar has nothing to do with mouse wheeling.  This patch reverts the scrollbars to use the same line
        step as other platforms while leaving the wheel delta alone for use with wheel scrolling.

        There was a lot wrong with 17589, so more patches will be coming to deal with the fallout of this patch
        (which should never have landed in the first place).

        Reviewed by Tim Hatcher, Sam Weinig

        * platform/win/ScrollViewWin.cpp:
        (WebCore::adjustDeltaForPageScrollMode):
        (WebCore::ScrollView::updateScrollbars):
        (WebCore::ScrollView::wheelEvent):

2008-09-27  David Hyatt  <hyatt@apple.com>

        Make the scrollbarUnderMouse method cross-platform.

        Reviewed by Sam Weinig

        * platform/ScrollView.cpp:
        (WebCore::ScrollView::scrollbarUnderMouse):
        * platform/gtk/ScrollViewGtk.cpp:
        * platform/mac/ScrollViewMac.mm:
        * platform/qt/ScrollViewQt.cpp:
        * platform/win/ScrollViewWin.cpp:
        * platform/wx/ScrollViewWx.cpp:

2008-09-27  Holger Hans Peter Freyther  <zecke@selfish.org>

        Gtk+ build fix.

        * platform/gtk/ScrollViewGtk.cpp:
        (WebCore::ScrollView::ScrollViewPrivate::valueChanged):

2008-09-27  Jan Michael Alonzo  <jmalonzo@webkit.org>

        Reviewed by Holger Freyther.

        https://bugs.webkit.org/show_bug.cgi?id=20287
        [Gtk] disable plugins for gtk/directfb target

        Introduce WTF_PLATFORM_X11 for X11 builds.
        Also use target-specific packages when building the port

        * platform/gtk/PlatformScreenGtk.cpp:
        * plugins/gtk/PluginViewGtk.cpp:
        (WebCore::PluginView::updatePluginWidget):
        (WebCore::PluginView::getValueStatic):
        (WebCore::PluginView::getValue):
        (WebCore::PluginView::init):

2008-09-27  David Hyatt  <hyatt@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=21188

        Make scrollbar suppression and resizer avoidance cross-platform.

        Reviewed by Anders

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::transitionToCommitted):
        * page/FrameView.cpp:
        (WebCore::FrameView::resetScrollbars):
        (WebCore::FrameView::clear):
        (WebCore::FrameView::layout):
        (WebCore::FrameView::restoreScrollbar):
        (WebCore::FrameView::windowResizerRect):
        * page/FrameView.h:
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::init):
        (WebCore::ScrollView::resizerOverlapsContent):
        (WebCore::ScrollView::adjustScrollbarsAvoidingResizerCount):
        (WebCore::ScrollView::setParent):
        (WebCore::ScrollView::setScrollbarsSuppressed):
        (WebCore::ScrollView::platformSetScrollbarsSuppressed):
        * platform/ScrollView.h:
        (WebCore::ScrollView::scrollbarsSuppressed):
        (WebCore::ScrollView::windowResizerRect):
        * platform/Scrollbar.cpp:
        (WebCore::Scrollbar::setFrameRect):
        (WebCore::Scrollbar::setParent):
        * platform/gtk/ScrollViewGtk.cpp:
        (WebCore::ScrollView::ScrollViewPrivate::ScrollViewPrivate):
        (WebCore::ScrollView::ScrollViewPrivate::adjustmentChanged):
        (WebCore::ScrollView::updateScrollbars):
        (WebCore::ScrollView::paint):
        * platform/mac/ScrollViewMac.mm:
        (WebCore::ScrollView::ScrollView):
        (WebCore::ScrollView::~ScrollView):
        (WebCore::ScrollView::platformSetScrollbarsSuppressed):
        (WebCore::ScrollView::setScrollPosition):
        * platform/qt/ScrollViewQt.cpp:
        (WebCore::ScrollView::ScrollViewPrivate::ScrollViewPrivate):
        (WebCore::ScrollView::ScrollViewPrivate::valueChanged):
        (WebCore::ScrollView::frameRectsChanged):
        (WebCore::ScrollView::updateScrollbars):
        (WebCore::ScrollView::paint):
        * platform/win/ScrollViewWin.cpp:
        (WebCore::ScrollView::ScrollViewPrivate::ScrollViewPrivate):
        (WebCore::ScrollView::ScrollViewPrivate::valueChanged):
        (WebCore::ScrollView::updateScrollbars):
        (WebCore::ScrollView::paint):
        * platform/wx/ScrollViewWx.cpp:
        (WebCore::ScrollView::ScrollViewPrivate::ScrollViewPrivate):

2008-09-27  Holger Hans Peter Freyther  <zecke@selfish.org>

        Rubber-stamped by Anders Carlsson.

        Compile fix.

        * plugins/PluginView.cpp:
        (WebCore::PluginView::load):

2008-09-27  Mark Rowe  <mrowe@apple.com>

        Rubber-stamped by Sam Weinig.

        Fix <https://bugs.webkit.org/show_bug.cgi?id=21184>.
        Bug 21184: REGRESSION: Reproducible crash below StringImpl::hash while running editing/deleting/5408255.html

        Remove an assertion that was incorrect and that if made correct would have duplicated a check that occurred earlier in the function.

        * loader/CachedResource.cpp:
        (WebCore::CachedResource::~CachedResource):

2008-09-27  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Simon Hausmann.

        [qt] Use QImageReader to figure out which image formats are supported
        - Qt can have many different plugins for different image formats. Instead
        of checking only for a few in WebCore use Qt to determine if this data
        can be treated as an image.

        * platform/graphics/qt/ImageSourceQt.cpp:
        (WebCore::canHandleImage):
        (WebCore::createDecoder):

2008-09-27  Holger Hans Peter Freyther  <zecke@selfish.org>


        [qt] Clean the pattern code
        - Use save/restore on the painter after manipulating the
        pen/brush
        - Make the context and object null checking consistent. CG is using
        the object unconditionally so the Qt webkit platform can do the
        same.
        - Move code below the early exit. Only use the m_ownerElement before
        the early exit as the CG code is doing it.

        * svg/graphics/SVGPaintServerPattern.h:
        * svg/graphics/qt/SVGPaintServerPatternQt.cpp:
        (WebCore::SVGPaintServerPattern::setup):
        (WebCore::SVGPaintServerPattern::teardown):

2008-09-27  Keishi Hattori  <casey.hattori@gmail.com>

        Added support for console.trace.

        https://bugs.webkit.org/show_bug.cgi?id=19157

        Reviewed by Kevin McCullough and Tim Hatcher.

        * bindings/js/JSConsoleCustom.cpp:
        (WebCore::JSConsole::trace):
        * page/Console.cpp:
        (WebCore::Console::trace): Calls Machine::retrieveCaller to
        get a stack trace.
        * page/Console.h:
        (WebCore::): Added TraceMessageLevel.
        * page/Console.idl: Added console.trace.
        * page/inspector/Console.js:
        (ConsoleMessage): Added case for TraceMessageLevel.

2008-09-27  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=21178
        <rdar://problem/6248651>

        Check if the plug-in is allowed to load the resource. This matches Firefox.

        Test: http/tests/plugins/local-geturl-from-remote.html

        * plugins/PluginView.cpp:
        (WebCore::PluginView::load):

2008-09-22  Dirk Schulze  <vbs85@gmx.de>

        Reviewed by Eric Seidel.

        Added SVG pattern support to Qt.

        [Qt] SVG patterns are missing
        https://bugs.webkit.org/show_bug.cgi?id=20973

        * svg/graphics/qt/SVGPaintServerPatternQt.cpp:
        (WebCore::SVGPaintServerPattern::setup):

2008-09-27  Keishi Hattori  <casey.hattori@gmail.com>

        Fixed a bug in the JS syntax highlighter with multiple line tokens.

        https://bugs.webkit.org/show_bug.cgi?id=21171

        Reviewed by Tim Hatcher.

        * page/inspector/SourceFrame.js:
        (syntaxHighlightJavascriptLine): Initialize previousMatchLength.

2008-09-27  Timothy Hatcher  <timothy@apple.com>

        Change searching in the Profiles panel to not match the
        Self and Total columns when there are no units. The only
        column that is matched for unitless number searches is
        now the Calls column.

        https://bugs.webkit.org/show_bug.cgi?id=21169

        Reviewed by Sam Weinig.

        * page/inspector/ProfileView.js:
        (WebInspector.ProfileView.prototype.performSearch):

2008-09-27  David Hyatt  <hyatt@apple.com>

        Rename boundsGeometry -> boundsRect.  Rename geometryChanged -> frameRectsChanged.

        Reviewed by Sam Weinig

        * platform/ScrollView.h:
        * platform/Widget.h:
        (WebCore::Widget::boundsRect):
        (WebCore::Widget::invalidate):
        (WebCore::Widget::frameRectsChanged):
        * platform/gtk/ScrollViewGtk.cpp:
        (WebCore::ScrollViewScrollbar::frameRectsChanged):
        (WebCore::ScrollView::ScrollViewPrivate::scrollBackingStore):
        (WebCore::ScrollView::setFrameRect):
        (WebCore::ScrollView::updateScrollbars):
        (WebCore::ScrollView::frameRectsChanged):
        * platform/gtk/ScrollbarGtk.cpp:
        (ScrollbarGtk::setFrameRect):
        (ScrollbarGtk::frameRectsChanged):
        * platform/gtk/ScrollbarGtk.h:
        * platform/gtk/WidgetGtk.cpp:
        * platform/qt/ScrollViewQt.cpp:
        (WebCore::ScrollView::ScrollViewPrivate::scrollBackingStore):
        (WebCore::ScrollView::setFrameRect):
        (WebCore::ScrollView::frameRectsChanged):
        (WebCore::ScrollView::updateScrollbars):
        * platform/win/ScrollViewWin.cpp:
        (WebCore::ScrollView::ScrollViewPrivate::scrollBackingStore):
        (WebCore::ScrollView::setFrameRect):
        (WebCore::ScrollView::updateScrollbars):
        (WebCore::ScrollView::frameRectsChanged):
        * plugins/PluginView.cpp:
        (WebCore::PluginView::frameRectsChanged):
        * plugins/PluginView.h:

2008-09-27  Simon Hausmann  <hausmann@webkit.org>

        Refix the previous build fix to compile on non-Qt platforms, too.

        * WebCore.pro: Don't pass -i to create_hashtable, added missing -n
        WebCore to generate the PrototypeTable in the WebCore namespace
        * bindings/js/JSEventTargetBase.h: Revert previous fix, the Prototype
        table remains in the Webcore namespace
        (WebCore::JSEventTargetBasePrototype::getOwnPropertySlot):

2008-09-27  Simon Hausmann  <hausmann@webkit.org>

        Fix compilation with gcc 4.3 (probably > 4.0)

        * bindings/js/JSDOMWindowBase.cpp: Don't define static property
        get/put functions inside the WebCore namespace.
        * bindings/js/JSEventTargetBase.cpp: Ditto.
        * bindings/js/JSEventTargetNode.cpp: Ditto.
        * bindings/js/JSEventTargetSVGElementInstance.cpp: Ditto.
        * bindings/js/JSEventTargetBase.h: Forward declare
        JSEventTargetPrototypeTable in the JSC namespace as the lut.h file
        defines it in the JSC namespace.
        (WebCore::JSEventTargetBasePrototype::getOwnPropertySlot): Add JSC::
        prefix for PrototypeTable symbol.

2008-09-27  David Hyatt  <hyatt@apple.com>

        Rename frameGeometry to frameRect.  Rename setFrameGeometry to setFrameRect.

        Reviewed by Dan Bernstein

        * WebCore.base.exp:
        * page/FrameView.cpp:
        (WebCore::FrameView::FrameView):
        (WebCore::FrameView::updateControlTints):
        * platform/ScrollView.h:
        * platform/Scrollbar.cpp:
        (WebCore::Scrollbar::Scrollbar):
        (WebCore::Scrollbar::paint):
        (WebCore::Scrollbar::setFrameRect):
        * platform/Scrollbar.h:
        * platform/ScrollbarThemeComposite.cpp:
        (WebCore::ScrollbarThemeComposite::paint):
        * platform/Widget.h:
        (WebCore::Widget::x):
        (WebCore::Widget::y):
        (WebCore::Widget::width):
        (WebCore::Widget::height):
        (WebCore::Widget::size):
        (WebCore::Widget::pos):
        (WebCore::Widget::resize):
        (WebCore::Widget::move):
        * platform/gtk/ScrollViewGtk.cpp:
        (WebCore::ScrollViewScrollbar::geometryChanged):
        (WebCore::ScrollView::update):
        (WebCore::ScrollView::setFrameRect):
        (WebCore::ScrollView::updateScrollbars):
        (WebCore::ScrollView::scrollbarUnderMouse):
        (WebCore::ScrollView::paint):
        * platform/gtk/ScrollbarGtk.cpp:
        (ScrollbarGtk::setFrameRect):
        (ScrollbarGtk::geometryChanged):
        * platform/gtk/ScrollbarGtk.h:
        * platform/gtk/WidgetGtk.cpp:
        (WebCore::Widget::frameRect):
        (WebCore::Widget::setFrameRect):
        * platform/mac/ScrollbarThemeMac.mm:
        (WebCore::ScrollbarThemeMac::trackRect):
        (WebCore::ScrollbarThemeMac::paint):
        * platform/mac/WidgetMac.mm:
        (WebCore::Widget::frameRect):
        (WebCore::Widget::setFrameRect):
        * platform/qt/ScrollViewQt.cpp:
        (WebCore::ScrollView::setFrameRect):
        (WebCore::ScrollView::updateScrollbars):
        (WebCore::ScrollView::scrollbarUnderMouse):
        (WebCore::ScrollView::paint):
        * platform/qt/ScrollbarThemeQt.cpp:
        (WebCore::styleOptionSlider):
        * platform/qt/WidgetQt.cpp:
        (WebCore::Widget::frameRect):
        (WebCore::Widget::setFrameRect):
        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenu::invalidateItem):
        (WebCore::PopupMenu::valueChanged):
        (WebCore::PopupWndProc):
        * platform/win/ScrollViewWin.cpp:
        (WebCore::ScrollView::setFrameRect):
        (WebCore::ScrollView::updateScrollbars):
        (WebCore::ScrollView::scrollbarUnderMouse):
        (WebCore::ScrollView::paint):
        * platform/win/ScrollbarThemeSafari.cpp:
        (WebCore::ScrollbarThemeSafari::trackRect):
        * platform/win/WidgetWin.cpp:
        (WebCore::Widget::frameRect):
        (WebCore::Widget::setFrameRect):
        * platform/wx/WidgetWx.cpp:
        (WebCore::Widget::frameRect):
        (WebCore::Widget::setFrameRect):
        * plugins/PluginView.cpp:
        (WebCore::PluginView::setFrameRect):
        * plugins/PluginView.h:
        * plugins/gtk/PluginViewGtk.cpp:
        (WebCore::PluginView::updatePluginWidget):
        (WebCore::PluginView::paint):
        (WebCore::PluginView::init):
        * plugins/qt/PluginViewQt.cpp:
        (WebCore::PluginView::updatePluginWidget):
        (WebCore::PluginView::init):
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginView::updatePluginWidget):
        (WebCore::PluginView::paintMissingPluginIcon):
        (WebCore::PluginView::paint):
        (WebCore::PluginView::init):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::positionOverflowControls):
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::paintScrollbar):
        * rendering/RenderPart.cpp:
        (WebCore::RenderPart::updateWidgetPosition):
        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::setWidgetGeometry):
        (WebCore::RenderWidget::updateWidgetPosition):

2008-09-27  David Hyatt  <hyatt@apple.com>

        <rdar://problem/6252041> REGRESSION (4dp-TOT): Crash in Widget::platformWidget() when closing a PDF

        This crash was lurking for a while and basically got exposed by my changes to visibleContentRect() to
        access an actual member variable.

        Reviewed by Dan Bernstein

        * page/FocusController.cpp:
        (WebCore::FocusController::setFocusedFrame):

2008-09-27  Jan Michael Alonzo  <jmalonzo@webkit.org>

        Attempt to fix QT Build. Not reviewed.

        * WebCore.pro: add -n WebCore parameter to create_hash_table

2008-09-26  Gwenole Beauchesne  <gbeauchesne@splitted-desktop.org>

        Reviewed by Eric Seidel.

        http://bugs.webkit.org/show_bug.cgi?id=18905
        [GTK] Fix build with older pango (1.14.8)

        * platform/graphics/gtk/FontGtk.cpp:
        * platform/gtk/Language.cpp:
        (_pango_get_lc_ctype):
        (pango_language_get_default):

2008-09-26  David Hyatt  <hyatt@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=21168

        Make contentsToWindow/windowToContents cross-platform.

        Reviewed by Oliver Hunt

        * platform/ScrollView.cpp:
        (WebCore::ScrollView::windowToContents):
        (WebCore::ScrollView::contentsToWindow):
        * platform/ScrollView.h:
        * platform/gtk/ScrollViewGtk.cpp:
        * platform/mac/ScrollViewMac.mm:
        * platform/qt/ScrollViewQt.cpp:
        * platform/win/ScrollViewWin.cpp:
        * platform/wx/ScrollViewWx.cpp:

2008-09-26  Sam Weinig  <sam@webkit.org>

        GTK build fix.

        * GNUmakefile.am:

2008-09-26  David Hyatt  <hyatt@apple.com>

        Eliminate shouldUpdateWhileOffscreen from ScrollView.  Make the concept of not invalidating while
        offscreen cross-platform.  Rename the inWindow method to isOffscreen (which flips the boolean), since that
        more clearly conveys the intent of the method.  Make isOffscreen also check NSWindow visibility on Mac.

        Reviewed by Oliver Hunt

        * page/FrameView.cpp:
        (WebCore::FrameView::repaintContentRectangle):
        * page/FrameView.h:
        * platform/ScrollView.h:
        * platform/gtk/ScrollViewGtk.cpp:
        (WebCore::ScrollView::isOffscreen):
        * platform/mac/ScrollViewMac.mm:
        (WebCore::ScrollView::updateContents):
        (WebCore::ScrollView::isOffscreen):
        * platform/qt/ScrollViewQt.cpp:
        (WebCore::ScrollView::isOffscreen):
        * platform/win/ScrollViewWin.cpp:
        (WebCore::ScrollView::isOffscreen):
        * platform/wx/ScrollViewWx.cpp:
        (WebCore::ScrollView::isOffscreen):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::willRenderImage):

2008-09-26  David Hyatt  <hyatt@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=21164

        Rework concept of allowsScrolling/setAllowsScrolling to be cross-platform.

        Reviewed by Sam Weinig

        * WebCore.base.exp:
        * page/FrameView.cpp:
        (WebCore::FrameView::setAllowsScrolling):
        * page/FrameView.h:
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::setAllowsScrolling):
        * platform/ScrollView.h:
        (WebCore::ScrollView::allowsScrolling):
        * platform/win/ScrollViewWin.cpp:
        (WebCore::ScrollView::wheelEvent):

2008-09-26  Kevin Ollivier  <kevino@theolliviers.com>

        wx build fixes after Widget/ScrollView changes.

        * platform/wx/PopupMenuWx.cpp:
        (WebCore::PopupMenu::show):
        * platform/wx/ScrollViewWx.cpp:
        (WebCore::ScrollView::platformSetContentsSize):
        (WebCore::ScrollView::platformSetScrollbarModes):
        (WebCore::ScrollView::wheelEvent):
        * platform/wx/TemporaryLinkStubs.cpp:
        * platform/wx/WidgetWx.cpp:
        (WebCore::Widget::containingWindow):

2008-09-26  Timothy Hatcher  <timothy@apple.com>

        Allow searching for paths by always performing the
        three search methods in the Elements panel and not
        assume a search with a "/" is a XPath query.

        https://bugs.webkit.org/show_bug.cgi?id=21159

        Reviewed by Geoff Garen.

        * page/inspector/ElementsPanel.js:
        (WebInspector.ElementsPanel.prototype.performSearch):

2008-09-26  Sam Weinig  <sam@webkit.org>

        Reviewed by Darin Adler.

        Patch for https://bugs.webkit.org/show_bug.cgi?id=21152
        Speedup static property get/put

        * DerivedSources.make:
        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSDOMBinding.cpp:
        * bindings/js/JSDOMBinding.h:
        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::getDOMConstructor):
        (WebCore::jsDOMWindowBaseCrypto):
        (WebCore::jsDOMWindowBaseEvent):
        (WebCore::jsDOMWindowBaseImage):
        (WebCore::jsDOMWindowBaseMessageChannel):
        (WebCore::jsDOMWindowBaseOption):
        (WebCore::jsDOMWindowBaseXMLHttpRequest):
        (WebCore::jsDOMWindowBaseAudio):
        (WebCore::jsDOMWindowBaseXSLTProcessor):
        (WebCore::jsDOMWindowBaseOnabort):
        (WebCore::jsDOMWindowBaseOnblur):
        (WebCore::jsDOMWindowBaseOnchange):
        (WebCore::jsDOMWindowBaseOnclick):
        (WebCore::jsDOMWindowBaseOndblclick):
        (WebCore::jsDOMWindowBaseOnerror):
        (WebCore::jsDOMWindowBaseOnfocus):
        (WebCore::jsDOMWindowBaseOnkeydown):
        (WebCore::jsDOMWindowBaseOnkeypress):
        (WebCore::jsDOMWindowBaseOnkeyup):
        (WebCore::jsDOMWindowBaseOnload):
        (WebCore::jsDOMWindowBaseOnmousedown):
        (WebCore::jsDOMWindowBaseOnmousemove):
        (WebCore::jsDOMWindowBaseOnmouseout):
        (WebCore::jsDOMWindowBaseOnmouseover):
        (WebCore::jsDOMWindowBaseOnmouseup):
        (WebCore::jsDOMWindowBaseOnMouseWheel):
        (WebCore::jsDOMWindowBaseOnreset):
        (WebCore::jsDOMWindowBaseOnresize):
        (WebCore::jsDOMWindowBaseOnscroll):
        (WebCore::jsDOMWindowBaseOnsearch):
        (WebCore::jsDOMWindowBaseOnselect):
        (WebCore::jsDOMWindowBaseOnsubmit):
        (WebCore::jsDOMWindowBaseOnbeforeunload):
        (WebCore::jsDOMWindowBaseOnunload):
        (WebCore::jsDOMWindowBaseOnWebKitAnimationStart):
        (WebCore::jsDOMWindowBaseOnWebKitAnimationIteration):
        (WebCore::jsDOMWindowBaseOnWebKitAnimationEnd):
        (WebCore::jsDOMWindowBaseOnWebKitTransitionEnd):
        (WebCore::JSDOMWindowBase::getOwnPropertySlot):
        (WebCore::JSDOMWindowBase::put):
        (WebCore::setJSDOMWindowBaseOnabort):
        (WebCore::setJSDOMWindowBaseOnblur):
        (WebCore::setJSDOMWindowBaseOnchange):
        (WebCore::setJSDOMWindowBaseOnclick):
        (WebCore::setJSDOMWindowBaseOndblclick):
        (WebCore::setJSDOMWindowBaseOnerror):
        (WebCore::setJSDOMWindowBaseOnfocus):
        (WebCore::setJSDOMWindowBaseOnkeydown):
        (WebCore::setJSDOMWindowBaseOnkeypress):
        (WebCore::setJSDOMWindowBaseOnkeyup):
        (WebCore::setJSDOMWindowBaseOnload):
        (WebCore::setJSDOMWindowBaseOnmousedown):
        (WebCore::setJSDOMWindowBaseOnmousemove):
        (WebCore::setJSDOMWindowBaseOnmouseout):
        (WebCore::setJSDOMWindowBaseOnmouseover):
        (WebCore::setJSDOMWindowBaseOnmouseup):
        (WebCore::setJSDOMWindowBaseOnMouseWheel):
        (WebCore::setJSDOMWindowBaseOnreset):
        (WebCore::setJSDOMWindowBaseOnresize):
        (WebCore::setJSDOMWindowBaseOnscroll):
        (WebCore::setJSDOMWindowBaseOnsearch):
        (WebCore::setJSDOMWindowBaseOnselect):
        (WebCore::setJSDOMWindowBaseOnsubmit):
        (WebCore::setJSDOMWindowBaseOnbeforeunload):
        (WebCore::setJSDOMWindowBaseOnunload):
        (WebCore::setJSDOMWindowBaseOnWebKitAnimationStart):
        (WebCore::setJSDOMWindowBaseOnWebKitAnimationIteration):
        (WebCore::setJSDOMWindowBaseOnWebKitAnimationEnd):
        (WebCore::setJSDOMWindowBaseOnWebKitTransitionEnd):
        (WebCore::setJSDOMWindowBaseEvent):
        (WebCore::setJSDOMWindowBaseAudio):
        (WebCore::setJSDOMWindowBaseImage):
        (WebCore::setJSDOMWindowBaseMessageChannel):
        (WebCore::setJSDOMWindowBaseOption):
        (WebCore::setJSDOMWindowBaseXMLHttpRequest):
        (WebCore::setJSDOMWindowBaseXSLTProcessor):
        * bindings/js/JSDOMWindowBase.h:
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::nonCachingStaticCloseFunctionGetter):
        (WebCore::nonCachingStaticBlurFunctionGetter):
        (WebCore::nonCachingStaticFocusFunctionGetter):
        (WebCore::nonCachingStaticPostMessageFunctionGetter):
        * bindings/js/JSDOMWindowCustom.h:
        (WebCore::JSDOMWindow::customGetOwnPropertySlot):
        * bindings/js/JSEventTargetBase.cpp:
        * bindings/js/JSEventTargetBase.h:
        (WebCore::JSEventTargetBasePrototype::getOwnPropertySlot):
        (WebCore::JSEventTargetBasePrototype::classInfo):
        * bindings/js/JSEventTargetNode.cpp:
        (WebCore::):
        (WebCore::JSEventTargetNode::getOwnPropertySlot):
        (WebCore::JSEventTargetNode::put):
        * bindings/js/JSEventTargetNode.h:
        (WebCore::JSEventTargetNode::classInfo):
        (WebCore::JSEventTargetNode::prototypeClassName):
        * bindings/js/JSEventTargetSVGElementInstance.cpp:
        (WebCore::):
        (WebCore::JSEventTargetSVGElementInstance::getOwnPropertySlot):
        (WebCore::JSEventTargetSVGElementInstance::put):
        * bindings/js/JSEventTargetSVGElementInstance.h:
        (WebCore::JSEventTargetSVGElementInstance::classInfo):
        (WebCore::JSEventTargetSVGElementInstance::prototypeClassName):
        * bindings/js/JSHTMLInputElementCustom.cpp:
        (WebCore::JSHTMLInputElement::customGetOwnPropertySlot):
        * bindings/js/JSHistoryCustom.cpp:
        (WebCore::nonCachingStaticBackFunctionGetter):
        (WebCore::nonCachingStaticForwardFunctionGetter):
        (WebCore::nonCachingStaticGoFunctionGetter):
        (WebCore::JSHistory::customGetOwnPropertySlot):
        * bindings/js/JSLocationCustom.cpp:
        (WebCore::nonCachingStaticReplaceFunctionGetter):
        (WebCore::nonCachingStaticReloadFunctionGetter):
        (WebCore::nonCachingStaticAssignFunctionGetter):
        (WebCore::JSLocation::customGetOwnPropertySlot):
        (WebCore::JSLocation::customPut):
        * bindings/scripts/CodeGeneratorJS.pm:

2008-09-26  David Hyatt  <hyatt@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=21149

        Make the concept of scroll modes cross-platform.  Move the scrollbars up into ScrollView as well.
        Eliminate the unused isScrollable() method.

        Reviewed by Sam Weinig

        * WebCore.base.exp:
        * page/FrameView.cpp:
        (WebCore::FrameView::resetScrollbars):
        (WebCore::FrameView::initScrollbars):
        (WebCore::FrameView::layout):
        * page/FrameView.h:
        * page/mac/WebCoreFrameView.h:
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::init):
        (WebCore::ScrollView::setScrollbarModes):
        (WebCore::ScrollView::scrollbarModes):
        (WebCore::ScrollView::platformSetScrollbarModes):
        (WebCore::ScrollView::platformScrollbarModes):
        * platform/ScrollView.h:
        (WebCore::ScrollView::horizontalScrollbar):
        (WebCore::ScrollView::verticalScrollbar):
        (WebCore::ScrollView::isScrollViewScrollbar):
        (WebCore::ScrollView::setHorizontalScrollbarMode):
        (WebCore::ScrollView::setVerticalScrollbarMode):
        (WebCore::ScrollView::horizontalScrollbarMode):
        (WebCore::ScrollView::verticalScrollbarMode):
        (WebCore::ScrollView::convertSelfToChild):
        * platform/gtk/ScrollViewGtk.cpp:
        (WebCore::ScrollView::ScrollViewPrivate::ScrollViewPrivate):
        (WebCore::ScrollView::ScrollViewPrivate::setHasHorizontalScrollbar):
        (WebCore::ScrollView::ScrollViewPrivate::setHasVerticalScrollbar):
        (WebCore::ScrollView::ScrollViewPrivate::valueChanged):
        (WebCore::ScrollView::updateScrollbars):
        (WebCore::ScrollView::scrollbarUnderMouse):
        (WebCore::ScrollView::isScrollViewScrollbar):
        (WebCore::ScrollView::paint):
        (WebCore::ScrollView::scroll):
        * platform/mac/ScrollViewMac.mm:
        (WebCore::ScrollView::platformSetScrollbarModes):
        (WebCore::ScrollView::platformScrollbarModes):
        * platform/qt/ScrollViewQt.cpp:
        (WebCore::ScrollView::ScrollViewPrivate::setHasHorizontalScrollbar):
        (WebCore::ScrollView::ScrollViewPrivate::setHasVerticalScrollbar):
        (WebCore::ScrollView::ScrollViewPrivate::valueChanged):
        (WebCore::ScrollView::horizontalScrollbar):
        (WebCore::ScrollView::verticalScrollbar):
        (WebCore::ScrollView::invalidateScrollbars):
        (WebCore::ScrollView::updateScrollbars):
        (WebCore::ScrollView::scrollbarUnderMouse):
        (WebCore::ScrollView::paint):
        (WebCore::ScrollView::scroll):
        * platform/win/ScrollViewWin.cpp:
        (WebCore::ScrollView::ScrollViewPrivate::ScrollViewPrivate):
        (WebCore::ScrollView::ScrollViewPrivate::setHasHorizontalScrollbar):
        (WebCore::ScrollView::ScrollViewPrivate::setHasVerticalScrollbar):
        (WebCore::ScrollView::ScrollViewPrivate::valueChanged):
        (WebCore::ScrollView::ScrollViewPrivate::setAllowsScrolling):
        (WebCore::ScrollView::ScrollViewPrivate::allowsScrolling):
        (WebCore::ScrollView::suppressScrollbars):
        (WebCore::ScrollView::updateScrollbars):
        (WebCore::ScrollView::scrollbarUnderMouse):
        (WebCore::ScrollView::paint):
        (WebCore::ScrollView::scroll):
        * platform/wx/ScrollViewWx.cpp:
        (WebCore::ScrollView::platformSetScrollbarModes):
        (WebCore::ScrollView::platformScrollbarModes):

2008-09-26  David Kilzer  <ddkilzer@apple.com>

        Fix Mac build with XPATH and XSLT disabled

        Reviewed by Alexey.

        * bindings/objc/DOMUtility.mm:
        (JSC::createDOMWrapper): Conditionalize code with ENABLE(XPATH).
        * dom/XMLTokenizerLibxml2.cpp:
        (WebCore::errorFunc): Conditionalize method with ENABLE(XSLT) to
        prevent an unused code warning.

2008-09-26  Kevin McCullough  <kmccullough@apple.com>

        Rubber stamped by Tim Hatcher.

        Bug 21098: Crashing under Console::log
        - Speculative ASSERT to help find the problem.

        * page/InspectorController.cpp:
        (WebCore::ConsoleMessage::isEqual):

2008-09-26  Holger Hans Peter Freyther  <zecke@selfish.org>

        [gtk+] Build fix for the latest ScrollView changes

        * platform/gtk/ScrollViewGtk.cpp:
        (WebCore::ScrollView::ScrollViewPrivate::adjustmentChanged):
        (WebCore::ScrollView::ScrollViewPrivate::valueChanged):

2008-09-26  Timothy Hatcher  <timothy@apple.com>

        Fixes a bug where the console message repeat count would be wrong
        when typing commands in between repeated messages.

        https://bugs.webkit.org/show_bug.cgi?id=21145

        Reviewed by Kevin McCullough.

        * page/InspectorController.cpp:
        (WebCore::InspectorController::clearConsoleMessages): Reset m_groupLevel.
        (WebCore::InspectorController::didCommitLoad): Call clearConsoleMessages.
        * page/inspector/Console.js:
        (WebInspector.Console.prototype.addMessage): Remember the original repeat count
        for each message as totalRepeatCount, since we now modify repeatCount to mean
        repeats since previous console command. If repeatCountBeforeCommand is a number,
        subtract that value from the repeatCount.
        (WebInspector.Console.prototype.clearMessages): Delete the repeatCountBeforeCommand
        and commandSincePreviousMessage properties.

2008-09-26  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Antti

        https://bugs.webkit.org/show_bug.cgi?id=21116
        <rdar://problem/5726325> Audio from <video> can still be heard after navigating
        back to page with <video>, then closing tab

        Rename willSaveToCache/didRestoreFromCache callbacks to documentWillBecomeInactive/
        documentDidBecomeActive, and post documentWillBecomeInactive when a page is marked for
        deletion.

        * dom/Document.cpp:
        (WebCore::Document::documentWillBecomeInactive):
        (WebCore::Document::documentDidBecomeActive):
        (WebCore::Document::registerForDocumentActivationCallbacks):
        (WebCore::Document::unregisterForDocumentActivationCallbacks):
        * dom/Document.h:
        * dom/Element.h:
        (WebCore::Element::documentWillBecomeInactive):
        (WebCore::Element::documentDidBecomeActive):
        * history/CachedPage.cpp:
        (WebCore::CachedPage::CachedPage):
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::~HTMLFormElement):
        (WebCore::HTMLFormElement::parseMappedAttribute):
        (WebCore::HTMLFormElement::documentDidBecomeActive):
        (WebCore::HTMLFormElement::willMoveToNewOwnerDocument):
        (WebCore::HTMLFormElement::didMoveToNewOwnerDocument):
        * html/HTMLFormElement.h:
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::~HTMLInputElement):
        (WebCore::HTMLInputElement::setInputType):
        (WebCore::HTMLInputElement::parseMappedAttribute):
        (WebCore::HTMLInputElement::needsActivationCallback):
        (WebCore::HTMLInputElement::registerForActivationCallbackIfNeeded):
        (WebCore::HTMLInputElement::unregisterForActivationCallbackIfNeeded):
        (WebCore::HTMLInputElement::documentDidBecomeActive):
        (WebCore::HTMLInputElement::willMoveToNewOwnerDocument):
        (WebCore::HTMLInputElement::didMoveToNewOwnerDocument):
        * html/HTMLInputElement.h:
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::HTMLMediaElement):
        (WebCore::HTMLMediaElement::~HTMLMediaElement):
        (WebCore::HTMLMediaElement::documentWillBecomeInactive):
        (WebCore::HTMLMediaElement::documentDidBecomeActive):
        * html/HTMLMediaElement.h:
        (WebCore::HTMLMediaElement::inActiveDocument):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::opened):
        * page/Page.cpp:
        (WebCore::Page::~Page):
        * rendering/RenderMedia.cpp:
        (WebCore::RenderMedia::updateControls):
        * rendering/RenderVideo.cpp:
        (WebCore::RenderVideo::updatePlayer):
        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::SVGSVGElement):
        (WebCore::SVGSVGElement::~SVGSVGElement):
        (WebCore::SVGSVGElement::documentWillBecomeInactive):
        (WebCore::SVGSVGElement::documentDidBecomeActive):
        * svg/SVGSVGElement.h:

2008-09-26  Ariya Hidayat  <ariya.hidayat@trolltech.com>

        Reviewed by Simon

        Fix the build inside Qt, don't create faulty prl files for now.

        * WebCore.pro:

2008-09-26  Simon Hausmann  <hausmann@webkit.org>

        Fix compilation on Qt/Windows

        * Add WebCore/ to the include path so that config.h is found that enables JSC
        * Link against winmm for the multimedia timer functions
        * Include DateMath.h instead of JavaScriptCore/DateMath.h as file is in the kjs/
        subdirectory
        * In PluginViewWin.cpp don't use setPlatformWidget with the HWND for the Qt/Windows port
        but set m_window directly as setPlatformWidget takes a QWidget*.

        * WebCore.pro:
        * platform/win/SystemTimeWin.cpp:
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginView::init):

2008-09-26  Oliver Hunt  <oliver@apple.com>

        Reviewed by Maciej Stachowiak.

        Bug 21054: Construction of certain DOM objects is heavily regressed by r36675
        <https://bugs.webkit.org/show_bug.cgi?id=21054>

        This performance regression is actually just a symptom of a correctness
        bug.  The constructor objects for a number of properties that have security
        checks on access were returning new objects each time.  The most obvious
        symptom of this bug is that window.Image != window.Image, etc.

        The solution to this is to make sure we cache these constructors
        in the same way as all the other DOM constructors.  To achieve this
        without causing any refcount cycles it is necessary to replace the
        refcounted document pointer in the Image, MessageChannel, Option,
        XMLHttpRequest, and Audio constructor objects with a reference to
        the document's JS wrapper.

        Tests: fast/dom/constructors-cached-navigate.html
               fast/dom/constructors-cached.html

        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSAudioConstructor.cpp:
        (WebCore::JSAudioConstructor::mark):
        * bindings/js/JSAudioConstructor.h:
        (WebCore::JSAudioConstructor::document):
        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::getDOMConstructor):
        (WebCore::JSDOMWindowBase::getValueProperty):
        * bindings/js/JSDOMWindowBase.h:
        * bindings/js/JSHTMLOptionElementConstructor.cpp:
        (WebCore::JSHTMLOptionElementConstructor::mark):
        * bindings/js/JSHTMLOptionElementConstructor.h:
        (WebCore::JSHTMLOptionElementConstructor::document):
        * bindings/js/JSImageConstructor.cpp:
        (WebCore::JSImageConstructor::mark):
        * bindings/js/JSImageConstructor.h:
        (WebCore::JSImageConstructor::document):
        * bindings/js/JSXMLHttpRequestConstructor.cpp:
        (WebCore::JSXMLHttpRequestConstructor::mark):
        * bindings/js/JSXMLHttpRequestConstructor.h:
        (WebCore::JSXMLHttpRequestConstructor::document):

2008-09-26  Simon Hausmann  <hausmann@webkit.org>

        Unreviewed one-liner build fix for the Qt/Windows build.

        The build requires NPAPI support to be enabled, fix the condition in
        the .pro file for that.

        * WebCore.pro:

2008-09-26  Trenton Schulz <twschulz@trolltech.com>

        Reviewed by Simon.

        Fix compilation with the Qt/Cocoa port.

        * platform/qt/ScrollViewQt.cpp:
        (WebCore::ScrollView::updateScrollbars):

2008-09-26  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Holger.

        Fix compilation with VC9SP1, work around bug in TR1 library by
        disabling it.

        * WebCore.pro:

2008-09-26  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Holger.

        Fix an lupdate() warning.

        Don't use tr() in a class that is not a QObject, use
        QCoreApplication::translate() directly.

        * platform/qt/ScrollbarQt.cpp:
        (WebCore::Scrollbar::handleContextMenuEvent):

2008-09-25  David Hyatt  <hyatt@apple.com>

        Remove the scrollTo() method from FrameView, since it is not used by anyone.

        Reviewed by Oliver Hunt

        * page/FrameView.cpp:
        * page/FrameView.h:

2008-09-25  David Hyatt  <hyatt@apple.com>

        Make scrollRectIntoViewRecursively cross-platform.

        Reviewed by Oliver Hunt

        * platform/ScrollView.cpp:
        (WebCore::ScrollView::scrollRectIntoViewRecursively):
        * platform/gtk/ScrollViewGtk.cpp:
        * platform/mac/ScrollViewMac.mm:
        * platform/qt/ScrollViewQt.cpp:
        * platform/win/ScrollViewWin.cpp:
        * platform/wx/ScrollViewWx.cpp:

2008-09-25  David Hyatt  <hyatt@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=21133

        Rename resizeContents method on ScrollView to setContentsSize (to match contentsSize()).  Make it
        cross-platform.

        Reviewed by Oliver Hunt

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::begin):
        * page/FrameView.cpp:
        (WebCore::FrameView::adjustViewSize):
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::setContentsSize):
        * platform/ScrollView.h:
        (WebCore::ScrollView::updateScrollbars):
        * platform/gtk/ScrollViewGtk.cpp:
        * platform/mac/ScrollViewMac.mm:
        (WebCore::ScrollView::platformSetContentsSize):
        * platform/qt/ScrollViewQt.cpp:
        * platform/win/ScrollViewWin.cpp:
        * platform/wx/ScrollViewWx.cpp:
        (WebCore::ScrollView::platformSetContentsSize):

2008-09-25  David Hyatt  <hyatt@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=21132

        Clean up the methods that actually do the scrolling in ScrollView.

        Reviewed by Oliver Hunt

        * html/HTMLBodyElement.cpp:
        (WebCore::HTMLBodyElement::setScrollLeft):
        (WebCore::HTMLBodyElement::setScrollTop):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::restoreScrollPositionAndViewState):
        * loader/ImageDocument.cpp:
        (WebCore::ImageDocument::imageClicked):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::scrollBy):
        (WebCore::DOMWindow::scrollTo):
        * page/FrameView.cpp:
        (WebCore::FrameView::scrollTo):
        (WebCore::FrameView::setScrollPosition):
        * page/FrameView.h:
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::maximumScrollPosition):
        * platform/ScrollView.h:
        (WebCore::ScrollView::contentsWidth):
        (WebCore::ScrollView::contentsHeight):
        (WebCore::ScrollView::scrollBy):
        * platform/gtk/ScrollViewGtk.cpp:
        (WebCore::ScrollView::setScrollPosition):
        * platform/mac/ScrollViewMac.mm:
        (WebCore::ScrollView::setScrollPosition):
        * platform/qt/ScrollViewQt.cpp:
        (WebCore::ScrollView::setScrollPosition):
        (WebCore::ScrollView::scrollRectIntoViewRecursively):
        * platform/win/ScrollViewWin.cpp:
        (WebCore::ScrollView::setScrollPosition):
        (WebCore::ScrollView::scrollRectIntoViewRecursively):
        * platform/wx/ScrollViewWx.cpp:
        (WebCore::ScrollView::setScrollPosition):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::scrollByRecursively):
        (WebCore::RenderLayer::scrollRectToVisible):

2008-09-25  Dan Bernstein  <mitz@apple.com>

        - attempted Windows build fix

        * platform/win/ScrollViewWin.cpp:
        (WebCore::ScrollView::ScrollViewPrivate::valueChanged):
        (WebCore::ScrollView::setContentsPos):
        (WebCore::ScrollView::paint):

2008-09-25  Timothy Hatcher  <timothy@apple.com>

        Revert the padding changes done in r36905 to prevent the
        scrollbar from overlapping the URLs in the Console.

        https://bugs.webkit.org/show_bug.cgi?id=21126

        * page/inspector/inspector.css:

2008-09-25  David Hyatt  <hyatt@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=21129

        Refactor contents size and scroll offset to be cross-platform.  Reduce further the number
        of platform-specific methods required of ScrollView implementations.

        Reviewed by Tim Hatcher

        * dom/MouseRelatedEvent.cpp:
        (WebCore::contentsX):
        (WebCore::contentsY):
        * html/HTMLBodyElement.cpp:
        (WebCore::HTMLBodyElement::scrollLeft):
        (WebCore::HTMLBodyElement::setScrollLeft):
        (WebCore::HTMLBodyElement::scrollTop):
        (WebCore::HTMLBodyElement::setScrollTop):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::saveScrollPositionAndViewStateToItem):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::scrollX):
        (WebCore::DOMWindow::scrollY):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::hitTestResultAtPoint):
        * page/FrameView.cpp:
        (WebCore::FrameView::scrollTo):
        (WebCore::FrameView::windowClipRect):
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::visibleContentRect):
        (WebCore::ScrollView::contentsSize):
        (WebCore::ScrollView::platformContentsSize):
        * platform/ScrollView.h:
        (WebCore::ScrollView::scrollPosition):
        (WebCore::ScrollView::scrollOffset):
        (WebCore::ScrollView::scrollX):
        (WebCore::ScrollView::scrollY):
        (WebCore::ScrollView::contentsWidth):
        (WebCore::ScrollView::contentsHeight):
        * platform/gtk/ScrollViewGtk.cpp:
        (WebCore::ScrollView::ScrollViewPrivate::adjustmentChanged):
        (WebCore::ScrollView::setGtkAdjustments):
        (WebCore::ScrollView::resizeContents):
        (WebCore::ScrollView::contentsWidth):
        (WebCore::ScrollView::contentsHeight):
        (WebCore::ScrollView::scrollOffset):
        (WebCore::ScrollView::maximumScroll):
        (WebCore::ScrollView::scrollBy):
        (WebCore::ScrollView::suppressScrollbars):
        (WebCore::ScrollView::setHScrollbarMode):
        (WebCore::ScrollView::setVScrollbarMode):
        (WebCore::ScrollView::setScrollbarsMode):
        (WebCore::ScrollView::setFrameGeometry):
        (WebCore::ScrollView::updateScrollbars):
        * platform/mac/ScrollViewMac.mm:
        (WebCore::ScrollView::platformContentsSize):
        (WebCore::ScrollView::scrollBy):
        * platform/mac/WidgetMac.mm:
        (WebCore::Widget::convertFromContainingWindow):
        (WebCore::Widget::convertToContainingWindow):
        * platform/qt/ScrollViewQt.cpp:
        (WebCore::ScrollView::ScrollViewPrivate::valueChanged):
        (WebCore::ScrollView::resizeContents):
        (WebCore::ScrollView::setFrameGeometry):
        (WebCore::ScrollView::scrollOffset):
        (WebCore::ScrollView::maximumScroll):
        (WebCore::ScrollView::scrollBy):
        (WebCore::ScrollView::setHScrollbarMode):
        (WebCore::ScrollView::setVScrollbarMode):
        (WebCore::ScrollView::setScrollbarsMode):
        (WebCore::ScrollView::updateScrollbars):
        * platform/win/ScrollViewWin.cpp:
        (WebCore::ScrollView::ScrollViewPrivate::valueChanged):
        (WebCore::ScrollView::ScrollViewPrivate::setAllowsScrolling):
        (WebCore::ScrollView::resizeContents):
        (WebCore::ScrollView::setFrameGeometry):
        (WebCore::ScrollView::scrollOffset):
        (WebCore::ScrollView::maximumScroll):
        (WebCore::ScrollView::scrollBy):
        (WebCore::ScrollView::setHScrollbarMode):
        (WebCore::ScrollView::setVScrollbarMode):
        (WebCore::ScrollView::setScrollbarsMode):
        (WebCore::ScrollView::updateScrollbars):
        * platform/wx/ScrollViewWx.cpp:
        (WebCore::ScrollView::platformVisibleContentRect):
        (WebCore::ScrollView::platformContentsSize):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::nodeAtPoint):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::scrollRectToVisible):
        (WebCore::RenderLayer::calculateClipRects):
        (WebCore::RenderLayer::calculateRects):
        * rendering/RenderView.cpp:
        (WebCore::RenderView::absolutePosition):
        (WebCore::RenderView::computeAbsoluteRepaintRect):

2008-09-25  David Smith  <catfish.man@gmail.com>

        Reviewed by Dave Hyatt.

        Fix a nasty regression I introduced in the previous commit, which caused infinite recursion on facebook.

        * dom/Element.cpp:
        (WebCore::Element::rareData):
        * dom/Element.h:
        * dom/Node.cpp:
        (WebCore::Node::rareData):
        * dom/Node.h:

2008-09-25  David Smith  <catfish.man@gmail.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=20980
        Split off uncommonly used data from Node similar to ElementRareData

        Saves an OwnPtr and a short on Node, as well as providing room for an isContainer bit,
        which in turn allows inlining firstChild(), lastChild(), childNodeCount(), and childNode()
        for a 5-10+% performance win on SlickSpeed and assorted speedups on other tests.

        * WebCore.base.exp:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/ChildNodeList.cpp: Include ContainerNode to pick up its definitions for childNodeCount(), etc...
        * dom/ContainerNode.cpp: Set isContainer to true
        (WebCore::ContainerNode::ContainerNode):
        * dom/ContainerNode.h: These Node inlines are here to avoid including ContainerNode.h in Node.h
        (WebCore::Node::containerChildNodeCount): Use ContainerNode's definition, having proved that the Node is a container
        (WebCore::Node::containerChildNode): ditto
        (WebCore::Node::containerFirstChild): ditto
        (WebCore::Node::containerLastChild): ditto
        * dom/Element.cpp: Most of the changes here are moving ElementRareData to ElementRareData.h and NodeRareData.h
        (WebCore::Element::Element):
        (WebCore::Element::~Element):
        (WebCore::Element::rareData):
        (WebCore::Element::ensureRareData): Renamed from createRareData
        (WebCore::Element::createRareData): Used by ensureRareData to get the correct rareData type
        (WebCore::Element::attach): Check hasRareData rather than null-checking rareData()
        (WebCore::Element::detach): ditto
        (WebCore::Element::recalcStyle): ditto
        (WebCore::Element::focus):
        (WebCore::Element::minimumSizeForResizing): ditto
        (WebCore::Element::setMinimumSizeForResizing): ditto
        (WebCore::Element::computedStyle):
        (WebCore::Element::cancelFocusAppearanceUpdate): ditto
        * dom/Element.h:
        * dom/ElementRareData.h: Added; everything copied from Element.cpp
        (WebCore::defaultMinimumSizeForResizing):
        (WebCore::ElementRareData::ElementRareData):
        (WebCore::ElementRareData::resetComputedStyle):
        * dom/EventTargetNode.cpp:
        (WebCore::EventTargetNode::EventTargetNode): Pass the isContainer flag up the chain
        * dom/EventTargetNode.h:
        * dom/Node.cpp:
        (WebCore::Node::Node):
        (WebCore::Node::~Node): rareData cleanup code moved from Element and changed to use hasRareData
        (WebCore::Node::rareData):
        (WebCore::Node::ensureRareData):
        (WebCore::Node::createRareData):
        (WebCore::Node::tabIndex): nonzero tab indexes are now in rareData
        (WebCore::Node::setTabIndexExplicitly):
        (WebCore::Node::childNodes): NodeLists are now in rareData
        (WebCore::Node::setFocus):
        (WebCore::Node::rareDataFocused):
        (WebCore::Node::isFocusable):
        (WebCore::Node::isKeyboardFocusable):
        (WebCore::Node::registerDynamicNodeList): NodeLists are now in rareData
        (WebCore::Node::unregisterDynamicNodeList): ditto
        (WebCore::Node::notifyLocalNodeListsAttributeChanged): ditto
        (WebCore::Node::notifyLocalNodeListsChildrenChanged): ditto
        (WebCore::Node::getElementsByName): ditto
        (WebCore::Node::getElementsByClassName): ditto
        * dom/Node.h:
        (WebCore::Node::firstChild): Use isContainerNode() to devirtualize
        (WebCore::Node::lastChild): ditto
        (WebCore::Node::isContainerNode): Take advantage of a newly freed bit to store whether we're a container
        (WebCore::Node::focused): focus is in rareData if set
        (WebCore::Node::childTypeAllowed):
        (WebCore::Node::childNodeCount): Use isContainerNode() to devirtualize
        (WebCore::Node::childNode): ditto
        (WebCore::Node::hasRareData): Use another newly freed bit to store whether we have rare data; avoids doing hash lookups in the common case
        * dom/NodeRareData.h: Added. Most of this is just properties moved from Node
        (WebCore::NodeListsNodeData::~NodeListsNodeData): Moved from Node.cpp since we NodeRareData needs to put them in a HashTable :(
        (WebCore::NodeRareData::NodeRareData):
        (WebCore::NodeRareData::rareDataMap):
        (WebCore::NodeRareData::rareDataFromMap):
        (WebCore::NodeRareData::clearNodeLists):
        (WebCore::NodeRareData::setNodeLists):
        (WebCore::NodeRareData::nodeLists):
        (WebCore::NodeRareData::tabIndex):
        (WebCore::NodeRareData::setTabIndex):
        (WebCore::NodeRareData::tabIndexSetExplicitly):
        * dom/TreeWalker.cpp: Include ContainerNode to pick up its definitions for childNodeCount(), etc...
        * xml/XPathUtil.cpp: Include ContainerNode to pick up its definitions for childNodeCount(), etc...

2008-09-25  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Simon Hausmann.

        [qt] ImageBuffer::toDataURL implementation

        There needs to be a Qt specific test result for the above mentioned
        implementation.

        * platform/graphics/qt/ImageBufferQt.cpp:
        (WebCore::ImageBuffer::toDataURL):

2008-09-25  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Simon Hausmann.

        [qt] Implement SharedBuffer for Qt.

        * WebCore.pro:
        * platform/qt/SharedBufferQt.cpp: Added.
        (WebCore::SharedBuffer::createWithContentsOfFile):
        * platform/qt/TemporaryLinkStubs.cpp:

2008-09-25  Feng Qian <feng@chromium.org>

        Fix bug: https://bugs.webkit.org/show_bug.cgi?id=21032
        <rdar://problem/6243032>

        Reviewed by Dave Hyatt.

        Test: fast/dom/attribute-downcast-right.html

        Add isMappedAttribute function to Attribute for checking if an object
        is an instance of MappedAttribute. Removed attributeItem,
        getAttributeItem functions from NamedMappedAttrMap, and callers
        expecting MappedAttribute have to check isMappedAttribute before
        downcasting the return value to MappedAttribute.

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::styleForElement):
        * dom/Attribute.h:
        (WebCore::Attribute::isMappedAttribute):
        * dom/MappedAttribute.h:
        (WebCore::MappedAttribute::isMappedAttribute):
        * dom/NamedMappedAttrMap.cpp:
        (WebCore::NamedMappedAttrMap::declCount):
        (WebCore::NamedMappedAttrMap::mapsEquivalent):
        * dom/NamedMappedAttrMap.h:
        * dom/StyledElement.cpp:
        (WebCore::StyledElement::attributeChanged):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::setInputType):
        * svg/SVGForeignObjectElement.cpp:
        (WebCore::addCSSPropertyAndNotifyAttributeMap):
        * svg/SVGStyledElement.cpp:
        (WebCore::SVGStyledElement::getPresentationAttribute):

2008-09-25  David Hyatt  <hyatt@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=21120

        Make visibleContentRect cross-platform.  Note this does add new horizontal/verticalScrollbar accessors
        to a bunch of platforms.  This is a temporary evil until the scrollbars get made cross-platform (and I
        didn't want to mix that change in with this patch).

        Reviewed by Sam Weinig

        * page/Frame.cpp:
        (WebCore::Frame::markAllMatchesForText):
        * page/FrameView.cpp:
        (WebCore::FrameView::repaintContentRectangle):
        (WebCore::FrameView::windowClipRect):
        (WebCore::FrameView::updateControlTints):
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::visibleContentRect):
        (WebCore::ScrollView::platformVisibleContentRect):
        * platform/ScrollView.h:
        (WebCore::ScrollView::visibleWidth):
        (WebCore::ScrollView::visibleHeight):
        * platform/gtk/ScrollViewGtk.cpp:
        (WebCore::ScrollView::horizontalScrollbar):
        (WebCore::ScrollView::verticalScrollbar):
        * platform/mac/ScrollViewMac.mm:
        (WebCore::ScrollView::horizontalScrollbar):
        (WebCore::ScrollView::verticalScrollbar):
        (WebCore::ScrollView::platformVisibleContentRect):
        * platform/qt/ScrollViewQt.cpp:
        (WebCore::ScrollView::horizontalScrollbar):
        (WebCore::ScrollView::verticalScrollbar):
        * platform/win/ScrollViewWin.cpp:
        (WebCore::ScrollView::horizontalScrollbar):
        (WebCore::ScrollView::verticalScrollbar):
        * platform/wx/ScrollViewWx.cpp:
        (WebCore::ScrollView::platformVisibleContentRect):
        (WebCore::ScrollView::horizontalScrollbar):
        (WebCore::ScrollView::verticalScrollbar):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::scrollRectToVisible):
        (WebCore::frameVisibleRect):
        * rendering/RenderView.cpp:
        (WebCore::RenderView::viewRect):

2008-09-25  David Smith  <catfish.man@gmail.com>

        Reviewed by Timothy Hatcher

        https://bugs.webkit.org/show_bug.cgi?id=21052
        Generalize id selector special case for querySelectorAll

        By checking the element we get with getElementById against the selector, we can use the special case in many more circumstances.
        Changes results on http://native.khan.mozilla.org
        from
            #title: 2ms
            h1#title: 55ms
            div #title: 55ms

        to:
            #title: 1ms
            h1#title: 2ms
            div #title: 5ms

        * dom/Node.cpp:
        (WebCore::Node::querySelector):
        * dom/SelectorNodeList.cpp:
        (WebCore::createSelectorNodeList):

2008-09-25  David Hyatt  <hyatt@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=21118

        Make the concept of whether you can blit on scroll cross-platform on ScrollView.

        Reviewed by Sam Weinig

        * page/FrameView.cpp:
        (WebCore::FrameView::clear):
        (WebCore::FrameView::layout):
        (WebCore::FrameView::setUseSlowRepaints):
        (WebCore::FrameView::addSlowRepaintObject):
        (WebCore::FrameView::removeSlowRepaintObject):
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::init):
        (WebCore::ScrollView::addChild):
        (WebCore::ScrollView::removeChild):
        (WebCore::ScrollView::setCanBlitOnScroll):
        * platform/ScrollView.h:
        (WebCore::ScrollView::canBlitOnScroll):
        * platform/gtk/ScrollViewGtk.cpp:
        (WebCore::ScrollView::ScrollViewPrivate::ScrollViewPrivate):
        (WebCore::ScrollView::ScrollViewPrivate::scrollBackingStore):
        (WebCore::ScrollView::ScrollView):
        * platform/mac/ScrollViewMac.mm:
        (WebCore::ScrollView::ScrollView):
        (WebCore::ScrollView::platformAddChild):
        (WebCore::ScrollView::platformRemoveChild):
        (WebCore::ScrollView::platformSetCanBlitOnScroll):
        * platform/qt/ScrollViewQt.cpp:
        (WebCore::ScrollView::ScrollViewPrivate::ScrollViewPrivate):
        (WebCore::ScrollView::ScrollViewPrivate::scrollBackingStore):
        (WebCore::ScrollView::ScrollView):
        * platform/win/ScrollViewWin.cpp:
        (WebCore::ScrollView::ScrollViewPrivate::ScrollViewPrivate):
        (WebCore::ScrollView::ScrollViewPrivate::scrollBackingStore):
        (WebCore::ScrollView::ScrollView):
        * platform/wx/ScrollViewWx.cpp:
        (WebCore::ScrollView::ScrollViewPrivate::ScrollViewPrivate):
        (WebCore::ScrollView::ScrollView):
        (WebCore::ScrollView::scrollBy):

2008-09-25  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Tim Hatcher.

        Bug 21109: Console should right-align urls

        * page/inspector/Console.js: Re-order the message elements so that when
        it overflows it doesn't get mixed in with the next message.
        * page/inspector/inspector.css:

2008-09-25  David Hyatt  <hyatt@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=21113

        Putting r36771 back in with a fix to the addPendingSheet check in CSSImportRule::insertedIntoParent.

        Reviewed by Darin Adler

        * css/CSSImportRule.cpp:
        (WebCore::CSSImportRule::insertedIntoParent):
        * css/CSSRule.cpp:
        (WebCore::CSSRule::parentStyleSheet):
        (WebCore::CSSRule::parentRule):
        * css/CSSStyleSheet.cpp:
        (WebCore::CSSStyleSheet::CSSStyleSheet):
        * css/CSSStyleSheet.h:

2008-09-25  Darin Adler  <darin@apple.com>

        Reviewed by Adele Peterson.

        - fix https://bugs.webkit.org/show_bug.cgi?id=21115
          <rdar://problem/6245773> REGRESSION (r34702): Safari no longer zips
          bundled documents

        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::formData): Use files() instead of value()
        to get the path, since value() now returns just the basename.

2008-09-25  Brady Eidson  <beidson@apple.com>

        Rubberstamped by Mark Rowe

        Roll out 36771 as it caused <rdar://problem/6246554>
        "nytimes.com doesn't display after returning to it with back/forward"

        * css/CSSImportRule.cpp:
        (WebCore::CSSImportRule::insertedIntoParent):
        * css/CSSRule.cpp:
        (WebCore::CSSRule::parentStyleSheet):
        (WebCore::CSSRule::parentRule):
        * css/CSSStyleSheet.cpp:
        (WebCore::CSSStyleSheet::CSSStyleSheet):
        (WebCore::CSSStyleSheet::docLoader):
        * css/CSSStyleSheet.h:
        (WebCore::CSSStyleSheet::doc):

2008-09-25  Adam Roben  <aroben@apple.com>

        Windows build fix

        * WebCore.vcproj/WebCore.vcproj: Add ScrollView.cpp to the project.

2008-09-25  Dan Bernstein  <mitz@apple.com>

        - Windows build fix

        * platform/win/ScrollViewWin.cpp:
        (WebCore::ScrollView::addChildPlatformWidget):
        (WebCore::ScrollView::removeChildPlatformWidget):

2008-09-25  Timothy Hatcher  <timothy@apple.com>

        Fixes a leak of ConsoleMessage seen when repeated console
        messages occur.

        Reviewed by Mark Rowe.

        * page/InspectorController.cpp:
        (WebCore::InspectorController::addConsoleMessage): Delete the repeat
        since we don't add it to m_consoleMessages.

2008-09-25  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Dan Bernstein.

        Bug 21105: XHRs logged in the console may show the wrong URL for the
        source
        - Get the url at the time of the send() and pass it on to the XHR.

        * bindings/js/JSXMLHttpRequestCustom.cpp:
        (WebCore::JSXMLHttpRequest::send):
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::didFinishLoading):
        * xml/XMLHttpRequest.h:
        (WebCore::XMLHttpRequest::setLastSendURL):

2008-09-25  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Geoff and Tim.

        Bug 20322: XHRs logged in the console do not have line numbers
        - Get the line number at the time of the send and pass it on to the XHR.

        * bindings/js/JSXMLHttpRequestCustom.cpp:
        (WebCore::JSXMLHttpRequest::send):
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::XMLHttpRequest):
        (WebCore::XMLHttpRequest::didFinishLoading):
        * xml/XMLHttpRequest.h:
        (WebCore::XMLHttpRequest::setLastSendLineNumber):

2008-09-25  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Eric Seidel.

        <rdar://problem/6171047> HTMLMediaElement "begin" event is now "loadstart"
        https://bugs.webkit.org/show_bug.cgi?id=21003

        * dom/EventNames.h: remove "begin" event
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::load): Post "loadstart" event instead of "begin"

2008-09-25  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=21097
        Calling a MessageChannel constructor from a destroyed document results in a crash

        Test: fast/events/message-port-constructor-for-deleted-document.html

        * bindings/js/JSMessageChannelConstructor.cpp:
        (WebCore::JSMessageChannelConstructor::construct):
        * bindings/js/JSMessageChannelConstructor.h:
        Made m_document a RefPtr.

2008-09-24  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Sam Weinig, Anders Carlsson, and (unofficially) Adam Barth.

        https://bugs.webkit.org/show_bug.cgi?id=20879
        Implement HTML5 channel messaging

        Tests: fast/events/message-channel-gc.html
               fast/events/message-port-deleted-document.html
               fast/events/message-port-deleted-frame.html
               fast/events/message-port-inactive-document.html
               fast/events/message-port.html
               http/tests/security/MessagePort/event-listener-context.html

        * Configurations/WebCore.xcconfig:
        Removed unused  ENABLE_CROSS_DOCUMENT_MESSAGING macro.

        * DerivedSources.make:
        Added MessageChannel and MessagePort.

        * WebCore.pro: Made MessageEvent compilation unconditional, as it could not possibly be
        turmed off anyway. Added new files.

        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        Added new files.

        * bindings/js/JSDOMWindowBase.h:
        * bindings/js/JSDOMWindowBase.cpp: (WebCore::JSDOMWindowBase::getValueProperty):
        Added suport for window.MessageChannel constructor.

        * bindings/js/JSDOMWindowCustom.cpp: (WebCore::JSDOMWindow::postMessage):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::postMessage):
        * page/DOMWindow.h:
        * page/DOMWindow.idl:
        Added support for three-argument postMessage (that posts a MessagePort).

        * dom/EventTarget.cpp:
        (WebCore::EventTarget::toMessagePort):
        * dom/EventTarget.h:
        * bindings/js/JSEventTargetBase.cpp: (WebCore::toJS): Added MessagePort as yet another
        EventTarget variant.

        * bindings/js/JSMessageChannelConstructor.h:
        * bindings/js/JSMessageChannelConstructor.cpp: Added a custom constructor, so that it could
        take a browsing context (document) parameter.

        * bindings/js/JSMessageChannelCustom.cpp: Added.
        (WebCore::JSMessageChannel::mark): JSMessageChannel uses a custom mark function to mark
        port1 and port2 that it owns.

        * bindings/js/JSMessagePortCustom.cpp: Added.
        (WebCore::JSMessagePort::startConversation):
        (WebCore::JSMessagePort::addEventListener):
        (WebCore::JSMessagePort::removeEventListener):
        (WebCore::JSMessagePort::dispatchEvent):
        (WebCore::JSMessagePort::setOnmessage):
        (WebCore::JSMessagePort::onmessage):
        (WebCore::JSMessagePort::setOnclose):
        (WebCore::JSMessagePort::onclose):
        (WebCore::JSMessagePort::mark):
        * dom/MessagePort.cpp: Added.
        * dom/MessagePort.h: Added.
        * dom/MessagePort.idl: Added.
        Added a MessagePort implementation. Currently, it is not thread-safe at all, and only works
        with Documents as contexts, but in the future, it will be used for communication with worker
        threads.

        * bindings/objc/DOMInternal.h: Include "DOMMessagePortInternal.h". The new APIs do not
        really have Obj-C bindings, as they are far from being final, but a MessagePort stub is
        needed for MessageEvent.

        * bindings/scripts/CodeGeneratorJS.pm: Include PlatformString.h for MessagePort happiness.

        * dom/Document.cpp:
        (WebCore::MessagePortTimer::MessagePortTimer):
        (WebCore::MessagePortTimer::fired):
        (WebCore::Document::processMessagePortMessagesSoon):
        (WebCore::Document::~Document):
        (WebCore::Document::dispatchMessagePortEvents):
        (WebCore::Document::createdMessagePort):
        (WebCore::Document::destroyedMessagePort):
        * dom/Document.h:
        Document keeps track of all MessagePort objects that were created when it was fully active
        in its context.

        * dom/EventNames.h: Added closeEvent.

        * dom/MessageChannel.cpp: Added.
        (WebCore::MessageChannel::MessageChannel):
        (WebCore::MessageChannel::~MessageChannel):
        * dom/MessageChannel.h: Added.
        (WebCore::MessageChannel::create):
        (WebCore::MessageChannel::port1):
        (WebCore::MessageChannel::port2):
        * dom/MessageChannel.idl: Added.
        Addded JSMessageChannel implementation.

        * dom/MessageEvent.cpp:
        (WebCore::MessageEvent::MessageEvent):
        (WebCore::MessageEvent::initMessageEvent):
        * dom/MessageEvent.h:
        (WebCore::MessageEvent::create):
        (WebCore::MessageEvent::messagePort):
        * dom/MessageEvent.idl:
        MessageEvent has a MessagePort member now, making it possible to pass ports across
        documents.

2008-09-25  David Smith  <catfish.man@gmail.com>

        Reviewed by Eric Seidel

        fix https://bugs.webkit.org/show_bug.cgi?id=21091
        Regression: querySelector matches tag names case sensitively

        Tests: fast/dom/SelectorAPI/caseTag.html
               fast/dom/SelectorAPI/caseTagX.xhtml

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseSelector): Add a Document argument, since tag case sensitivity is different for HTML documents
        * css/CSSParser.h:
        * dom/Node.cpp:
        (WebCore::Node::querySelector):
        (WebCore::Node::querySelectorAll):

2008-09-24  David Hyatt  <hyatt@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=21084

        Make the m_children member of ScrollView cross-platform.  Consolidate children add/remove
        functionality.  Add platform stubs for connecting/disconnecting the platform widgets.

        Reviewed by Sam Weinig

        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * platform/ScrollView.h:
        (WebCore::ScrollView::children):
        * platform/Widget.h:
        * platform/gtk/ScrollViewGtk.cpp:
        (WebCore::ScrollView::addChildPlatformWidget):
        (WebCore::ScrollView::removeChildPlatformWidget):
        (WebCore::ScrollView::geometryChanged):
        * platform/mac/ScrollViewMac.mm:
        (WebCore::ScrollView::addChildPlatformWidget):
        (WebCore::ScrollView::removeChildPlatformWidget):
        * platform/qt/ScrollViewQt.cpp:
        (WebCore::ScrollView::geometryChanged):
        (WebCore::ScrollView::addChildPlatformWidget):
        (WebCore::ScrollView::removeChildPlatformWidget):
        * platform/win/ScrollViewWin.cpp:
        (WebCore::ScrollView::geometryChanged):
        (WebCore::ScrollView::setParentVisible):
        (WebCore::ScrollView::show):
        (WebCore::ScrollView::hide):
        * platform/wx/ScrollViewWx.cpp:
        (WebCore::ScrollView::addChildPlatformWidget):
        (WebCore::ScrollView::removeChildPlatformWidget):

2008-09-25  Dan Bernstein  <mitz@apple.com>

        Reviewed by Dave Hyatt.

        - fix https://bugs.webkit.org/show_bug.cgi?id=21024
          <rdar://problem/6240821> Scrollbar not painted until hovered

        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::setWidgetGeometry): Replaced resizeWidget with
        this method, which sets both the location and the size.
        (WebCore::RenderWidget::setWidget): Replaced the call to resizeWidget
        with a call to the new method setWidgetGeometry. Positioning the
        widget correctly ensures that the scroll bars invalidate correctly when
        they are created and resized.
        * rendering/RenderWidget.h:

2008-09-24  Dan Bernstein  <mitz@apple.com>

        Rubber-stamped by Sam Weinig.

        - create a "style" subfolder under "rendering" and move style files to that folder

        * WebCore.vcproj/WebCore.vcproj:

2008-09-24  Sam Weinig  <sam@webkit.org>

        Reviewed by Maciej Stachowiak.

        Remove staticFunctionGetter.  There is only one remaining user of
        staticFunctionGetter and it can be converted to use setUpStaticFunctionSlot.

        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::getOwnPropertySlot):

2008-09-24  Jeremy Moskovich  <jeremy@chromium.org>

        Reviewed by Dan Bernstein.

        Test: editing/spelling/inline_spelling_markers.html

        - https://bugs.webkit.org/show_bug.cgi?id=20092
        Spelling markers positioned incorrectly in RTL text

        Measure spelling markers with selectionRectForText() to fix RTL.

        This patch also fixes hit-testing for spelling marker tool tips,
        which used to work only on the first line.

        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paintSpellingOrGrammarMarker):

2008-09-24  David Hyatt  <hyatt@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=21074

        Make sure the viewless scrollbar knows how to paint properly when transformed.

        Reviewed by Sam Weinig

        * platform/mac/ScrollbarThemeMac.mm:
        (WebCore::ScrollbarThemeMac::ScrollbarThemeMac):
        (WebCore::ScrollbarThemeMac::paint):

2008-09-24  Nikolas Zimmermann  <zimmermann@kde.org>

        Not reviewed. Try to fix win build.

        * bindings/js/JSSVGElementInstanceCustom.cpp:
        (WebCore::toJS):
        * dom/ContainerNodeAlgorithms.h:
        (WebCore::removeAllChildrenInContainer):
        (WebCore::appendChildToContainer):
        (WebCore::Private::addChildNodesToDeletionQueue):

2008-09-24  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Oliver.

        Add ContainerNodeAlgorithms.h, as central place to share algorithms
        operating on TreeShared-derived classes with a Node-style interface.

        This allows SVGElementInstance & ContainerNode to share code.

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::removeAllChildren):
        (WebCore::ContainerNode::addChild):
        * dom/ContainerNode.h:
        * dom/ContainerNodeAlgorithms.h: Added.
        (WebCore::removeAllChildrenInContainer):
        (WebCore::appendChildToContainer):
        (WebCore::Private::NodeRemovalDispatcher::dispatch):
        (WebCore::Private::addChildNodesToDeletionQueue):

2008-09-24  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dave Hyatt

        Wrap up dirtying the z-order list of the stacking context
        RenderLayer into a method.
        https://bugs.webkit.org/show_bug.cgi?id=21072

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::setHasVisibleContent):
        (WebCore::RenderLayer::addChild):
        (WebCore::RenderLayer::removeChild):
        (WebCore::RenderLayer::dirtyStackingContextZOrderLists):
        (WebCore::RenderLayer::styleChanged):
        * rendering/RenderLayer.h:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::setStyle):

2008-09-24  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Tim.

        Bug 21070: REGRESSION Repeated messages with arguments are not repeated
        or displayed multiple times
        - The Insepctor Controller was comparing JSValue pointers so thought the
        message was not a repeat, but the JS of the inspector compared the
        strings and so knew it was the same message and so overwrote the old
        message.

        * page/InspectorController.cpp:
        (WebCore::ConsoleMessage::isEqual):
        (WebCore::InspectorController::addMessageToConsole):
        (WebCore::InspectorController::addConsoleMessage):
        (WebCore::InspectorController::startGroup):
        (WebCore::InspectorController::endGroup):
        * page/InspectorController.h:

2008-09-24  David Hyatt  <hyatt@apple.com>

        Make sure the viewless Mac scrollbar responds properly to system preference changes (including the
        arrow placement preference and the thumb jump preference).

        Reviewed by Adam Roben

        * platform/Scrollbar.cpp:
        (WebCore::Scrollbar::Scrollbar):
        (WebCore::Scrollbar::~Scrollbar):
        * platform/ScrollbarTheme.h:
        (WebCore::ScrollbarTheme::registerScrollbar):
        (WebCore::ScrollbarTheme::unregisterScrollbar):
        * platform/mac/ScrollbarThemeMac.h:
        * platform/mac/ScrollbarThemeMac.mm:
        (+[ScrollbarPrefsObserver appearancePrefsChanged:]):
        (+[ScrollbarPrefsObserver behaviorPrefsChanged:]):
        (+[ScrollbarPrefsObserver registerAsObserver]):
        (WebCore::ScrollbarThemeMac::registerScrollbar):
        (WebCore::ScrollbarThemeMac::unregisterScrollbar):
        (WebCore::ScrollbarThemeMac::ScrollbarThemeMac):
        (WebCore::ScrollbarThemeMac::preferencesChanged):

2008-09-24  Rob Buis  <buis@kde.org>

        Reviewed by Darin.

        https://bugs.webkit.org/show_bug.cgi?id=20557
        getScreenCTM() returns wrong values

        Use the absolute position of the svg root when
        determining the screen ctm.

        Test: svg/custom/getscreenctm-in-mixed-content2.xhtml

        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::getScreenCTM):

2008-09-24  David Hyatt  <hyatt@apple.com>

        Turn off support for CSS variables.

        * ChangeLog:
        * css/CSSParser.cpp:
        (WebCore::CSSParser::createVariablesRule):
        (WebCore::CSSParser::addVariable):
        (WebCore::CSSParser::addVariableDeclarationBlock):

2008-09-24  David Hyatt  <hyatt@apple.com>

        Back out the alternate forms of CSS variable call syntax (leaving only the -webkit-var version).

        * css/CSSGrammar.y:
        * css/CSSParserValues.cpp:
        (WebCore::CSSParserValue::isVariable):
        * css/CSSPrimitiveValue.cpp:
        (WebCore::CSSPrimitiveValue::cleanup):
        (WebCore::CSSPrimitiveValue::getStringValue):
        (WebCore::CSSPrimitiveValue::cssText):
        (WebCore::CSSPrimitiveValue::parserValue):
        * css/CSSPrimitiveValue.h:
        (WebCore::CSSPrimitiveValue::):
        (WebCore::CSSPrimitiveValue::isVariable):

2008-09-24  Timothy Hatcher  <timothy@apple.com>

        Fixes a regression where the "incorrect MIME-type" warning would not
        show up correctly in the Console or the resources sidebar.

        Reviewed by Kevin McCullough.

        * page/inspector/Resource.js:
        (WebInspector.Resource.prototype._addTip): Add the repeat count argument
        to the WebInspector.ConsoleMessage constructor call.
        (WebInspector.Resource.prototype._checkWarning): Ditto.

2008-09-23  Tor Arne Vestbø  <tavestbo@trolltech.com>

        Reviewed by Simon.

        Remove deprecated JS Qt bindings object call/construct code and fix autotests

        * bridge/qt/qt_instance.cpp:
        (JSC::Bindings::QtInstance::QtInstance):
        * bridge/qt/qt_instance.h:

2008-09-23  Julien Chaffraix  <jchaffraix@pleyo.com>

        Reviewed by Alp Toker. Landed by Jan Alonzo.

        Bug 20883: [CURL] Add deferred loading
        https://bugs.webkit.org/show_bug.cgi?id=20883

        Implement deferred loading for the libcURL backend using curl_easy_pause.
        As the method was introduced in version 7.18.0, all the code checks for libcURL
        version.

        * platform/network/curl/ResourceHandleCurl.cpp:
        (WebCore::ResourceHandle::setDefersLoading):
        * platform/network/curl/ResourceHandleManager.cpp:
        (WebCore::writeCallback): Add an assertion that deferred loading is not
        activated.
        (WebCore::headerCallback): Ditto.
        (WebCore::readCallback): Ditto.
        (WebCore::ResourceHandleManager::dispatchSynchronousJob): Force
        defersLoading to be false in order to avoid triggering an assertion.
        (WebCore::ResourceHandleManager::initializeHandle): If deferred loading is
        activated, pause the easy handle.

2008-09-23  Matt Lilek  <webkit@mattlilek.com>

        Reviewed by Tim Hatcher.

        Inspector search field style tweaks.

        * page/inspector/inspector.css:

2008-09-23  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Eric.

        Fixes: https://bugs.webkit.org/show_bug.cgi?id=21046 (Several LayoutTests crash)

        Fix missing negation in EventTargetNode::insertedIntoDocument.
        Made handleLocalEvents() virtual again, HTMLFormElement overrides it.
        Remove code, that wasn't supposed to go in in dispatchGenericEvent().

        * dom/EventTargetNode.cpp:
        (WebCore::EventTargetNode::insertedIntoDocument):
        (WebCore::EventTargetNode::dispatchGenericEvent):
        * dom/EventTargetNode.h:

2008-09-23  Timothy Hatcher  <timothy@apple.com>

        Adds search support to the Profiles panel.

        The Profiles panel supports a few types of queries:
         * Standard string matching for function names and file URLs.
         * Greater than and less than search for numeric columns.
           So a query of ">24" will match all rows that have calls
           greater than 24. Or "<=42" will match all 42 or less.
         * Percent and time units. Adding a unit of "s", "ms" or "%"
           is supported and will match only the Self and Total columns.
           So a query of ">1.25s" will match all rows that took longer
           than 1.25 seconds.

        Reviewed by Oliver Hunt.

        * page/inspector/ProfileView.js:
        (WebInspector.ProfileView.prototype.hide): Reset _currentSearchResultIndex to -1. So the next time
        it will start at the first result.
        (WebInspector.ProfileView.prototype.refreshShowAsPercents): Moved from the bottom of the file.
        (WebInspector.ProfileView.prototype.searchCanceled): Clear the search properties and refresh highlighted
        data grid nodes.
        (WebInspector.ProfileView.prototype.performSearch): Search the profile nodes.
        (WebInspector.ProfileView.prototype.jumpToFirstSearchResult): Does what the function says. Calls _jumpToSearchResult.
        (WebInspector.ProfileView.prototype.jumpToLastSearchResult): Ditto.
        (WebInspector.ProfileView.prototype.jumpToNextSearchResult): Ditto.
        (WebInspector.ProfileView.prototype.jumpToPreviousSearchResult): Ditto.
        (WebInspector.ProfileView.prototype.showingFirstSearchResult): Does what the function says.
        (WebInspector.ProfileView.prototype.showingLastSearchResult): Ditto.
        (WebInspector.ProfileView.prototype._jumpToSearchResult): Select and reveal the profile node.
        Expand all the ancestors first so the profile node will have a DataGridNode.
        (WebInspector.ProfileView.prototype._changeView): Perform the search again on the new tree.
        (WebInspector.ProfileDataGridNode.prototype.createCell): Add the highlight class to cells that
        have search matches.
        * page/inspector/ProfilesPanel.js:
        (WebInspector.ProfilesPanel.prototype.reset): Call searchCanceled and delete the currentQuery.
        (WebInspector.ProfilesPanel.prototype.showProfile): Use profileViewForProfile.
        (WebInspector.ProfilesPanel.prototype.showView): Call showProfile. Used by Panel to show a view.
        (WebInspector.ProfilesPanel.prototype.profileViewForProfile): Create the ProfileView if needed.
        (WebInspector.ProfilesPanel.prototype.closeVisibleView): Renamed visibleProfileView  to visibleView.
        (WebInspector.ProfilesPanel.prototype.get searchableViews): Return all the views.
        (WebInspector.ProfilesPanel.prototype.searchMatchFound): Update the sidebar search matches.
        (WebInspector.ProfilesPanel.prototype.searchCanceled): Clear all the sidebar search matches.
        (WebInspector.ProfileSidebarTreeElement.prototype.set searchMatches): Set the class and bubbleText.
        * page/inspector/inspector.css: New style rules for the cell highlight color.

2008-09-23  Timothy Hatcher  <timothy@apple.com>

        Adds search support to the Resources and Scripts panels.

        https://bugs.webkit.org/show_bug.cgi?id=21005

        Reviewed by Oliver Hunt.

        * page/inspector/Images/searchSmallBlue.png: Added.
        * page/inspector/Images/searchSmallBrightBlue.png: Added.
        * page/inspector/Images/searchSmallGray.png: Added.
        * page/inspector/Images/searchSmallWhite.png: Added.
        * page/inspector/ResourceView.js:
        (WebInspector.ResourceView.prototype.attach): Attempt to attach to "resource-views"
        or "script-resource-views" since one might not be created yet.
        * page/inspector/ResourcesPanel.js:
        (WebInspector.ResourcesPanel.prototype.show): Hide any views that are visible that
        are not this panel's current visible view. This can happen when a ResourceView is
        visible in the Scripts panel then switched to the this panel.
        (WebInspector.ResourcesPanel.prototype.get searchableViews): Return all views, with the
        visibleView first.
        (WebInspector.ResourcesPanel.prototype.searchResultsSortFunction): Return a sort function
        that uses the current graph search function. So cycling through results will be in the order
        things appear in the sidebar.
        (WebInspector.ResourcesPanel.prototype.searchMatchFound): Update the search matches on the
        resource's sidebar tree element.
        (WebInspector.ResourcesPanel.prototype.searchCanceled): Restore the error and warning bubbles
        in the sidebar. Calls the Panel prototype's searchCanceled.
        (WebInspector.ResourcesPanel.prototype.performSearch): Hide all the error and warning bubbles
        in the sidebar. Calls the Panel prototype's performSearch.
        (WebInspector.ResourcesPanel.prototype.reset): Call searchCanceled and delete the currentQuery.
        (WebInspector.ResourcesPanel.prototype.addMessageToResource): Don't call updateErrorsAndWarnings
        if there is a current search query.
        (WebInspector.ResourcesPanel.prototype.clearMessages): Ditto.
        (WebInspector.ResourcesPanel.prototype.recreateViewForResourceIfNeeded): Ditto.
        (WebInspector.ResourcesPanel.prototype.showView): Call showResource. Used by Panel to show a view.
        (WebInspector.ResourceSidebarTreeElement.prototype.resetBubble): Clear all the classes and content.
        (WebInspector.ResourceSidebarTreeElement.prototype.set searchMatches): Set the bubbleText and class.
        (WebInspector.ResourceSidebarTreeElement.prototype.updateErrorsAndWarnings): Call resetBubble.
        * page/inspector/ScriptView.js:
        (WebInspector.ScriptView): Set _sourceFrameSetup to flase.
        (WebInspector.ScriptView.prototype.hide): Reset _currentSearchResultIndex to -1. So the next time
        it will start at the first result.
        (WebInspector.ScriptView.prototype.setupSourceFrameIfNeeded): Add an event listener for "syntax
        highlighting complete".
        (WebInspector.ScriptView.prototype): Share many methods with SourceView.
        * page/inspector/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype.show): Hide any views that are visible that are not this
        This can happen when a ResourceView is visible in the Resources panel then switched to the this panel.
        (WebInspector.ScriptsPanel.prototype.get searchableViews): Return all views, with the visibleView first.
        (WebInspector.ScriptsPanel.prototype.reset): Call searchCanceled and delete the currentQuery.
        (WebInspector.ScriptsPanel.prototype.showView): Call _showScriptOrResource. Used by Panel to show a view.
        (WebInspector.ScriptsPanel.prototype._sourceViewForScriptOrResource): Added helper.
        * page/inspector/SourceFrame.js:
        (WebInspector.SourceFrame.prototype.syntaxHighlightJavascript): Dispatch a "syntax highlighting complete" event.
        * page/inspector/SourceView.js:
        (WebInspector.SourceView.prototype.hide):
        (WebInspector.SourceView.prototype.detach):
        (WebInspector.SourceView.prototype._resourceLoadingFinished): Moved from the bottom of the file.
        (WebInspector.SourceView.prototype._addBreakpoint): Ditto.
        (WebInspector.SourceView.prototype.searchCanceled): Delete search properties.
        (WebInspector.SourceView.prototype.performSearch): Search the frame if it is loaded, otherwise
        store the worker function as _delayedFindSearchMatches and call it later in _sourceFrameSetupFinished.
        (WebInspector.SourceView.prototype.jumpToFirstSearchResult):
        (WebInspector.SourceView.prototype.jumpToLastSearchResult):
        (WebInspector.SourceView.prototype.jumpToNextSearchResult):
        (WebInspector.SourceView.prototype.jumpToPreviousSearchResult):
        (WebInspector.SourceView.prototype.showingFirstSearchResult):
        (WebInspector.SourceView.prototype.showingLastSearchResult):
        (WebInspector.SourceView.prototype._jumpToSearchResult): Selects the found Range.
        (WebInspector.SourceView.prototype._sourceFrameSetupFinished): Calls _delayedFindSearchMatches.
        (WebInspector.SourceView.prototype._syntaxHighlightingComplete): Call _sourceFrameSetupFinished.
        * page/inspector/inspector.css:

2008-09-23  Timothy Hatcher  <timothy@apple.com>

        Rename some properties of ResourcesPanel and ScriptsPanel to be the same,
        so future code can be shared.

        https://bugs.webkit.org/show_bug.cgi?id=21005

        Reviewed by Oliver Hunt.

        * page/inspector/ResourcesPanel.js: Renamed resourceViews to viewsContainerElement.
        And visibleResourceView to visibleView.
        * page/inspector/ScriptsPanel.js: Renamed scriptResourceViews to viewsContainerElement.

2008-09-23  Timothy Hatcher  <timothy@apple.com>

        Highlight all matched search results in the Elements panel DOM tree.

        https://bugs.webkit.org/show_bug.cgi?id=21005

        Reviewed by Oliver Hunt.

        * page/inspector/ElementsPanel.js:
        (WebInspector.ElementsPanel.prototype.searchCanceled): Clear the highlight
        on all previous search results.
        (WebInspector.ElementsPanel.prototype.performSearch): Set the hihglight
        on all new search results.
        * page/inspector/ElementsTreeOutline.js:
        (WebInspector.ElementsTreeElement): Delay setting the title until onattach.
        (WebInspector.ElementsTreeElement.prototype.get/set highlighted): Sets or removes
        the highlighted class on the listItemElement.
        (WebInspector.ElementsTreeElement.prototype.onattach): Set the highlighted class
        if needed. Calls _updateTitle.
        (WebInspector.ElementsTreeElement.prototype._updateTitle): Adds a span with the highlight
        class so it can be styled when the highlighted class is present.
        * page/inspector/inspector.css: New style rules for the hihglight.

2008-09-23  Timothy Hatcher  <timothy@apple.com>

        Add search support to the Elements panel.

        https://bugs.webkit.org/show_bug.cgi?id=21005

        Reviewed by Oliver Hunt.

        * page/inspector/ElementsPanel.js:
        (WebInspector.ElementsPanel.prototype.searchCanceled): Call updateSearchMatchesCount
        with a 0 match count to rest. Reset the other search properties.
        (WebInspector.ElementsPanel.prototype.performSearch): Evaluates the search as an XPath
        query and a CSS selector on all the Documents in the page. Remembers the found nodes
        and avoids duplicates. Focuses the first result.
        (WebInspector.ElementsPanel.prototype.jumpToNextSearchResult): Focuses the next result.
        (WebInspector.ElementsPanel.prototype.jumpToPreviousSearchResult): Focuses the previous result.

2008-09-23  Timothy Hatcher  <timothy@apple.com>

        Add support to Panel that allows easy searching of sub-views.

        https://bugs.webkit.org/show_bug.cgi?id=21005

        Reviewed by Oliver Hunt.

        * page/inspector/Panel.js:
        (WebInspector.Panel.prototype.searchCanceled): Call searchCanceled on all the
        views in the search results and delete the currentQuery property. Call
        WebInspector.updateSearchMatchesCount wit ha 0 match count to rest. Reset the
        other search properties.
        (WebInspector.Panel.prototype.performSearch): Call searchCanceled since it will
        reset everything we need before doing a new search. Get an array of searchableViews
        from the panel, implemented by sub-classes. Iterate over the views one-by-one
        with an interval to prevent blocking the UI for large lists of searchableViews.
        This keeps the interface really responsive. Pass a finishedCallback function to
        the performSearch on each view so it can notify the panel of results.
        (WebInspector.Panel.prototype.jumpToNextSearchResult): Finds the index in the
        searchResults of the visibleView, so we know where in the results we are.
        This is done every time incase the user manually navigates to a new view.
        If the view is showing the last result, jump to the next view and show it's
        first result. Otherwise jump to the next result in the current view.
        (WebInspector.Panel.prototype.jumpToPreviousSearchResult): Ditto, but in reverse.

2008-09-23  Timothy Hatcher  <timothy@apple.com>

        Add support for asking the current panel to perform a search, find next/previous and clear.
        A search is performed on the new new current panel when switching between panels. The search
        label/placeholder in the toolbar now includes the panel name to make it clear that panel will
        be searched. The search field contents are selected when Command/Control-F or Enter/Return
        is pressed, so the user can easily type an entirely new query. The search match count shows
        up in the toolbar next to the search field.

        Also changed:
         * Rename lastQuery to currentQuery since it better matches the truth.
         * Set the search field "results" attribute to zero since results arn't saved for
           how we use the search field.
         * Make repeated presses of the Return key jump to the next search result instead
           of doing nothing.
         * Increased the search field width.

        https://bugs.webkit.org/show_bug.cgi?id=21005

        Reviewed by Oliver Hunt.

        * English.lproj/localizedStrings.js: New strings.
        * page/inspector/inspector.css: New styles.
        * page/inspector/inspector.html: Add the search-results-matches element. Add the
        incremental attribute to the search field and set the results attribute to zero.
        * page/inspector/inspector.js:
        (WebInspector.set currentPanel): perform the search on the new panel.
        (WebInspector.loaded): Change the event listeners and remove code that changes
        the search label text.
        (WebInspector.documentKeyDown): Add support for Command/Control-G and
        Command/Control-Shift-G. To jump to the next and previous search results.
        (WebInspector.updateSearchLabel): Added. Update the search placeholder/label.
        This does different things depending on the attached state.
        (WebInspector.searchKeyDown): Call preventDefault since this was the Enter key.
        This prevents a "search" event from firing for key down. We handle the Enter key
        on key up in searchKeyUp. This stops performSearch from being called twice in a row.
        (WebInspector.searchKeyUp): Calls performSearch when it is the Enter key.
        (WebInspector.performSearch): Delete the currentQuery property and call searchCanceled
        on all the panels. Call jumpToNextSearchResult when this is the same query or a forced search.
        Call updateSearchMatchesCount to reset the matches count in the toolbar.
        (WebInspector.updateSearchMatchesCount): Added. Updates the matches count in the toolbar.

2008-09-23  Timothy Hatcher  <timothy@apple.com>

        Remove the previous Inspector search code to make room for the new stuff.

        https://bugs.webkit.org/show_bug.cgi?id=21005

        Reviewed by Oliver Hunt.

        * page/inspector/inspector.css:
        * page/inspector/inspector.html:
        * page/inspector/inspector.js:
        (WebInspector.get/set showingSearchResults): Removed.
        (WebInspector.searchResultsKeyDown): Removed.
        (WebInspector.searchResultsResizerDragStart): Removed.
        (WebInspector.searchResultsResizerDragEnd): Removed.
        (WebInspector.searchResultsResizerDrag): Removed.
        (WebInspector.performSearch): Removed searching parts.

2008-09-23  Timothy Hatcher  <timothy@apple.com>

        Use the Array.remove helper function in more places.

        https://bugs.webkit.org/show_bug.cgi?id=21037

        Reviewed by Kevin McCullough.

        * page/inspector/ResourceCategory.js:
        (WebInspector.ResourceCategory.prototype.removeResource): Use Array.remove.
        * page/inspector/ResourcesPanel.js:
        (WebInspector.ResourcesPanel.prototype.removeResource): Ditto.
        * page/inspector/inspector.js:
        (WebInspector.removeResource): Ditto.

2008-09-23  Timothy Hatcher  <timothy@apple.com>

        Fixes a bug where inspecting a node after reloading the page
        would not reveal the node in the DOM tree. The TreeOutline
        was not being told to forget decendants of a removed child.
        So old TreeElements would be found that are not in the tree.

        https://bugs.webkit.org/show_bug.cgi?id=21036

        Reviewed by Kevin McCullough.

        * page/inspector/treeoutline.js:
        (TreeOutline._removeChildAtIndex): Call _forgetChildrenRecursive
        in addition to _forgetTreeElement.
        (TreeOutline._removeChildren): Call _forgetChildrenRecursive
        in addition to _forgetTreeElement.
        (TreeOutline._rememberTreeElement): Use Array.indexOf to quickly
        search for known elements.
        (TreeOutline._forgetTreeElement): Use Array.remove to remove elements.
        (TreeOutline._forgetChildrenRecursive): Recursively traverse the
        descendants and call _forgetTreeElement.
        * page/inspector/utilities.js:
        (Array.prototype.remove): Speed up this function by using Array.indexOf
        when onlyFirst is true.

2008-09-23  Timothy Hatcher  <timothy@apple.com>

        Fixes a bug where inspecting some short text nodes does
        not reveal them in the Elements panel DOM tree.

        https://bugs.webkit.org/show_bug.cgi?id=21035

        Reviewed by Oliver Hunt.

        * page/inspector/ElementsTreeOutline.js:
        (WebInspector.ElementsTreeOutline.prototype.set focusedDOMNode):
        The revealAndSelectNode() method might find a different element
        if there is inlined text, and the select() call would change the
        focusedDOMNode and reenter this setter. So to avoid calling
        focusedNodeChanged() twice, first check if _focusedDOMNode is
        the same node as the one passed in.
        (WebInspector.ElementsTreeOutline.prototype.update): Remove use of
        this.treeOutline, since this is the TreeOutline.
        (WebInspector.ElementsTreeOutline.prototype.findTreeElement): Added.
        Provides default functions for isAncestor, getParet and equal.
        Calls the base protoype's findTreeElement. If that returns null
        and the node is a text node, try finding it's parent.
        (WebInspector.ElementsTreeOutline.prototype.revealNode): Removed.
        Renamed to revealAndSelectNode.
        (WebInspector.ElementsTreeOutline.prototype.revealAndSelectNode):
        Selects and reveals the node passed in. Use the simple findTreeElement.
        (WebInspector.ElementsTreeOutline.prototype._treeElementFromEvent):
        Remove use of this.treeOutline, since this is the TreeOutline.

2008-09-23  Timothy Hatcher  <timothy@apple.com>

        Fixes an exception that happened when removing a Resource
        from the ResourcesPanel.

        https://bugs.webkit.org/show_bug.cgi?id=21034

        Reviewed by Kevin McCullough.

        * page/inspector/ResourcesPanel.js:
        (WebInspctor.ResourcesPanel.prototype.removeResource):
        Remove the graphElement.

2008-09-23  Kevin McCullough  <kmccullough@apple.com>

        Fixed "Time" to "Tim"

        * ChangeLog:

2008-09-23  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Oliver.

        Move mapInstanceToElement/removeInstanceMapping/instancesForElement
        from SVGDocumentExtensions to SVGElement. It's more useful to store
        the list of SVGElementInstances per SVGElement, instead of using
        a document-wide hash for this purpose.

        * svg/SVGAnimateMotionElement.cpp:
        (WebCore::SVGAnimateMotionElement::applyResultsToTarget):
        * svg/SVGAnimateTransformElement.cpp:
        (WebCore::SVGAnimateTransformElement::applyResultsToTarget):
        * svg/SVGAnimationElement.cpp:
        (WebCore::SVGAnimationElement::setTargetAttributeAnimatedValue):
        * svg/SVGDocumentExtensions.cpp:
        (WebCore::SVGDocumentExtensions::~SVGDocumentExtensions):
        * svg/SVGDocumentExtensions.h:
        * svg/SVGElement.cpp:
        (WebCore::SVGElement::mapInstanceToElement):
        (WebCore::SVGElement::removeInstanceMapping):
        (WebCore::SVGElement::instancesForElement):
        * svg/SVGElement.h:
        * svg/SVGElementInstance.cpp:
        (WebCore::SVGElementInstance::SVGElementInstance):
        (WebCore::SVGElementInstance::~SVGElementInstance):
        (WebCore::SVGElementInstance::updateAllInstancesOfElement):
        * svg/SVGElementInstance.h:
        * svg/SVGStyledElement.cpp:
        (WebCore::SVGStyledElement::svgAttributeChanged):
        (WebCore::SVGStyledElement::childrenChanged):
        * svg/SVGStyledElement.h:

2008-09-23  Kevin Ollivier  <kevino@theolliviers.com>

        wx build fix.

        * WebCoreSources.bkl:

2008-09-23  Nikolas Zimmermann  <zimmermann@kde.org>

        Rubber stamped by Sam.

        Move code from EventTarget to EventTargetNode.

        I refactored most parts to live in EventTarget, a year ago,
        though the implementation of EventTargetSVGElementInstance is
        done in another way, that obsoletes this.

        * dom/Document.cpp:
        (WebCore::Document::addListenerTypeIfNeeded):
        * dom/Document.h:
        * dom/EventTarget.cpp:
        * dom/EventTarget.h:
        (WebCore::allowEventDispatch):
        * dom/EventTargetNode.cpp:
        (WebCore::EventTargetNode::insertedIntoDocument):
        (WebCore::EventTargetNode::removedFromDocument):
        (WebCore::EventTargetNode::willMoveToNewOwnerDocument):
        (WebCore::EventTargetNode::didMoveToNewOwnerDocument):
        (WebCore::EventTargetNode::addEventListener):
        (WebCore::EventTargetNode::removeEventListener):
        (WebCore::EventTargetNode::removeAllEventListeners):
        (WebCore::EventTargetNode::handleLocalEvents):
        (WebCore::setCurrentEventTargetRespectingSVGTargetRules):
        (WebCore::EventTargetNode::dispatchEvent):
        (WebCore::EventTargetNode::dispatchGenericEvent):
        (WebCore::EventTargetNode::dispatchWindowEvent):
        (WebCore::EventTargetNode::removeEventListenerForType):
        * dom/EventTargetNode.h:
        * svg/EventTargetSVGElementInstance.cpp:
        (WebCore::EventTargetSVGElementInstance::dispatchEvent):
        * svg/SVGElement.cpp:
        (WebCore::SVGElement::sendSVGLoadEventIfPossible):
        * svg/SVGElement.h:
        (WebCore::SVGElement::supplementalTransform):

2008-09-23  Dave Hyatt  <hyatt@apple.com>

        Fix for bug 21012.  The Aqua scrollbar was returning the wrong track rect on Windows Aqua theme.  Make
        sure to not accidentally fall into the vertical scrollbar case for horizontal scrollbars. :)

        Reviewed by Sam Weinig

        * platform/mac/ScrollbarThemeMac.mm:
        (WebCore::ScrollbarThemeMac::trackRect):
        * platform/win/ScrollbarThemeSafari.cpp:
        (WebCore::ScrollbarTheme::nativeTheme):
        (WebCore::ScrollbarThemeSafari::trackRect):

2008-09-23  Beth Dakin  <bdakin@apple.com>

        Reviewed by Sam Weinig.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=21041 "Add Contact"
        link at gmail does not support AXPress action
        and corresponding: <rdar://problem/6216178>

        I fixed this bug by making AccessibilityObject::anchorElement
        support ARIA links.

        * page/AccessibilityImageMapLink.cpp:
        (WebCore::AccessibilityImageMapLink::anchorElement):
        * page/AccessibilityImageMapLink.h:
        * page/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::anchorElement):
        * page/AccessibilityObject.h:
        (WebCore::AccessibilityObject::isNativeAnchor):
        * page/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::isNativeAnchor):
        (WebCore::AccessibilityRenderObject::anchorElement):
        (WebCore::AccessibilityRenderObject::internalLinkElement):
        (WebCore::AccessibilityRenderObject::url):
        * page/AccessibilityRenderObject.h:
        * page/mac/AccessibilityObjectWrapper.mm:
        (AXLinkElementForNode):

2008-09-23  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Tim and Oliver.

        Bug 20949: Catch repeated messages in Inspector Controller to limit
        memory usage
        - Store the repeat count in the Console Message object, in the
        Inspector Controller and JS ConsoleMessage object.

        * page/InspectorController.cpp:
        (WebCore::ConsoleMessage::ConsoleMessage):
        (WebCore::ConsoleMessage::operator==):
        (WebCore::InspectorController::InspectorController):
        (WebCore::InspectorController::addConsoleMessage):
        (WebCore::InspectorController::addScriptConsoleMessage):
        * page/InspectorController.h:
        * page/inspector/Console.js:
        * page/inspector/Resource.js:
        * page/inspector/ResourcesPanel.js:
        * page/inspector/SourceFrame.js:

2008-09-23  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Eric.

        Working on proper EventTarget support for SVGElementInstance.

        Add new EventTargetSVGElementInstance class, and it's corresponding JS wrapper.
        Finally JSEventTargetBase, is actually used for another class than JSEventTargetnode.

        Remove EventTarget inheritance from SVGElementInstance, and the manual "TreeShared"
        implementation. Let it use TreeShared directly.

        It's not activated so far (SVGUseElement still creating SVGElementInstance objects).
        The transition to EventTargetSVGElementInstance will be done in a few individual patches.

        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSEventTargetBase.cpp:
        (WebCore::retrieveEventTargetAndCorrespondingNode):
        (WebCore::toJS):
        * bindings/js/JSEventTargetBase.h:
        * bindings/js/JSEventTargetSVGElementInstance.cpp: Added.
        (WebCore::):
        (WebCore::JSEventTargetSVGElementInstance::JSEventTargetSVGElementInstance):
        (WebCore::JSEventTargetSVGElementInstance::createPrototype):
        (WebCore::JSEventTargetSVGElementInstance::setListener):
        (WebCore::JSEventTargetSVGElementInstance::getListener):
        (WebCore::toEventTargetSVGElementInstance):
        * bindings/js/JSEventTargetSVGElementInstance.h: Added.
        (WebCore::JSEventTargetSVGElementInstance::prototypeClassName):
        (WebCore::JSEventTargetSVGElementInstance::getOwnPropertySlot):
        (WebCore::JSEventTargetSVGElementInstance::getValueProperty):
        (WebCore::JSEventTargetSVGElementInstance::put):
        (WebCore::JSEventTargetSVGElementInstance::putValueProperty):
        * bindings/js/JSSVGElementInstanceCustom.cpp: Added.
        (WebCore::toJS):
        * bindings/objc/DOM.mm:
        (+[DOMNode _wrapEventTarget:WebCore::]):
        (-[DOMSVGElementInstance _initWithSVGElementInstance:WebCore::]):
        (+[DOMSVGElementInstance _wrapSVGElementInstance:WebCore::]):
        (+[DOMSVGElementInstance _wrapEventTarget:WebCore::]):
        (-[DOMSVGElementInstance WebCore::]):
        (-[DOMSVGElementInstance addEventListener:listener:useCapture:]):
        (-[DOMSVGElementInstance addEventListener:::]):
        (-[DOMSVGElementInstance removeEventListener:listener:useCapture:]):
        (-[DOMSVGElementInstance removeEventListener:::]):
        (-[DOMSVGElementInstance dispatchEvent:]):
        * bindings/objc/DOMEvents.h:
        * bindings/scripts/CodeGeneratorJS.pm:
        * bindings/scripts/CodeGeneratorObjC.pm:
        * svg/EventTargetSVGElementInstance.cpp: Added.
        (WebCore::EventTargetSVGElementInstance::EventTargetSVGElementInstance):
        (WebCore::EventTargetSVGElementInstance::~EventTargetSVGElementInstance):
        (WebCore::EventTargetSVGElementInstance::addEventListener):
        (WebCore::EventTargetSVGElementInstance::removeEventListener):
        (WebCore::EventTargetSVGElementInstance::dispatchEvent):
        * svg/EventTargetSVGElementInstance.h: Added.
        (WebCore::EventTargetSVGElementInstance::isEventTargetSVGElementInstance):
        (WebCore::EventTargetSVGElementInstance::toNode):
        (WebCore::EventTargetSVGElementInstance::toSVGElementInstance):
        (WebCore::EventTargetSVGElementInstance::refEventTarget):
        (WebCore::EventTargetSVGElementInstance::derefEventTarget):
        (WebCore::EventTargetSVGElementInstanceCast):
        * svg/SVGElement.cpp:
        (WebCore::SVGElement::dispatchEvent):
        * svg/SVGElementInstance.cpp:
        (WebCore::SVGElementInstance::SVGElementInstance):
        (WebCore::SVGElementInstance::~SVGElementInstance):
        * svg/SVGElementInstance.h:
        (WebCore::SVGElementInstance::isEventTargetSVGElementInstance):
        * svg/SVGElementInstance.idl:

2008-09-23  Dan Bernstein  <mitz@apple.com>

        Reviewed by Dave Hyatt.

        - https://bugs.webkit.org/show_bug.cgi?id=21040
          Pass NULL instead of the identity matrix to CTFontCreateWithGraphicsFont()

        * platform/graphics/mac/SimpleFontDataMac.mm:
        (WebCore::SimpleFontData::getCTFont):

2008-09-23  David Hyatt  <hyatt@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=21039

        Teach the viewless Mac scrollbar how to avoid NSWindow's resizer.

        Reviewed by Sam Weinig

        * platform/ScrollView.h:
        * platform/Scrollbar.cpp:
        (WebCore::Scrollbar::setFrameGeometry):
        * platform/Scrollbar.h:
        * platform/Widget.cpp:
        (WebCore::Widget::convertFromContainingWindow):
        * platform/Widget.h:
        * platform/mac/ScrollViewMac.mm:
        (WebCore::ScrollView::ScrollViewPrivate::ScrollViewPrivate):
        (WebCore::ScrollView::ScrollView):
        (WebCore::ScrollView::~ScrollView):
        (WebCore::ScrollView::windowResizerRect):
        (WebCore::ScrollView::resizerOverlapsContent):
        (WebCore::ScrollView::adjustOverlappingScrollbarCount):
        (WebCore::ScrollView::setParent):
        * platform/mac/WidgetMac.mm:
        (WebCore::Widget::convertFromContainingWindow):

2008-09-23  Dirk Schulze  <vbs85@gmx.de>

        Reviewed by Darin Adler. Landed by Jan Alonzo.

        Added support for getImageData() and putImageData()
        to Cairo.

        [CAIRO] needs getImageData and putImageData support
        https://bugs.webkit.org/show_bug.cgi?id=20838

        * platform/graphics/cairo/ImageBufferCairo.cpp:
        (WebCore::ImageBuffer::ImageBuffer):
        (WebCore::ImageBuffer::getImageData):
        (WebCore::ImageBuffer::putImageData):

2008-09-23  Marco Barisione  <marco.barisione@collabora.co.uk>

        Reviewed by Holger Freyther.

        http://bugs.webkit.org/show_bug.cgi?id=18987
        [GTK] Implement SharedBuffer::createWithContentsOfFile and
        KURL::fileSystemPath

        * GNUmakefile.am: Add KURLGtk.cpp and SharedBufferGtk.cpp.
        * platform/gtk/KURLGtk.cpp: Added.
        (WebCore::KURL::fileSystemPath): Implemented.
        * platform/gtk/SharedBufferGtk.cpp: Added.
        (WebCore::SharedBuffer::createWithContentsOfFile): Implemented.
        * platform/gtk/TemporaryLinkStubs.cpp: Remove the old stubs.

2008-09-23  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Oliver Hunt, okayed by Darin Adler.

        <rdar://problem/5575547> REGRESSION: ATOK has no phrase boundary on Safari/Mail.app

        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paintCompositionUnderline): Add 2 pixel spacing between clauses.

2008-09-23  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=21023
        Don't use TEC for encodings supported by ICU

        * platform/text/mac/mac-encodings.txt: Removed x-mac-centraleurroman, x-mac-cyrillic,
        x-mac-greek, and x-mac-turkish.

        * platform/text/TextCodecICU.cpp: (WebCore::TextCodecICU::registerExtendedEncodingNames):
        Register aliases for these encodings that are not registered automatically; updated comments.

2008-09-23  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin.

        - speed up instanceof some more
        https://bugs.webkit.org/show_bug.cgi?id=20818

        ~2% speedup on EarleyBoyer

        (WebCore updates.)

        * bindings/js/JSQuarantinedObjectWrapper.h:
        (WebCore::JSQuarantinedObjectWrapper::createStructureID):

2008-09-22  Darin Adler  <darin@apple.com>

        Reviewed by Oliver Hunt.

        - fix https://bugs.webkit.org/show_bug.cgi?id=21008
          getting pixels by index from CanvasPixelArray is unnecessarily slow

        * GNUmakefile.am: Added JSCanvasPixelArrayCustom.h.
        * WebCore.vcproj/WebCore.vcproj: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.

        * bindings/js/JSCanvasPixelArrayCustom.cpp: Removed indexGetter and
          indexSetter. These are now both inlined, so in the header.
        * bindings/js/JSCanvasPixelArrayCustom.h: Added. The getByIndex
          function is what's used for HasCustomIndexGetter. Also moved the
          indexSetter function here.

        * bindings/scripts/CodeGeneratorJS.pm: Changed HasCustomIndexGetter
          to use a getByIndex member function rather than an indexGetter static
          member function in a property slot. This lets us avoid the property
          slot mechanism's rule where it turns numeric property names into
          strings in the identifier table, which is good because that's slow.
          Also added a new property CustomHeader that allows IDL files to
          introduce headers to be included -- useful when we have functions
          that we want to inline into the binding.

        * html/CanvasPixelArray.idl: Added CustomHeader attribute.

2008-09-23  Eric Seidel  <eric@webkit.org>

        No review, build fix only.

        Another blind stab in the dark.

        * svg/graphics/cg/SVGResourceClipperCg.cpp: Add missing header.

2008-09-23  Eric Seidel  <eric@webkit.org>

        No review, build fix only.

        Third time's the charm, eh?  My local build is sadly still not done...

        * platform/graphics/AffineTransform.cpp: remove extra &
        * platform/graphics/AffineTransform.h: remove extra &

2008-09-22  Eric Seidel  <eric@webkit.org>

        No review, build fix only.

        * platform/graphics/AffineTransform.cpp: remove extra ;

2008-09-22  Eric Seidel  <eric@webkit.org>

        No review, build fix only.

        Speculative fix for the build while I wait for my compile to finish.

        * platform/graphics/AffineTransform.cpp:

2008-09-22  Dirk Schulze  <vbs85@gmx.de>

        Reviewed by eseidel.  Landed by eseidel.

        Moved makeMapBetweenRects from SVG/CG to AffineTransform
        Make SVGResourceClipper::applyClip more cross-platform

        * platform/graphics/AffineTransform.cpp:
        * platform/graphics/AffineTransform.h:
        * svg/graphics/cg/CgSupport.cpp:
        * svg/graphics/cg/CgSupport.h:
        * svg/graphics/cg/SVGPaintServerGradientCg.cpp:
        (WebCore::SVGPaintServerGradient::handleBoundingBoxModeAndGradientTransformation):
        * svg/graphics/cg/SVGResourceClipperCg.cpp:
        (WebCore::SVGResourceClipper::applyClip):

2008-09-22  Alp Toker  <alp@nuanti.com>

        Reviewed by David Hyatt.

        https://bugs.webkit.org/show_bug.cgi?id=16331
        [Gtk] no focus when button/checkbox/radiobutton clicked, only when tabbed

        Obey GTK+ focusing conventions for controls and anchor elements.

        It could be interesting to push these decisions up to Settings or
        ChromeClient some day but this gets things working.

        Right and middle click events still need some work to match GTK+
        conventions.

        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::isMouseFocusable):
        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::isMouseFocusable):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::sendContextMenuEvent):

2008-09-22  Darin Adler  <darin@apple.com>

        * page/mac/FrameMac.mm:
        (WebCore::Frame::baseWritingDirectionForSelectionStart): Fix indentation.

2008-09-22  Sam Weinig  <sam@webkit.org>

        Reviewed by Dan Bernstein.

        Patch for https://bugs.webkit.org/show_bug.cgi?id=21013
        Match Firefox in how we hide HTMLInputElement.selectionStart, selectionEnd
        and setSelectionRange.  This also allows us to remove the legacy JSHTMLInputElementBase
        class!

        - selectionStart, selectionEnd and setSelectionRange now are visible in iteration of
          non-selectable input types, but return undefined when accessed.

        * DerivedSources.make:
        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * bindings/js/JSHTMLInputElementBase.cpp: Removed.
        * bindings/js/JSHTMLInputElementBase.h: Removed.
        * bindings/js/JSHTMLInputElementCustom.cpp: Added.
        (WebCore::JSHTMLInputElement::customGetOwnPropertySlot):
        (WebCore::JSHTMLInputElement::selectionStart):
        (WebCore::JSHTMLInputElement::selectionEnd):
        * bindings/js/JSHTMLInputElementCustom.h: Added.
        * html/HTMLInputElement.idl:

2008-09-22  Dan Bernstein  <mitz@apple.com>

        Reviewed by Sam Weinig.

        - fix <rdar://problem/5699571> Mail: Unable to change writing direction to LTR in an empty message

        Not testable in DumpRenderTree or in Safari

        * page/mac/FrameMac.mm:
        (WebCore::Frame::baseWritingDirectionForSelectionStart): Account for the
        case that the selection start node is a block.

2008-09-22  David Hyatt  <hyatt@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=21007

        Make sure that the scrollbar gets sent a release event on platforms that call handleMouseDoubleClickEvent.

        Reviewed by Sam Weinig

        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleMouseDoubleClickEvent):

2008-09-22  Eric Seidel  <eric@webkit.org>

        No review, rollback only.

        Roll out Peter's change (per his request)
        http://trac.webkit.org/changeset/36069
        https://bugs.webkit.org/show_bug.cgi?id=19663
        This change has been the source of numerous regressions
        (several of which were latent bugs revealed by this change,
        others were bugs in this change)

        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::BitmapImage):
        (WebCore::BitmapImage::startAnimation):
        (WebCore::BitmapImage::advanceAnimation):
        * platform/graphics/BitmapImage.h:
        * platform/graphics/cairo/ImageCairo.cpp:
        (WebCore::BitmapImage::draw):
        * platform/graphics/cg/ImageCG.cpp:
        (WebCore::BitmapImage::draw):
        * platform/graphics/qt/ImageQt.cpp:
        (WebCore::BitmapImage::draw):
        * platform/graphics/wx/ImageWx.cpp:
        (WebCore::BitmapImage::draw):

2008-09-22  Dan Bernstein  <mitz@apple.com>

        Reviewed by Sam Weinig.

        - fix <rdar://problem/5158514> Switch the complex text code path to Core Text

        Tests: platform/mac-snowleopard/fast/text/myanmar-shaping.html
               platform/mac-snowleopard/fast/text/thai-combining-mark-positioning.html

        * config.h: Use Core Text if not building for Leopard or Tiger.

2008-09-22  David Hyatt  <hyatt@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=21006

        Add code that paints an NSView-less scroller using HIThemeDrawTrack.  This scrollbar is still not
        switched on.  There are still a few more refinements to make to the rendering and behavior.

        Reviewed by Darin Adler

        * platform/ScrollbarThemeComposite.cpp:
        (WebCore::ScrollbarThemeComposite::paint):
        * platform/ScrollbarThemeComposite.h:
        (WebCore::ScrollbarThemeComposite::paintTrack):
        (WebCore::ScrollbarThemeComposite::paintButton):
        (WebCore::ScrollbarThemeComposite::paintThumb):
        * platform/mac/ScrollbarThemeMac.h:
        * platform/mac/ScrollbarThemeMac.mm:
        (WebCore::ScrollbarThemeMac::backButtonRect):
        (WebCore::ScrollbarThemeMac::forwardButtonRect):
        (WebCore::scrollbarPartToHIPressedState):
        (WebCore::ScrollbarThemeMac::paint):
        * platform/mac/WidgetMac.mm:
        (WebCore::Widget::invalidateRect):

2008-09-22  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Sam Weinig

        transition end event when -webkit-transition-property: all puts wrong
        propertyName in event
        https://bugs.webkit.org/show_bug.cgi?id=20903

        * page/animation/ImplicitAnimation.cpp:
        (WebCore::ImplicitAnimation::sendTransitionEvent):

2008-09-22  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/6230234> AXTable should probably not be exposed in there's only one cell

        Test: accessibility/table-one-cell.html

        * page/AccessibilityTable.cpp:
        (WebCore::AccessibilityTable::isTableExposableThroughAccessibility):

2008-09-22  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/6167779> Setting AXSelectedTextRange for TextAreas in a WebView behaves incorrectly

        Test: accessibility/textarea-selected-text-range.html

        * page/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::setSelectedTextRange):

2008-09-22  David Hyatt  <hyatt@apple.com>

        Clean up some parent relationships in the back end stylesheet code.  Make sure parentStyleSheet
        properly walks up nested rule blocks to reach the parent sheet instead of giving up at the immediate
        parent.  Also fix the doc() method so that it is properly set when the parent of the sheet is an import
        rule.

        Reviewed by Sam Weinig

        Added fast/css/nested-rule-parent-sheet.html

         * css/CSSImportRule.cpp:
        (WebCore::CSSImportRule::insertedIntoParent):
        * css/CSSRule.cpp:
        (WebCore::CSSRule::parentStyleSheet):
        (WebCore::CSSRule::parentRule):
        * css/CSSStyleSheet.cpp:
        (WebCore::CSSStyleSheet::CSSStyleSheet):
        * css/CSSStyleSheet.h:

2008-09-22  Dan Bernstein  <mitz@apple.com>

        Reviewed by Sam Weinig.

        - fix https://bugs.webkit.org/show_bug.cgi?id=21002
          Make the ATSUI code path respect spacingDisabled()

        Fixes svg/text/text-spacing-01-b.svg in run-webkit-tests --complex-text

        * platform/graphics/mac/FontMacATSUI.mm:
        (WebCore::overrideLayoutOperation):

2008-09-22  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Cameron Zwarich.

        - speed up instanceof operator by replacing implementsHasInstance method with a TypeInfo flag

        Partial work towards <https://bugs.webkit.org/show_bug.cgi?id=20818>

        2.2% speedup on EarleyBoyer benchmark.

        * bindings/js/JSQuarantinedObjectWrapper.cpp:
        * bindings/js/JSQuarantinedObjectWrapper.h:
        (WebCore::JSQuarantinedObjectWrapper::createStructureID):
        * bindings/scripts/CodeGeneratorJS.pm:

2008-09-22  Adam Roben  <aroben@apple.com>

        Windows build fix

        * WebCore.vcproj/WebCore.vcproj: Add a missing </File> tag.

2008-09-22  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Dave Hyatt.

        Based on initial work by Darin Adler.

        - replace masqueradesAsUndefined virtual method with a flag in TypeInfo
        - use this to JIT inline code for eq_null and neq_null
        https://bugs.webkit.org/show_bug.cgi?id=20823

        * WebCore.xcodeproj/project.pbxproj:
        * WebCore.vcproj/WebCore.vcproj:
        * bindings/js/JSCSSStyleDeclarationCustom.cpp:
        (WebCore::JSCSSStyleDeclaration::nameGetter):
        * bindings/js/JSHTMLAllCollection.cpp: Added.
        (WebCore::):
        * bindings/js/JSHTMLAllCollection.h:
        (WebCore::JSHTMLAllCollection::createStructureID):
        (WebCore::JSHTMLAllCollection::toBoolean):

2008-09-22  Tor Arne Vestbø  <tavestbo@trolltech.com>

        Reviewed by Simon.

        Fix the QtWebKit build

        * bridge/qt/qt_instance.cpp:
        (JSC::Bindings::QtRuntimeObjectImp::construct):
        * bridge/qt/qt_runtime.cpp:

2008-09-22  Alp Toker  <alp@nuanti.com>

        Suggested by David Hyatt.

        Build fix: ScrollView::update() is still used by Document.cpp on !MAC
        so make it public.

        * platform/ScrollView.h:

2008-09-22  David Hyatt  <hyatt@apple.com>

        Fix a regression in Windows scrollbar painting.  (Also fix the same
        bug in my new viewless Mac scrollbar painting code).  The track rect
        was being improperly inflated when painting resulting in the scrollbar
        being too tall and painting in the border of overflow sections.

        Reviewed by Oliver Hunt

        * platform/mac/ScrollbarThemeMac.mm:
        (WebCore::ScrollbarThemeMac::trackRect):
        * platform/win/ScrollbarThemeSafari.cpp:
        (WebCore::ScrollbarThemeSafari::trackRect):

2008-09-22  David Hyatt  <hyatt@apple.com>

        Fix a hit testing bug where events are mistakenly passed to subframes
        if the mouse is over the border or padding area of the frame.  Add
        a boolean flag, isOverWidget(), to hit test results so that EventHandler
        can check it to tell if the mouse is really over the content box of a
        RenderWidget and not just in the border/padding area.

        This is not testable, since the old code properly recovered when it detected
        that the mouse was outside the bounds of the view, but this prevents
        the extra passdown from even occurring (and is basically a nice cleanup).

        Reviewed by Oliver Hunt

        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleMousePressEvent):
        (WebCore::EventHandler::hitTestResultAtPoint):
        (WebCore::subframeForHitTestResult):
        (WebCore::EventHandler::handleMouseDoubleClickEvent):
        (WebCore::EventHandler::handleMouseMoveEvent):
        (WebCore::EventHandler::handleMouseReleaseEvent):
        (WebCore::EventHandler::handleWheelEvent):
        * page/MouseEventWithHitTestResults.h:
        (WebCore::MouseEventWithHitTestResults::isOverWidget):
        * rendering/HitTestResult.cpp:
        (WebCore::HitTestResult::HitTestResult):
        (WebCore::HitTestResult::operator=):
        * rendering/HitTestResult.h:
        (WebCore::HitTestResult::isOverWidget):
        (WebCore::HitTestResult::setIsOverWidget):
        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::nodeAtPoint):
        * rendering/RenderWidget.h:

2008-09-21  David Hyatt  <hyatt@apple.com>

        Rename FrameView's repaintRectangle method to repaintContentRectangle.  Make
        both it and ScrollView's updateContents method be off-limits to everyone in
        WebCore except for RenderView.

        Make repaintViewRectangle the only possible method for WebCore code to do
        an invalidation.  This ensures that all invalidates triggered by WebCore
        cross-platform code that cross ownerElement() boundaries are transform-aware.

        Make sure that iframes/frames contained inside objects that have transforms
        or reflections are not allowed to blit (this was already true for transparency).

        It is not possible to make a test for any of this, since iframe scrolling
        still doesn't work on Mac (since the invalidates are not being done
        through WebCore's cross-platform invalidation code but are instead going
        through NSScrollView's setNeedsDisplay still).

        Reviewed by Oliver Hunt

        * editing/SelectionController.cpp:
        (WebCore::SelectionController::recomputeCaretRect):
        (WebCore::SelectionController::invalidateCaretRect):
        (WebCore::SelectionController::focusedOrActiveStateChanged):
        * page/FrameView.cpp:
        (WebCore::FrameView::repaintContentRectangle):
        (WebCore::FrameView::endDeferredRepaints):
        * page/FrameView.h:
        * platform/ScrollView.h:
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::paintFillLayerExtended):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::enclosingPositionedAncestor):
        (WebCore::RenderLayer::requiresSlowRepaints):
        * rendering/RenderLayer.h:
        (WebCore::RenderLayer::hasTransform):
        * rendering/RenderView.cpp:
        (WebCore::RenderView::paintBoxDecorations):
        (WebCore::RenderView::repaintViewRectangle):
        (WebCore::RenderView::setSelection):

2008-09-21  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin.

        - introduce a TypeInfo class, for holding per-type (in the C++ class sense) date in StructureID
        https://bugs.webkit.org/show_bug.cgi?id=20981

        * bindings/js/JSAudioConstructor.cpp:
        (WebCore::JSAudioConstructor::JSAudioConstructor):
        * bindings/js/JSCSSStyleDeclarationCustom.cpp:
        (WebCore::JSCSSStyleDeclaration::nameGetter):
        * bindings/js/JSDOMBinding.cpp:
        (WebCore::createDOMStructure):
        * bindings/js/JSDOMBinding.h:
        (WebCore::getDOMStructure):
        * bindings/js/JSDOMWindowShell.cpp:
        (WebCore::JSDOMWindowShell::JSDOMWindowShell):
        (WebCore::JSDOMWindowShell::setWindow):
        * bindings/js/JSEventTargetNode.cpp:
        (WebCore::JSEventTargetNode::createPrototype):
        * bindings/js/JSHTMLOptionElementConstructor.cpp:
        (WebCore::JSHTMLOptionElementConstructor::JSHTMLOptionElementConstructor):
        * bindings/js/JSImageConstructor.cpp:
        (WebCore::JSImageConstructor::JSImageConstructor):
        * bindings/js/JSXMLHttpRequestConstructor.cpp:
        (WebCore::JSXMLHttpRequestConstructor::JSXMLHttpRequestConstructor):
        * bindings/js/JSXSLTProcessorConstructor.cpp:
        (WebCore::JSXSLTProcessorConstructor::JSXSLTProcessorConstructor):
        * bindings/scripts/CodeGeneratorJS.pm:

2008-09-21  Darin Adler  <darin@apple.com>

        Reviewed by Maciej Stachowiak.

        - fix problem Maciej noticed where every JSNamedNodesCollection
          gets its own StructureID

        * bindings/js/JSNamedNodesCollection.cpp:
        (WebCore::JSNamedNodesCollection::JSNamedNodesCollection): Use
        getDOMStructure to get the structure.
        * bindings/js/JSNamedNodesCollection.h:
        (WebCore::JSNamedNodesCollection::createPrototype): Return the
        object prototype.

2008-09-20  David Hyatt  <hyatt@apple.com>

        Make sure transformed scrollbars in overflow sections position
        properly.  This patch mimics the same behavior that works for
        iframes, namely making sure that the same code that dynamically
        adjusts iframe widget positions at paint time for fixed positioning
        and transforms also applies to scrollbars.  (This is as simple as passing
        in the current translation factor at paint time rather than crawling
        up the layer tree to compute a "false" absolute position.)

        An existing transform test covers this (although only a pixel result
        reveals the correct rendering).

        Reviewed by Darin Adler

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateLayerPositions):
        (WebCore::RenderLayer::positionOverflowControls):
        (WebCore::RenderLayer::paintOverflowControls):
        (WebCore::RenderLayer::paintLayer):
        * rendering/RenderLayer.h:

2008-09-21  Steve Falkenburg  <sfalken@apple.com>

        Removed unnecessary nested timer check.

        Rubber-stamped by Dan Bernstein.

        * platform/win/SharedTimerWin.cpp:
        (WebCore::TimerWindowWndProc):

2008-09-21  Steve Falkenburg  <sfalken@apple.com>

        Improve timer resolution on WinXP.
        https://bugs.webkit.org/show_bug.cgi?id=20979

        Removed last-chance timer. It should not be necessary.
        Change timeEndPeriod timer to fire in 300ms instead of 20ms. Calling timeBeginPeriod/timeEndPeriod too often throws off accuracy.
        Remove Vista checks. We now run the same code on both XP and Vista.

        Call through to JSC::getCurrentUTCTimeWithMicroseconds from WebCore::currentTime.
        The code previously called GetSystemTimeAsFileTime, which is always low-resolution on XP, even within timeBeginPeriod(1).

        Reviewed by Maciej Stachowiak.

        * platform/win/SharedTimerWin.cpp:
        (WebCore::):
        (WebCore::TimerWindowWndProc):
        (WebCore::setSharedTimerFireTime):
        * platform/win/SystemTimeWin.cpp:
        (WebCore::currentTime):

2008-09-21  Dirk Schulze  <vbs85@gmx.de>

        Reviewed by eseidel.  Landed by eseidel.

        All platforms use the DashArray in the GraphicsContext.

        * svg/graphics/SVGPaintServer.h:
        * svg/graphics/cairo/SVGPaintServerGradientCairo.cpp:
        (WebCore::SVGPaintServerGradient::setup):
        * svg/graphics/cairo/SVGPaintServerPatternCairo.cpp:
        (WebCore::SVGPaintServerPattern::setup):
        * svg/graphics/cairo/SVGPaintServerSolidCairo.cpp:
        (WebCore::SVGPaintServerSolid::setup):
        * svg/graphics/qt/SVGPaintServerGradientQt.cpp:
        (WebCore::SVGPaintServerGradient::setup):
        * svg/graphics/qt/SVGPaintServerQt.cpp:
        * svg/graphics/qt/SVGPaintServerSolidQt.cpp:
        (WebCore::SVGPaintServerSolid::setup):

2008-09-21  Dirk Schulze  <vbs85@gmx.de>

        Reviewed by eseidel.  Landed by eseidel.

        Moved DashArray to GraphicsContext.

        * GNUmakefile.am:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/DashArray.h: Added.
        * platform/graphics/GraphicsContext.h:
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::setLineDash):
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::setLineDash):
        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::GraphicsContext::setLineDash):
        * svg/graphics/SVGPaintServer.cpp:
        (WebCore::applyStrokeStyleToContext):
        * svg/graphics/SVGPaintServer.h:
        * svg/graphics/cg/CgSupport.cpp:
        * svg/graphics/cg/CgSupport.h:

2008-09-21  Dan Bernstein  <mitz@apple.com>

        Reviewed by Mark Rowe.

        - fix linker warnings

        * WebCore.base.exp:

2008-09-20  Darin Adler  <darin@apple.com>

        - another try at fixing Qt

        * bridge/qt/qt_runtime.cpp: "using namespce WebCore"

2008-09-20  Darin Adler  <darin@apple.com>

        - blind attempt to fix Qt build

        * bridge/qt/qt_runtime.cpp:
        (JSC::Bindings::convertQVariantToValue): Use regExpStructure instead
        of regExpPrototype to make a RegExpObject. There should really be
        some sort of public helper function for this. Same thing for
        DateInstance and dateStructure. For JSObject, use constructEmptyObject.
        (JSC::Bindings::):
        (JSC::Bindings::QtRuntimeMethod::QtRuntimeMethod): Use getDOMStructure.
        It is not correct to do this inside the constructor because it could
        cause a garbage collect while the QtRuntimeMethod object is half-
        allocated, which could lead to a crash; note that RuntimeMethod,
        QtRuntimeObjectImp, and RuntimeObjectImp have the same bug.
        * bridge/qt/qt_runtime.h: Add s_info and createPrototype.

2008-09-20  Collin Jackson  <collinj@webkit.org>

        Prefetch DNS for hyperlinks that the user mouses over.

        https://bugs.webkit.org/show_bug.cgi?id=20931

        Reviewed by Sam Weinig.

        * page/Chrome.cpp:
        (WebCore::Chrome::mouseDidMoveOverElement):

2008-09-20  Darin Adler  <darin@apple.com>

        Reviewed by Maciej Stachowiak.

        - finish https://bugs.webkit.org/show_bug.cgi?id=20858
          make each distinct C++ class get a distinct JSC::Structure

        * bindings/js/JSCSSStyleDeclarationCustom.cpp:
        (WebCore::JSCSSStyleDeclaration::nameGetter): Pass in a structure
        ID. Note that this makes a new structure every time -- we could
        optimize this slightly be caching and reusing a single one.

        * bridge/runtime_method.cpp:
        (JSC::RuntimeMethod::RuntimeMethod): Create a unique structure using
        getDOMStructure.
        * bridge/runtime_method.h:
        (JSC::RuntimeMethod::createPrototype): Added createPrototype so
        getDOMStructure will work.

        * bindings/js/JSDOMWindowShell.cpp:
        (WebCore::JSDOMWindowShell::JSDOMWindowShell): Initialize m_window to
        0; needed in case garbage collection happens while creating the
        JSDOMWindow.

2008-09-20  Dan Bernstein  <mitz@apple.com>

        Reviewed by Eric Seidel.

        - fix https://bugs.webkit.org/show_bug.cgi?id=20950
          <rdar://problem/6234059> Reproducible assertion failure running svg/custom/acid3-test-77.html multiple times under guard malloc

        * svg/SVGTextContentElement.cpp:
        (WebCore::SVGInlineTextBoxQueryWalker::chunkPortionCallback): Changed to
        not include the first character in the extraCharsAvailable count.

2008-09-20  Kevin Ollivier  <kevino@theolliviers.com>

        Reviewed by Dan Bernstein.

        Fix memory leak.

        https://bugs.webkit.org/show_bug.cgi?id=20505

        * platform/wx/wxcode/mac/carbon/fontprops.cpp:
        (GetTextExtent):

2008-09-20  Kevin Ollivier  <kevino@theolliviers.com>

        wx build fixes. Added/removed build sources, and nativeWindow->platformWidget updates.

        * WebCoreSources.bkl:
        * platform/ScrollView.h:
        * platform/wx/PopupMenuWx.cpp:
        (WebCore::PopupMenu::show):
        * platform/wx/RenderThemeWx.cpp:
        (WebCore::RenderThemeWx::paintButton):
        (WebCore::RenderThemeWx::paintTextField):
        (WebCore::RenderThemeWx::paintMenuList):
        (WebCore::RenderThemeWx::paintMenuListButton):
        * platform/wx/ScrollViewWx.cpp:
        (WebCore::ScrollView::setPlatformWidget):
        (WebCore::ScrollView::updateContents):
        (WebCore::ScrollView::update):
        (WebCore::ScrollView::visibleWidth):
        (WebCore::ScrollView::visibleHeight):
        (WebCore::ScrollView::scrollBy):
        (WebCore::ScrollView::resizeContents):
        (WebCore::ScrollView::contentsWidth):
        (WebCore::ScrollView::contentsHeight):
        (WebCore::ScrollView::isScrollViewScrollbar):
        (WebCore::ScrollView::adjustScrollbars):
        (WebCore::ScrollView::inWindow):
        (WebCore::ScrollView::removeChild):
        * platform/wx/WidgetWx.cpp:
        * plugins/wx/PluginViewWx.cpp:
        (WebCore::PluginView::setParentVisible):
        (WebCore::PluginView::updatePluginWidget):

2008-09-20  Timothy Hatcher  <timothy@apple.com>

        Fix the new Node Search button image to not be blurry.

        * page/inspector/Images/nodeSearchButtons.png:

2008-09-20  Matt Lilek  <webkit@mattlilek.com>

        Reviewed by Tim Hatcher.

        Cut down some of the inspector javascript -> InspectorController glue code
        with two new macros. Also rearrange the exposed function list to be grouped
        by implementation and to all explicitly use the WebCore namespace.

        * page/InspectorController.cpp:
        (WebCore::InspectorController::windowScriptObjectAvailable):

2008-09-20  Matt Lilek  <webkit@mattlilek.com>

        Reviewed by Tim Hatcher.

        Fix regression from my previous patch where the breadcrumbs bar was not displayed.

        * page/inspector/inspector.css:

2008-09-20  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Eric.

        Refactor HTMLImageLoader/SVGImageLoader code.
        Move html/HTMLImageLoader.* to loader/ImageLoader.*

        Let HTMLImageLoader & SVGImageLoader inherit from the new base class.
        SVGImageLoader used to inherit from HTMLImageLoader which is awkward.

        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * dom/Document.cpp:
        (WebCore::Document::dispatchImageLoadEventSoon):
        (WebCore::Document::removeImage):
        (WebCore::Document::dispatchImageLoadEventsNow):
        * dom/Document.h:
        * html/HTMLImageLoader.cpp:
        (WebCore::HTMLImageLoader::HTMLImageLoader):
        (WebCore::HTMLImageLoader::~HTMLImageLoader):
        (WebCore::HTMLImageLoader::sourceURI):
        (WebCore::HTMLImageLoader::notifyFinished):
        * html/HTMLImageLoader.h:
        * loader/DocLoader.h:
        * loader/ImageLoader.cpp: Copied from html/HTMLImageLoader.cpp.
        (WebCore::ImageLoader::ImageLoader):
        (WebCore::ImageLoader::~ImageLoader):
        (WebCore::ImageLoader::setImage):
        (WebCore::ImageLoader::setLoadingImage):
        (WebCore::ImageLoader::updateFromElement):
        (WebCore::ImageLoader::notifyFinished):
        * loader/ImageLoader.h: Copied from html/HTMLImageLoader.h.
        * svg/SVGImageElement.cpp:
        (WebCore::SVGImageElement::attach):
        (WebCore::SVGImageElement::insertedIntoDocument):
        (WebCore::SVGImageElement::imageSourceAttributeName):
        * svg/SVGImageElement.h:
        * svg/SVGImageLoader.cpp:
        (WebCore::SVGImageLoader::SVGImageLoader):
        (WebCore::SVGImageLoader::dispatchLoadEvent):
        (WebCore::SVGImageLoader::sourceURI):
        * svg/SVGImageLoader.h:

2008-09-20  Holger Hans Peter Freyther  <zecke@selfish.org>

        Build fix.

        [qtwebkit] ScrollBar build fix after r36684.
        BackButtonPart was split into Start and End Part
        ForwardButtonPart was split into Start and End Part

        * platform/qt/ScrollbarThemeQt.cpp:
        (WebCore::scPart):
        (WebCore::scrollbarPart):
        (WebCore::styleOptionSlider):

2008-09-20  Holger Hans Peter Freyther  <zecke@selfish.org>

        Build fix.

        [qtwebkit] Make qt_instance.cpp compile.
        Revision of 36675 introduced getDOMStructure to give unique
        structure id's to C++ classes. Catch up. RuntimeObjectImp assigns
        the the StructureID inside the c'tor, do the same in QtRuntimeObjectImp

        * bridge/qt/qt_instance.cpp:
        (JSC::Bindings::QtInstance::getRuntimeObject):

2008-09-20  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Nikolas Zimmermann.

        [svg] Change SVGLocatable to deal with a plain SVGElement
        There is no requirement in the code that we have to have a
        SVGStyledElement. Remove that artificial limitation and compile
        with SVGElement.

        * svg/SVGLocatable.cpp:
        * svg/SVGLocatable.h:

2008-09-20  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Nikolas Zimmermann.

        [svg] Use OwnPtr for the SVGExtensions to avoid custom lifetime
        management.

        * dom/Document.cpp:
        (WebCore::Document::~Document):
        (WebCore::Document::svgExtensions):
        (WebCore::Document::accessSVGExtensions):
        * dom/Document.h:

2008-09-19  David Hyatt  <hyatt@apple.com>

        Fix for crash in updateTransitions.  Make sure to test for a style
        being null when comparing two RenderStyles.

        Reviewed by Oliver Hunt

        * page/animation/AnimationBase.cpp:
        (WebCore::PropertyWrapperGetter::equals):

2008-09-19  David Hyatt  <hyatt@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=20954

        Roll out r36628 since it has caused horrible regressions with
        animated GIF CPU usage.

        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::cacheFrame):
        (WebCore::BitmapImage::startAnimation):
        * platform/graphics/BitmapImage.h:
        (WebCore::FrameData::FrameData):
        * platform/graphics/cairo/ImageCairo.cpp:
        (WebCore::FrameData::clear):
        * platform/graphics/cg/ImageCG.cpp:
        (WebCore::FrameData::clear):
        * platform/graphics/qt/ImageQt.cpp:
        (WebCore::FrameData::clear):
        * platform/graphics/wx/ImageWx.cpp:
        (WebCore::FrameData::clear):

2008-09-20  Alp Toker  <alp@nuanti.com>

        Reviewed by Timothy Hatcher.

        https://bugs.webkit.org/show_bug.cgi?id=20913
        Avoid redudant includes

        Document.h is included excessively such that a modification to Document.h (or
        any of the header it includes itself) triggers a rebuild of many files
        including the whole of SVG and a lot of the JS bindings.

        Some of these includes can be avoided by only including Document.h where
        necessary.

        * bindings/js/JSAttrCustom.cpp:
        * bindings/js/JSElementCustom.cpp:
        * bindings/js/JSEventTargetBase.cpp:
        * bindings/js/JSEventTargetBase.h:
        * bindings/js/JSEventTargetNode.cpp:
        * bindings/js/JSHTMLFrameElementCustom.cpp:
        * bindings/js/JSHTMLIFrameElementCustom.cpp:
        * bindings/scripts/CodeGeneratorJS.pm:
        * css/CSSCursorImageValue.cpp:
        * css/SVGCSSStyleSelector.cpp:
        * dom/make_names.pl:
        * svg/SVGAnimateElement.h:
        * svg/SVGAnimatedProperty.h:
        (WebCore::::baseValue):
        (WebCore::::setBaseValue):
        (WebCore::::startAnimation):
        (WebCore::::stopAnimation):
        * svg/SVGElement.cpp:
        (WebCore::SVGElement::accessDocumentSVGExtensions):
        * svg/SVGElement.h:
        * svg/SVGElementInstance.cpp:
        * svg/SVGFitToViewBox.cpp:
        * svg/SVGFontElement.cpp:
        * svg/SVGFontFaceElement.cpp:
        * svg/SVGLinearGradientElement.cpp:
        * svg/SVGMPathElement.cpp:
        * svg/SVGViewSpec.cpp:

2008-09-19  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Antti & Eric.

        Fixes: https://bugs.webkit.org/show_bug.cgi?id=20372

        Finish HTMLScriptElement / SVGScriptElement unification.
        SVG <script> support is complete now, full SVGLoad event
        respecting the influence of the externalResourcesRequired attribute
        as well as SVGError event support. All other features shared with HTML.

        Tests: fast/dom/HTMLScriptElement/script-reexecution.html
               svg/dom/SVGScriptElement/script-change-externalResourcesRequired-while-loading.svg
               svg/dom/SVGScriptElement/script-load-and-error-events.svg
               svg/dom/SVGScriptElement/script-reexecution.svg
               svg/dom/SVGScriptElement/script-set-href.svg

        * dom/ScriptElement.cpp:
        (WebCore::ScriptElementData::ScriptElementData):
        (WebCore::ScriptElementData::requestScript):
        * dom/ScriptElement.h:
        (WebCore::ScriptElementData::haveFiredLoadEvent):
        (WebCore::ScriptElementData::setHaveFiredLoadEvent):
        * dom/XMLTokenizer.cpp:
        (WebCore::XMLTokenizer::notifyFinished):
        * html/HTMLScriptElement.cpp:
        (WebCore::HTMLScriptElement::dispatchLoadEvent):
        * svg/SVGScriptElement.cpp:
        (WebCore::SVGScriptElement::setCreatedByParser):
        (WebCore::SVGScriptElement::parseMappedAttribute):
        (WebCore::SVGScriptElement::svgAttributeChanged):
        (WebCore::SVGScriptElement::insertedIntoDocument):
        (WebCore::SVGScriptElement::removedFromDocument):
        (WebCore::SVGScriptElement::childrenChanged):
        (WebCore::SVGScriptElement::isURLAttribute):
        (WebCore::SVGScriptElement::finishParsingChildren):
        (WebCore::SVGScriptElement::type):
        (WebCore::SVGScriptElement::setType):
        (WebCore::SVGScriptElement::haveLoadedRequiredResources):
        (WebCore::SVGScriptElement::dispatchLoadEvent):
        (WebCore::SVGScriptElement::dispatchErrorEvent):
        * svg/SVGScriptElement.h:

2008-09-19  Dan Bernstein  <mitz@apple.com>

        Reviewed by John Sullivan.

        - fix https://bugs.webkit.org/show_bug.cgi?id=20951
          Typo in Position::getInlineBoxAndOffset()
          and add an assertion

        Without the fix, the newly-added assertion fails in platform/mac/editing/input/caret-primary-bidi.html

        * dom/Position.cpp:
        (WebCore::Position::getInlineBoxAndOffset):
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::positionForOffset):

2008-09-19  David Hyatt  <hyatt@apple.com>

        Add support for hit testing of all five possible scrollbar button placements.

        Reviewed by Sam Weinig

        * platform/ScrollbarThemeComposite.cpp:
        (WebCore::ScrollbarThemeComposite::paint):
        * platform/mac/ScrollbarThemeMac.mm:
        (WebCore::):
        (WebCore::ScrollbarThemeMac::backButtonRect):
        (WebCore::ScrollbarThemeMac::forwardButtonRect):
        (WebCore::ScrollbarThemeMac::trackRect):
        (WebCore::ScrollbarThemeMac::paintButton):

2008-09-19  Darin Adler  <darin@apple.com>

        - try to fix Qt build

        * bridge/qt/qt_instance.cpp:
        (JSC::Bindings::QtRuntimeObjectImp::QtRuntimeObjectImp): Add structure argument.
        (JSC::Bindings::QtInstance::getRuntimeObject): Ditto.
        * bridge/runtime_object.cpp:
        (JSC::RuntimeObjectImp::RuntimeObjectImp): Add an overload just for Qt.
        * bridge/runtime_object.h: Ditto.

2008-09-19  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Dave Hyatt.

        Transition starts running when it shouldn't
        https://bugs.webkit.org/show_bug.cgi?id=20892

        When there is a transition and an animation on the
        same element, make sure the animation wins.

        The fix is to save the unanimated style when an animation is started.
        Then, when starting a transition, check to see if there is a current
        animation on the same prop. If so, use the unanimated style as the
        fromStyle rather than the current style.

        Test: animations/transition-and-animation-1.html

        * page/animation/CompositeAnimation.cpp:
        (WebCore::CompositeAnimation::updateTransitions):
        (WebCore::CompositeAnimation::updateKeyframeAnimations):
        (WebCore::CompositeAnimation::animate):
        (WebCore::CompositeAnimation::getAnimationForProperty):
        * page/animation/CompositeAnimation.h:
        * page/animation/ImplicitAnimation.cpp:
        (WebCore::ImplicitAnimation::reset):
        * page/animation/ImplicitAnimation.h:
        * page/animation/KeyframeAnimation.cpp:
        (WebCore::KeyframeAnimation::hasAnimationForProperty):
        * page/animation/KeyframeAnimation.h:
        (WebCore::KeyframeAnimation::KeyframeAnimation):
        (WebCore::KeyframeAnimation::unanimatedStyle):

2008-09-19  David Hyatt  <hyatt@apple.com>

        Add support for painting/hit testing of four possible scrollbar buttons.
        The Windows themes simply ignore the two parts that they will never
        show.  The Mac theme also ignores the other two buttons for now.

        The cross-platform base for all three themes, ScrollbarThemeComposite,
        has all the proper support though.

        Reviewed by Sam Weinig

        * platform/ScrollbarThemeComposite.cpp:
        (WebCore::ScrollbarThemeComposite::hitTest):
        (WebCore::ScrollbarThemeComposite::invalidatePart):
        * platform/ScrollbarThemeComposite.h:
        * platform/mac/ScrollbarThemeMac.h:
        * platform/mac/ScrollbarThemeMac.mm:
        (WebCore::ScrollbarThemeMac::backButtonRect):
        (WebCore::ScrollbarThemeMac::forwardButtonRect):
        (WebCore::ScrollbarThemeMac::paintButton):
        * platform/win/ScrollbarThemeSafari.cpp:
        (WebCore::ScrollbarThemeSafari::backButtonRect):
        (WebCore::ScrollbarThemeSafari::forwardButtonRect):
        (WebCore::ScrollbarThemeSafari::paintButton):
        * platform/win/ScrollbarThemeSafari.h:
        * platform/win/ScrollbarThemeWin.cpp:
        (WebCore::ScrollbarThemeWin::backButtonRect):
        (WebCore::ScrollbarThemeWin::forwardButtonRect):
        (WebCore::ScrollbarThemeWin::paintButton):
        * platform/win/ScrollbarThemeWin.h:

2008-09-19  Matt Lilek  <webkit@mattlilek.com>

        Reviewed by Tim Hatcher.

        Bug 17772: Inspector should support point-and-click to select a node to inspect
        https://bugs.webkit.org/show_bug.cgi?id=17772
        <rdar://problem/5792395>

        * English.lproj/localizedStrings.js:
        * page/Chrome.cpp:
        (WebCore::Chrome::mouseDidMoveOverElement):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleMousePressEvent):
        * page/InspectorController.cpp:
        (WebCore::toggleNodeSearch):
        (WebCore::searchingForNode):
        (WebCore::InspectorController::InspectorController):
        (WebCore::InspectorController::toggleSearchForNodeInPage):
        (WebCore::InspectorController::mouseDidMoveOverElement):
        (WebCore::InspectorController::handleMousePressOnNode):
        (WebCore::InspectorController::windowScriptObjectAvailable):
        * page/InspectorController.h:
        (WebCore::InspectorController::searchingForNodeInPage):
        * page/inspector/ElementsPanel.js:
        * page/inspector/Images/nodeSearchButtons.png: Added.
        * page/inspector/inspector.css:

2008-09-19  David Hyatt  <hyatt@apple.com>

        Add new scrollbar parts to be able to represent back and forward buttons
        at either end of the scrollbar.  The current scrollbar still just draws
        a single button at either end, but the parts now exist.

        Reviewed by Sam Weinig

        * platform/ScrollTypes.h:
        (WebCore::):
        * platform/Scrollbar.cpp:
        (WebCore::Scrollbar::autoscrollTimerFired):
        (WebCore::Scrollbar::pressedPartScrollDirection):
        (WebCore::Scrollbar::pressedPartScrollGranularity):
        (WebCore::Scrollbar::handleMouseMoveEvent):
        * platform/ScrollbarTheme.h:
        (WebCore::ScrollbarTheme::buttonsPlacement):
        (WebCore::ScrollbarTheme::invalidateParts):
        * platform/ScrollbarThemeComposite.cpp:
        (WebCore::ScrollbarThemeComposite::paint):
        (WebCore::ScrollbarThemeComposite::hitTest):
        (WebCore::ScrollbarThemeComposite::invalidatePart):
        * platform/ScrollbarThemeComposite.h:

2008-09-19  Beth Dakin  <bdakin@apple.com>

        Reviewed by Dave Hyatt.

        Fix for <rdar://problem/6231308> crash in AutoTableLayout

        The code assumes later on that a TableSection's grid's row vector
        will never be empty. So make 1 the minimum number of columns.

        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::ensureRows):

2008-09-19  David Hyatt  <hyatt@apple.com>

        Add a new ScrollbarButtonsPlacement type for specifying where
        the button arrows are in a scrollbar.

        Read in the placement settings for Mac.  Nothing is done with the
        setting yet.

        Add a new buttonsPlacement() method to ScrollbarTheme composite
        so that the arrow settings can be obtained.

        Reviewed by Sam Weinig

        * platform/ScrollTypes.h:
        (WebCore::):
        * platform/ScrollbarThemeComposite.h:
        (WebCore::ScrollbarThemeComposite::buttonsPlacement):
        * platform/mac/ScrollbarThemeMac.mm:
        (WebCore::updateArrowPlacement):
        (WebCore::ScrollbarThemeMac::ScrollbarThemeMac):

2008-09-19  Steve Falkenburg  <sfalken@apple.com>

        Roll out r36626. It is causing variance in SunSpider numbers on XP.

        Rubber stamped by Mark Rowe.

        * platform/win/SharedTimerWin.cpp:
        (WebCore::isRunningOnVistaOrLater):
        (WebCore::setSharedTimerFireTime):

2008-09-19  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Tim.

        https://bugs.webkit.org/show_bug.cgi?id=20942
        Bug 20942: Repeated messages in resources don't collapse
        - Now repeated messages in a resource's view are collapsed and a message
        says how many were repeated.

        * English.lproj/localizedStrings.js:
        * manual-tests/inspector/multiple-console-messages.html:
        * page/inspector/Console.js: Send all the messages to the resource's
        view before possibly returning early if the message is a repeat.
        * page/inspector/SourceFrame.js: Add the text about the message being
        repeated, if it is, and increment it when necessary.

2008-09-19  Chris Fleizach  <cfleizach@apple.com>

        Removed unnecessary #if

        * page/mac/AccessibilityObjectWrapper.mm:

2008-09-19  David Hyatt  <hyatt@apple.com>

        Read in prefs for the scroll delay repeat values for buttons.  Also
        honor the option-click pref for jumping to the thumb when clicking in
        the track.

        Reviewed by Sam Weinig

        * platform/mac/ScrollbarThemeMac.h:
        * platform/mac/ScrollbarThemeMac.mm:
        (WebCore::ScrollbarThemeMac::ScrollbarThemeMac):
        (WebCore::ScrollbarThemeMac::initialAutoscrollTimerDelay):
        (WebCore::ScrollbarThemeMac::autoscrollTimerDelay):
        (WebCore::ScrollbarThemeMac::shouldCenterOnThumb):

2008-09-19  David Hyatt  <hyatt@apple.com>

        Move ScrollbarThemeMac.cpp to ScrollbarThemeMac.mm so it can use Obj-C.
        Set the initial button repeat delay to 0.5 for Mac.

        Reviewed by Sam Weinig

        * WebCore.xcodeproj/project.pbxproj:
        * platform/mac/ScrollbarThemeMac.cpp: Removed.
        * platform/mac/ScrollbarThemeMac.h:
        (WebCore::ScrollbarThemeMac::initialAutoscrollTimerDelay):
        * platform/mac/ScrollbarThemeMac.mm: Copied from platform/mac/ScrollbarThemeMac.cpp.

2008-09-19  Darin Adler  <darin@apple.com>

        Reviewed by Sam Weinig.

        - part 2 of https://bugs.webkit.org/show_bug.cgi?id=20858
          make each distinct C++ class get a distinct JSC::Structure

          + Fixed all cases where we were using a shared structure for multiple
            C++ classes in WebCore. This still has to be done in JavaScriptCore.

          + Got rid of cacheGlobalObject.

          + Improved use of PassRefPtr in bindings code.

          + Removed a couple cases where we were potentially allocating prototypes
            inside a JSObject's construction process -- this can lead to trouble if
            we do a garbage collection while an object is only partly constructed.

        * bindings/js/JSAudioConstructor.cpp:
        (WebCore::JSAudioConstructor::JSAudioConstructor): Create a structure explicitly
        so we don't implicitly share the structure with other objects that use the object
        prototype.

        * bindings/js/JSDOMBinding.cpp:
        (WebCore::getCachedDOMConstructor): Added. To be used for constructors so we
        don't need cacheGlobalObject any more.
        (WebCore::cacheDOMConstructor): Ditto.

        * bindings/js/JSDOMBinding.h: Removed DOMObject constructor that takes a prototype.
        Added functions and a function template for getting cached DOM constructors.
        Removed cacheGlobalObject function template.

        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::JSDOMWindowBase): Take a PassRefPtr<DOMWindow> since
        we're taking ownership.
        * bindings/js/JSDOMWindowBase.h: Changed constructor to take PassRefPtr, since
        we're taking ownership. Added constructor map.
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::mark): Mark the constructors in the map.

        * bindings/js/JSDOMWindowShell.cpp:
        (WebCore::JSDOMWindowShell::JSDOMWindowShell): Take a PassRefPtr<DOMWindow> since
        we're taking ownership. Use the new setWindow function to create the JSDOMWindow;
        this is now done in only that one place.
        (WebCore::JSDOMWindowShell::setWindow): Added. Creates the JSDOMWindow based on
        the passed-in DOMWindow. Code was moved here and changed to allocate unique
        structures for both the window prototype and the window.
        * bindings/js/JSDOMWindowShell.h: Ditto.

        * bindings/js/JSEventTargetBase.h: Changed class template argument so it doesn't
        have the same name (JSEventTarget) as an actual class. Removed unhelpful use of
        private/friend in JSEventTargetBase. Removed comments referring to defunct
        macros. Changed JSEventTargetBasePrototype to get the prototype with the new
        rather than its own copy of cacheGlobalObject (I missed this during pass 1).
        Changed JSEventTargetBasePrototype so it doesn't have so many template arguments.

        * bindings/js/JSEventTargetNode.cpp: Added s_info; needed for the new scheme
        for caching structures and prototypes.
        (WebCore::JSEventTargetNode::JSEventTargetNode): Use PassRefPtr.
        (WebCore::JSEventTargetNode::createPrototype): Added.
        * bindings/js/JSEventTargetNode.h: Updated for above changes.

        * bindings/js/JSHTMLAllCollection.h:
        (WebCore::JSHTMLAllCollection::JSHTMLAllCollection): Use PassRefPtr.
        * bindings/js/JSHTMLCollectionCustom.cpp:
        (WebCore::getNamedItems): Pass ExecState instead of prototype.
        * bindings/js/JSHTMLFormElementCustom.cpp:
        (WebCore::JSHTMLFormElement::nameGetter): Ditto.
        * bindings/js/JSHTMLInputElementBase.cpp:
        (WebCore::JSHTMLInputElementBase::JSHTMLInputElementBase): Use PassRefPtr.
        * bindings/js/JSHTMLInputElementBase.h: Ditto.
        * bindings/js/JSHTMLOptionElementConstructor.cpp:
        (WebCore::JSHTMLOptionElementConstructor::JSHTMLOptionElementConstructor):
        Create a unique structure instead of sharing.
        * bindings/js/JSImageConstructor.cpp:
        (WebCore::JSImageConstructor::JSImageConstructor): Ditto.

        * bindings/js/JSInspectedObjectWrapper.cpp:
        (WebCore::JSInspectedObjectWrapper::wrap): Removed overload that takes
        a prototype rather than a structure. Made the use of inheritorID() here
        explicit.
        * bindings/js/JSInspectedObjectWrapper.h: Ditto.
        * bindings/js/JSInspectorCallbackWrapper.cpp:
        (WebCore::JSInspectorCallbackWrapper::wrap): Ditto.
        * bindings/js/JSInspectorCallbackWrapper.h: Ditto.

        * bindings/js/JSNamedNodesCollection.cpp:
        (WebCore::JSNamedNodesCollection::JSNamedNodesCollection): Changed to
        take an ExecState argument instead of a prototype. Create a unique
        StructureID instead of sharing.
        * bindings/js/JSNamedNodesCollection.h: Ditto.

        * bindings/js/JSQuarantinedObjectWrapper.cpp: Removed overloaded
        constructor that takes a prototype instead of a structure.
        * bindings/js/JSQuarantinedObjectWrapper.h: Ditto.

        * bindings/js/JSRGBColor.cpp:
        (WebCore::JSRGBColor::JSRGBColor): Take ExecState instead of a
        prototype; create a unique structure.
        (WebCore::getJSRGBColor): Ditto.
        * bindings/js/JSRGBColor.h: Ditto.

        * bindings/js/JSSQLResultSetRowListCustom.cpp:
        (WebCore::JSSQLResultSetRowList::item): Use constructEmptyObject instead
        of explicit coding the idiom for making a new object.

        * bindings/js/JSXMLHttpRequestConstructor.cpp:
        (WebCore::JSXMLHttpRequestConstructor::JSXMLHttpRequestConstructor):
        Create a unique structure instead of the shared one.
        * bindings/js/JSXSLTProcessorConstructor.cpp:
        (WebCore::JSXSLTProcessorConstructor::JSXSLTProcessorConstructor):
        Ditto.

        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::clearWindowShell): Let the window shell's
        setWindow function create the JSDOMWindow instead of doing it here.

        * bindings/scripts/CodeGeneratorJS.pm: Changed to use PassRefPtr for
        the structure and the wrapped object when creating wrappers.
        Simplified some of the special cases for DOMWindow so they are
        different only in ways the need to be. Eliminated the
        JSDOMWindow::createPrototype and JSDOMWindowPrototype::self
        functions. Moved responsibility for creating the structure and
        parent prototype out of the prototype constructor into the
        createPrototype function. Removed the unused "DoNotCache" flag for
        objects other than DOMWindow. Use getDOMConstructor instead of
        cacheGlobalObject for constructors. Make each constructor have
        a unique structure ID.

        * bridge/objc/objc_runtime.h: Added createPrototype and changed the
        name of the info member to s_info so we can use the standard DOM
        binding macros to handl the prototype.
        * bridge/objc/objc_runtime.mm: Fixed namespacing a bit.
        (JSC::Bindings::ObjcFallbackObjectImp::ObjcFallbackObjectImp):
        Create a unique structure using getDOMStructure.

        * bridge/runtime_array.cpp: Fixed namespacing a bit.
        (JSC::RuntimeArray::RuntimeArray): Create a unique structure using
        getDOMStructure.
        * bridge/runtime_array.h: Added createPrototype so getDOMStructure
        will work.

        * bridge/runtime_object.cpp:
        (JSC::RuntimeObjectImp::RuntimeObjectImp): Create a unique structure using
        getDOMStructure.
        * bridge/runtime_object.h: Added createPrototype so getDOMStructure
        will work.

        * history/CachedPage.cpp:
        (WebCore::CachedPage::restore): Let the window shell's
        setWindow function create the JSDOMWindow instead of doing it here.

        * page/DOMWindow.idl: Removed DoNotCache, which is no longer used.

2008-09-19  Dan Bernstein  <mitz@apple.com>

        Reviewed by Dave Hyatt.

        This optimization was suggested by Daniel Fenwick

        - speed up measuring text on the Core Text code path by not specifying a paragraph writing direction

        Specifying LTR paragraph directionality when measuring runs of RTL text
        resulted in typically two CTRuns being generated for every run instead
        of one, due to the leading space being reordered to the left.

        * platform/graphics/SimpleFontData.h: Removed the ltr parameter to
        getCFStringAttributes() and changed m_CFStringAttributes from an array
        to a single value.
        * platform/graphics/mac/CoreTextController.cpp:
        (WebCore::CoreTextController::CoreTextController): Added a
        mayUseNaturalWritingDirection parameter.
        (WebCore::CoreTextController::collectCoreTextRunsForCharacters): Changed
        to force the bidi embedding level whenever
        m_mayUseNaturalWritingDirectrion is false. Since this is now a common
        case, made the typesetter options dictionaries static.
        * platform/graphics/mac/CoreTextController.h:
        * platform/graphics/mac/FontMacCoreText.cpp:
        (WebCore::Font::selectionRectForComplexText): Renamed a local variable.
        (WebCore::Font::floatWidthForComplexText): Changed to allow the
        CoreTextController to not set the writing direction.
        * platform/graphics/mac/SimpleFontDataMac.mm:
        (WebCore::SimpleFontData::getCFStringAttributes): Removed the ltr
        parameter and the paragraph style attribute.

2008-09-19  David Hyatt  <hyatt@apple.com>

        Reviewed by Sam Weinig

        https://bugs.webkit.org/show_bug.cgi?id=20941

        Incorrect height calculation for replaced element inside nested
        positioned elements (where the inner has a percentage height and
        the outer implicitly has a fixed height because of explicit top/bottom
        values).

        Added fast/block/positioning/replaced-inside-top-bottom.html

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::availableHeightUsing):

2008-09-19  Chris Fleizach  <cfleizach@apple.com>

        Fix Tiger bustage

        * page/mac/AccessibilityObjectWrapper.mm:

2008-09-18  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/6211041> Expose legend tag in accessibility

        Exposes the legend tag as the titleUIElement of a fieldset

        Test: accessibility/legend.html

        * page/AccessibilityObject.h:
        (WebCore::AccessibilityObject::isFieldset):
        * page/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::isFieldset):
        (WebCore::AccessibilityRenderObject::titleUIElement):
        * page/AccessibilityRenderObject.h:
        * rendering/RenderFieldset.h:

2008-09-19  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/6213171> WebKit should use new array-centric methods for AX performance

        Implement a few AX API methods that will be called by AppKit, which will
        speed up access to accessibility objects

        * page/mac/AccessibilityObjectWrapper.mm:
        (-[AccessibilityObjectWrapper accessibilityIndexOfChild:]):
        (-[AccessibilityObjectWrapper accessibilityArrayAttributeCount:]):
        (-[AccessibilityObjectWrapper accessibilityArrayAttributeValues:index:maxCount:]):

2008-09-19  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Simon Hausmann.

        [qtwebkit] Set the m_should* flags to their proper value on entry
        With plugins it was possible that we finished a job twice. This was
        some kind of reentrancy in QNetworkReplyHandler::sendQueuedItems. By
        setting the flag to (m_loadMode == LoadDeferred) they will always have
        the right value and we will not send responses twice.

        * platform/network/qt/QNetworkReplyHandler.cpp:

2008-09-19  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Simon Hausmann.

        [qtwebkit] Pass test 70 of acid3. Handle text decoding errors
        Handle text decoding errors before instructing the parser to parse. We
        have converted the text to QString and all encoding errors are gone and
        the parser will not be able to detect them. So handle them before parsing.

        * dom/XMLTokenizerQt.cpp:
        (WebCore::XMLTokenizer::doWrite):

2008-09-18  Darin Adler  <darin@apple.com>

        Reviewed by Maciej Stachowiak.

        - part 1 of https://bugs.webkit.org/show_bug.cgi?id=20858
          make each distinct C++ class get a distinct JSC::Structure

        * bindings/js/JSCSSStyleDeclarationCustom.cpp:
        (WebCore::JSCSSStyleDeclaration::customPut): Use setDOMException
        instead of DOMExceptionTranslator.

        * bindings/js/JSDOMBinding.cpp:
        (WebCore::getCachedDOMObjectWrapper): Updated function name.
        (WebCore::cacheDOMObjectWrapper): Ditto.
        (WebCore::forgetDOMObject): Ditto.
        (WebCore::getCachedDOMNodeWrapper): Ditto.
        (WebCore::forgetDOMNode): Ditto.
        (WebCore::cacheDOMNodeWrapper): Ditto.
        (WebCore::forgetAllDOMNodesForDocument): Ditto.
        (WebCore::markDOMNodesForDocument): Ditto.
        (WebCore::updateDOMNodeDocument): Ditto.
        (WebCore::getCachedDOMStructure): Added.
        (WebCore::createDOMStructure): Ditto.

        * bindings/js/JSDOMBinding.h: Get rid of the ScriptInterpreter
        class and replace the static member functions with non-member
        functions. Added many other functions for getting at structures,
        prototypes, wrappers, and creating them. Also moved the
        cacheGlobalObject function here from JavaScriptCore; eventually
        I'll remove that once I get rid of the remaining callers. Also
        removed the DOMExceptionTranslator class.

        * bindings/js/JSDOMWindowBase.h: Added JSDOMStructureMap type,
        and put one of those maps in each window.

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::markDOMObjectWrapper): Updated for function name change.
        (WebCore::JSDOMWindow::mark): Added code to mark all the structures
        in the structure map.

        * bindings/js/JSEventTargetNode.cpp:
        (WebCore::JSEventTargetNode::JSEventTargetNode): Changed to take
        a structure instead of a prototype.
        * bindings/js/JSEventTargetNode.h: Ditto.
        * bindings/js/JSHTMLAllCollection.h:
        (WebCore::JSHTMLAllCollection::JSHTMLAllCollection): Ditto.

        * bindings/js/JSHTMLInputElementBase.cpp:
        (WebCore::JSHTMLInputElementBase::JSHTMLInputElementBase): Removed
        use of the JSC_IMPLEMENT_PROTOTYPE macro, and changed to take a
        structure instead of a prototype.
        * bindings/js/JSHTMLInputElementBase.h: Removed use of the
        JSC_DEFINE_PROTOTYPE_WITH_PROTOTYPE macro, and changed constructor
        to take a structure instead of a prototype. Created a dummy prototype
        class that causes the HTMLInputElement prototype to have the
        HTMLElement prototype.

        * bindings/scripts/CodeGeneratorJS.pm: Change constructors to take
        structures instead of prototypes. Changed the prototype self function
        to use the getDOMPrototype function -- later we can eliminate it and
        have callers invoke getDOMPrototype directly instead. Updated other
        functions that have name changes. Added code to generate the
        createPrototype member function. Changed use of cacheGlobalObject to
        get it from the WebCore namespace instead of the JSC namespace.
        Changed cacheDOMObject calls to use getDOMObjectWrapper instead.

        * dom/Document.cpp:
        (WebCore::Document::~Document): Updated for name change and also
        removed unnecessary JSLock use -- there's no need to lock around this.
        * dom/Node.cpp:
        (WebCore::Node::setDocument): Ditto.

        * dom/make_names.pl: Changed to use CREATE_DOM_NODE_WRAPPER macro
        instead of calling new directly.

        * bindings/js/JSCSSRuleCustom.cpp:
        (WebCore::toJS): Updated for function name changes and used the
        CREATE_DOM_OBJECT_WRAPPER macro.
        * bindings/js/JSCSSValueCustom.cpp:
        (WebCore::toJS): Ditto.
        * bindings/js/JSCanvasPixelArrayCustom.cpp:
        (WebCore::toJS): Ditto.
        * bindings/js/JSDocumentCustom.cpp:
        (WebCore::JSDocument::mark): Ditto.
        (WebCore::toJS): Ditto.
        * bindings/js/JSElementCustom.cpp:
        (WebCore::toJSNewlyCreated): Ditto.
        * bindings/js/JSEventCustom.cpp:
        (WebCore::toJS): Ditto.
        * bindings/js/JSEventTargetBase.cpp:
        (WebCore::jsEventTargetDispatchEvent): Use setDOMException instead
        of DOMExceptionTranslator.
        (WebCore::toJS): Updated for function name changes and used the
        CREATE_DOM_OBJECT_WRAPPER macro.
        * bindings/js/JSHTMLCollectionCustom.cpp:
        (WebCore::toJS): Ditto.
        * bindings/js/JSNodeCustom.cpp:
        (WebCore::JSNode::mark): Ditto.
        (WebCore::createWrapper): Ditto.
        (WebCore::toJS): Ditto.
        * bindings/js/JSSVGPathSegCustom.cpp:
        (WebCore::toJS): Ditto.
        * bindings/js/JSStyleSheetCustom.cpp:
        (WebCore::toJS): Ditto.
        (WebCore::JSStyleSheet::mark): Ditto.
        * bindings/js/JSTextCustom.cpp:
        (WebCore::toJSNewlyCreated): Ditto.
        * bindings/js/JSXMLHttpRequestConstructor.cpp:
        (WebCore::constructXMLHttpRequest): Ditto.
        * bindings/js/JSXMLHttpRequestCustom.cpp:
        (WebCore::JSXMLHttpRequest::mark): Ditto.
        * bindings/js/JSXMLHttpRequestUploadCustom.cpp:
        (WebCore::JSXMLHttpRequestUpload::mark): Ditto.
        * bindings/js/JSXSLTProcessorConstructor.cpp:
        (WebCore::constructXSLTProcessor): Ditto.
        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::finishedWithEvent): Ditto.
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::loadRequestAsynchronously): Ditto.
        (WebCore::XMLHttpRequest::dropProtection): Ditto.

2008-09-18  David Hyatt  <hyatt@apple.com>

        This patch gets a viewless scrollbar working on Mac. It is turned off
        by default.  Hit testing works.  For now the scrollbar just paints ugly
        debug rects in the place of the buttons, track and thumb.  It does match
        Aqua metrics though.

        Reviewed by Sam Weinig

        * WebCore.xcodeproj/project.pbxproj:
        * page/mac/EventHandlerMac.mm:
        (WebCore::EventHandler::passMousePressEventToScrollbar):
        * platform/ScrollbarThemeComposite.cpp:
        (WebCore::ScrollbarThemeComposite::paint):
        (WebCore::ScrollbarThemeComposite::trackPosition):
        * platform/ScrollbarThemeComposite.h:
        * platform/mac/ScrollViewMac.mm:
        (WebCore::ScrollView::addChild):
        * platform/mac/ScrollbarThemeMac.cpp:
        (WebCore::):
        (WebCore::ScrollbarThemeMac::hasButtons):
        (WebCore::ScrollbarThemeMac::hasThumb):
        (WebCore::buttonRepaintRect):
        (WebCore::ScrollbarThemeMac::backButtonRect):
        (WebCore::ScrollbarThemeMac::forwardButtonRect):
        (WebCore::trackRepaintRect):
        (WebCore::ScrollbarThemeMac::trackRect):
        (WebCore::ScrollbarThemeMac::minimumThumbLength):
        (WebCore::ScrollbarThemeMac::shouldCenterOnThumb):
        (WebCore::ScrollbarThemeMac::paintTrack):
        (WebCore::ScrollbarThemeMac::paintButton):
        (WebCore::ScrollbarThemeMac::paintThumb):
        * platform/mac/ScrollbarThemeMac.h:
        (WebCore::ScrollbarThemeMac::supportsControlTints):
        * platform/qt/ScrollbarThemeQt.cpp:
        (WebCore::ScrollbarThemeQt::trackPosition):

2008-09-18  Collin Jackson  <collinj@webkit.org>

        Build fix; added missing header file to GNUmakefile.am

        * GNUmakefile.am:

2008-09-18  Sam Weinig  <sam@webkit.org>

        Reviewed by David "the Hair" Hyatt.

        Move DataRef, SVGRenderStyle and SVGRenderStyleDefs in render/style.

        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * rendering/DataRef.h: Removed.
        * rendering/SVGRenderStyle.cpp: Removed.
        * rendering/SVGRenderStyle.h: Removed.
        * rendering/SVGRenderStyleDefs.cpp: Removed.
        * rendering/SVGRenderStyleDefs.h: Removed.
        * rendering/style/DataRef.h: Copied from rendering/DataRef.h.
        * rendering/style/SVGRenderStyle.cpp: Copied from rendering/SVGRenderStyle.cpp.
        * rendering/style/SVGRenderStyle.h: Copied from rendering/SVGRenderStyle.h.
        * rendering/style/SVGRenderStyleDefs.cpp: Copied from rendering/SVGRenderStyleDefs.cpp.
        * rendering/style/SVGRenderStyleDefs.h: Copied from rendering/SVGRenderStyleDefs.h.

2008-09-18  Mark Rowe  <mrowe@apple.com>

        Reviewed by Dan Bernstein.

        Add a means of clearing a FrameTree's name.

        * WebCore.base.exp:
        * page/FrameTree.cpp:
        (WebCore::FrameTree::clearName):
        * page/FrameTree.h:

2008-09-18  David Hyatt  <hyatt@apple.com>

        Eliminate addToSuperview from Widget, since it was only called
        by ScrollViewMac's addChild method.  Just shift the original body
        of addToSuperView into addChild.

        Reviewed by Sam Weinig

        * platform/Widget.h:
        * platform/mac/ScrollViewMac.mm:
        (WebCore::ScrollView::addChild):
        * platform/mac/WidgetMac.mm:

2008-09-18  Collin Jackson  <collinj@webkit.org>

        Reviewed by Antti Koivisto and Mark Rowe.

        Test: http/tests/misc/dns-prefetch-control.html

        https://bugs.webkit.org/show_bug.cgi?id=20690

        Invoke WebCore::prefetchDNS() on host names that appear in
        in the href of hyperlinks and <link rel="dns-prefetch">. This
        can be used to implement DNS prefetching.

        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::Document::processHttpEquiv):
        (WebCore::Document::setSecurityOrigin):
        (WebCore::Document::initDNSPrefetch):
        (WebCore::Document::parseDNSPrefetchControlHeader):
        * dom/Document.h:
        (WebCore::Document::isDNSPrefetchEnabled):
        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::parseMappedAttribute):
        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::HTMLLinkElement):
        (WebCore::HTMLLinkElement::parseMappedAttribute):
        (WebCore::HTMLLinkElement::tokenizeRelAttribute):
        (WebCore::HTMLLinkElement::process):
        * html/HTMLLinkElement.h:
        * html/PreloadScanner.cpp:
        (WebCore::PreloadScanner::processAttribute):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::begin):
        * platform/gtk/TemporaryLinkStubs.cpp:
        (WebCore::prefetchDNS):
        * platform/network/DNS.h: Added.
        * platform/network/cf/DNSCFNet.cpp: Added.
        (WebCore::prefetchDNS):
        * platform/qt/TemporaryLinkStubs.cpp:
        (WebCore::prefetchDNS):
        * platform/wx/TemporaryLinkStubs.cpp:
        (WebCore::prefetchDNS):

2008-09-18  David Hyatt  <hyatt@apple.com>

        Eliminate the convertToScreenCoordinate method on Widget, since
        ScrollView has redundant methods that already do the same thing.

        Reviewed by Sam Weinig

        * editing/mac/SelectionControllerMac.mm:
        (WebCore::SelectionController::notifyAccessibilityForSelectionChange):
        * platform/Widget.h:
        * platform/mac/WidgetMac.mm:
        (WebCore::Widget::containingWindow):

2008-09-18  David Hyatt  <hyatt@apple.com>

        Move to only one constructor for Widgets.  Rename data to m_data and make
        it have an #ifdef only for platforms that have platform-specific data (Mac
        and Gtk).

        Reviewed by Sam Weinig

        * WebCore.base.exp:
        * platform/Widget.cpp:
        (WebCore::Widget::init):
        * platform/Widget.h:
        * platform/gtk/WidgetGtk.cpp:
        (WebCore::Widget::Widget):
        (WebCore::Widget::~Widget):
        (WebCore::Widget::cursor):
        (WebCore::Widget::setCursor):
        * platform/mac/WidgetMac.mm:
        (WebCore::Widget::Widget):
        (WebCore::Widget::~Widget):
        (WebCore::Widget::addToSuperview):
        (WebCore::Widget::removeFromSuperview):
        (WebCore::Widget::beforeMouseDown):
        (WebCore::Widget::afterMouseDown):
        * platform/qt/WidgetQt.cpp:
        (WebCore::Widget::Widget):
        * platform/win/WidgetWin.cpp:
        (WebCore::Widget::Widget):
        * platform/wx/WidgetWx.cpp:
        (WebCore::Widget::Widget):

2008-09-18  David Hyatt  <hyatt@apple.com>

        Move Qt's isNPAPIPlugin boolean from Widget down to PluginView, since there
        was no reason for it to be on Widget.  This change eliminates Qt ifdefs
        from Widget.

        Reviewed by Sam Weinig

        * bindings/js/ScriptControllerQt.cpp:
        (WebCore::ScriptController::createScriptInstanceForWidget):
        * platform/qt/WidgetQt.cpp:
        (WebCore::WidgetPrivate::WidgetPrivate):
        (WebCore::WidgetPrivate::~WidgetPrivate):
        (WebCore::Widget::Widget):
        (WebCore::Widget::~Widget):
        * plugins/PluginView.cpp:
        (WebCore::PluginView::PluginView):
        * plugins/PluginView.h:
        (WebCore::PluginView::isNPAPIPlugin):
        (WebCore::PluginView::setIsNPAPIPlugin):

2008-09-18  David Hyatt  <hyatt@apple.com>

        Make geometryChanged() cross-platform on Widget.  GTK and WIN platform
        ifdefs are now gone from Widget!

        Reviewed by Sam Weinig

        * platform/Widget.h:
        (WebCore::Widget::geometryChanged):
        * platform/gtk/WidgetGtk.cpp:
        * platform/qt/WidgetQt.cpp:

2008-09-18  David Hyatt  <hyatt@apple.com>

        Consolidate convertTo/FromContainingWindow methods so that all platforms
        but Mac share the same code.

        Move convertSelfToChild and convertChildToSelf to ScrollView, since
        Widget should know nothing about children.  Make the methods cross-platform
        on ScrollView.

        Reviewed by Sam Weinig

        * platform/ScrollView.h:
        (WebCore::ScrollView::convertChildToSelf):
        (WebCore::ScrollView::convertSelfToChild):
        * platform/Widget.cpp:
        (WebCore::Widget::convertToContainingWindow):
        (WebCore::Widget::convertFromContainingWindow):
        * platform/Widget.h:
        (WebCore::Widget::geometryChanged):
        * platform/gtk/ScrollViewGtk.cpp:
        (WebCore::ScrollView::isScrollViewScrollbar):
        * platform/gtk/WidgetGtk.cpp:
        * platform/mac/ScrollViewMac.mm:
        (WebCore::ScrollView::isScrollViewScrollbar):
        * platform/mac/WidgetMac.mm:
        * platform/qt/ScrollViewQt.cpp:
        (WebCore::ScrollView::isScrollViewScrollbar):
        * platform/qt/WidgetQt.cpp:
        * platform/win/ScrollViewWin.cpp:
        (WebCore::ScrollView::isScrollViewScrollbar):
        * platform/win/WidgetWin.cpp:

2008-09-18  David Hyatt  <hyatt@apple.com>

        Make the conversion methods that go to and from some containingWindow
        cross-platform.  Implement them on Mac.

        Reviewed by Sam Weinig

        * platform/Widget.h:
        (WebCore::Widget::setContainingWindow):
        * platform/mac/WidgetMac.mm:
        (WebCore::Widget::convertFromContainingWindow):
        (WebCore::Widget::convertToContainingWindow):

2008-09-18  Sam Weinig  <sam@webkit.org>

        Rubber-stamped by David "Yeah-yeah" Hyatt.

        Cleanup RenderStyle.

        * WebCore.xcodeproj/project.pbxproj:
        * rendering/style/CounterContent.h:
        * rendering/style/RenderStyle.cpp:
        * rendering/style/RenderStyle.h:

2008-09-18  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Sam Weinig

        Fixed https://bugs.webkit.org/show_bug.cgi?id=20908
        Now TransformOperations and AnimationList no longer
        inherit from Vector<> but rather have API to access.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::computedTransform):
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::createTransformOperations):
        * page/animation/AnimationBase.cpp:
        (WebCore::blendFunc):
        * page/animation/CompositeAnimation.cpp:
        (WebCore::CompositeAnimation::updateTransitions):
        (WebCore::CompositeAnimation::updateKeyframeAnimations):
        (WebCore::CompositeAnimation::animate):
        * page/animation/ImplicitAnimation.cpp:
        (WebCore::ImplicitAnimation::validateTransformFunctionList):
        * page/animation/KeyframeAnimation.cpp:
        (WebCore::KeyframeAnimation::validateTransformFunctionList):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateReflectionStyle):
        * rendering/style/AnimationList.cpp:
        (WebCore::AnimationList::operator==):
        * rendering/style/AnimationList.h:
        (WebCore::AnimationList::operator!=):
        (WebCore::AnimationList::size):
        (WebCore::AnimationList::isEmpty):
        (WebCore::AnimationList::resize):
        (WebCore::AnimationList::remove):
        (WebCore::AnimationList::append):
        (WebCore::AnimationList::animation):
        * rendering/style/RenderStyle.cpp:
        (WebCore::StyleRareNonInheritedData::updateKeyframes):
        (WebCore::RenderStyle::applyTransform):
        (WebCore::RenderStyle::adjustAnimations):
        (WebCore::RenderStyle::adjustTransitions):
        (WebCore::RenderStyle::transitionForProperty):
        * rendering/style/RenderStyle.h:
        (WebCore::RenderStyle::hasTransform):
        * rendering/style/TransformOperations.cpp:
        (WebCore::TransformOperations::TransformOperations):
        (WebCore::TransformOperations::operator==):
        * rendering/style/TransformOperations.h:
        (WebCore::TransformOperations::apply):
        (WebCore::TransformOperations::operations):

2008-09-18  Holger Hans Peter Freyther  <zecke@selfish.org>

        Build fix.

        [qt] Build fixes after the Widget/ScrollView cleanup
        topLevel() is now root()


        * platform/qt/ScrollViewQt.cpp:
        (WebCore::ScrollView::ScrollViewPrivate::scrollBackingStore):
        (WebCore::ScrollView::addChild):
        (WebCore::ScrollView::removeChild):

2008-09-18  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Mark Rowe.

        https://bugs.webkit.org/show_bug.cgi?id=20437

        XMLTokenizer.cpp used to contain two different implementations. One was using
        libxml2 and the other was using the Qt XML StreamReader. Clean up the code by
        separating the two implementations from each other.
        Common code and some small bits are kept inside the XMLTokenizer.cpp, the Qt code
        was moved to XMLTokenizerQt.cpp and the Libxml2 based code was moved to
        XMLTokenizerLibxml2.cpp. There should be no functional changes.

        Attempt to add XMLTokenizerLibxml2.cpp to every buildsystem so the build continues
        to work.

        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * dom/XMLTokenizer.cpp:
        (WebCore::isScriptElement):
        (WebCore::castToScriptElement):
        (WebCore::XMLTokenizer::setCurrentNode):
        (WebCore::XMLTokenizer::write):
        (WebCore::XMLTokenizer::eventuallyMarkAsParserCreated):
        (WebCore::XMLTokenizer::enterText):
        (WebCore::toString):
        (WebCore::XMLTokenizer::exitText):
        (WebCore::XMLTokenizer::end):
        (WebCore::XMLTokenizer::insertErrorMessageBlock):
        * dom/XMLTokenizer.h:
        (WebCore::XMLTokenizer::wellFormed):
        * dom/XMLTokenizerLibxml2.cpp: Copied from WebCore/dom/XMLTokenizer.cpp.
        (WebCore::createMemoryParser):
        (WebCore::XMLTokenizer::XMLTokenizer):
        (WebCore::XMLTokenizer::~XMLTokenizer):
        (WebCore::XMLTokenizer::doWrite):
        (WebCore::ignorableWhitespaceHandler):
        (WebCore::XMLTokenizer::initializeParserContext):
        (WebCore::XMLTokenizer::doEnd):
        (WebCore::XMLTokenizer::lineNumber):
        (WebCore::XMLTokenizer::columnNumber):
        (WebCore::XMLTokenizer::stopParsing):
        (WebCore::XMLTokenizer::resumeParsing):
        (WebCore::parseXMLDocumentFragment):
        (WebCore::attributesStartElementNsHandler):
        (WebCore::parseAttributes):
        * dom/XMLTokenizerQt.cpp: Copied from WebCore/dom/XMLTokenizer.cpp.
        (WebCore::EntityResolver::resolveUndeclaredEntity):
        (WebCore::XMLTokenizer::XMLTokenizer):
        (WebCore::XMLTokenizer::~XMLTokenizer):
        (WebCore::XMLTokenizer::doWrite):
        (WebCore::XMLTokenizer::initializeParserContext):
        (WebCore::XMLTokenizer::doEnd):
        (WebCore::XMLTokenizer::lineNumber):
        (WebCore::XMLTokenizer::columnNumber):
        (WebCore::XMLTokenizer::stopParsing):
        (WebCore::XMLTokenizer::resumeParsing):
        (WebCore::parseXMLDocumentFragment):
        (WebCore::attributesStartElementNsHandler):
        (WebCore::parseAttributes):
        (WebCore::):

2008-09-18  Beth Dakin  <bdakin@apple.com>

        Reviewed by Geoff Garen.

        Build fix for non-Mac builds.

        * css/CSSPrimitiveValue.cpp:
        (WebCore::CSSPrimitiveValue::cssText):

2008-09-18  Peter Kasting  <pkasting@google.com>

        Reviewed by hyatt.  Landed by eseidel.

        https://bugs.webkit.org/show_bug.cgi?id=20745
        Animated GIFs do not animate properly with (at least) CG.

        * WebCore\platform\graphics\BitmapImage.cpp:
        * WebCore\platform\graphics\BitmapImage.h:
        * WebCore\platform\graphics\cairo\ImageCairo.cpp:
        * WebCore\platform\graphics\cg\ImageCG.cpp:
        * WebCore\platform\graphics\qt\ImageQt.cpp:
        * WebCore\platform\graphics\wx\ImageWx.cpp:

2008-09-18  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Beth Dakin

        <rdar://problem/6224222> AX: should not expose a <table> as an AXTable if ARIA
        role specifies otherwise

        If a <table> isn't an AXTable, the rows and cells should default to AccessibilityRenderObject

        Test: accessibility/table-with-aria-role.html

        * page/AccessibilityTable.cpp:
        (WebCore::AccessibilityTable::isTableExposableThroughAccessibility):
        (WebCore::AccessibilityTable::addChildren):
        (WebCore::AccessibilityTable::roleValue):
        (WebCore::AccessibilityTable::accessibilityIsIgnored):
        (WebCore::AccessibilityTable::title):
        * page/AccessibilityTableCell.cpp:
        (WebCore::AccessibilityTableCell::accessibilityIsIgnored):
        (WebCore::AccessibilityTableCell::isTableCell):
        (WebCore::AccessibilityTableCell::roleValue):
        * page/AccessibilityTableCell.h:
        * page/AccessibilityTableRow.cpp:
        (WebCore::AccessibilityTableRow::roleValue):
        (WebCore::AccessibilityTableRow::isTableRow):
        (WebCore::AccessibilityTableRow::accessibilityIsIgnored):
        * page/AccessibilityTableRow.h:

2008-09-18  Steve Falkenburg  <sfalken@apple.com>

        Use higher-resolution timers on all variants of Windows.

        Reviewed by Darin Adler.

        * platform/win/SharedTimerWin.cpp:
        (WebCore::setSharedTimerFireTime):


2008-09-18  David Hyatt  <hyatt@apple.com>

        Make containingWindow() and setContainingWindow() cross-platform.
        Add a root() function cross-platform so Qt doesn't have to
        define its own.

        Reviewed by Darin Adler

        * platform/Widget.cpp:
        (WebCore::Widget::root):
        * platform/Widget.h:
        (WebCore::Widget::setContainingWindow):
        * platform/gtk/WidgetGtk.cpp:
        (WebCore::Widget::Widget):
        (WebCore::Widget::containingWindow):
        * platform/mac/ScrollViewMac.mm:
        (WebCore::ScrollView::addChild):
        (WebCore::ScrollView::removeChild):
        * platform/mac/WidgetMac.mm:
        (WebCore::Widget::containingWindow):
        * platform/qt/WidgetQt.cpp:
        (WebCore::Widget::invalidateRect):
        (WebCore::Widget::containingWindow):
        * platform/win/WidgetWin.cpp:
        (WebCore::Widget::Widget):
        (WebCore::Widget::~Widget):
        (WebCore::Widget::containingWindow):

2008-09-18  Beth Dakin  <bdakin@apple.com>

        Reviewed by Dave Hyatt.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=20515 Crash upon
        parsing CSS: unicode-range: searchfield-cancel-buttonpt=-webkit-
        dashboard-region=
        and corresponding: <rdar://problem/6174100>

        This patch makes CSSParserValue::createCSSValue handle unknown
        identifiers.

        * css/CSSParserValues.cpp:
        (WebCore::CSSParserValue::createCSSValue): If we have an identifier
        with no id (an unknown identifier) create a CSSPrimitiveValue of
        type CSS_PARSER_IDENTIFIER
        * css/CSSPrimitiveValue.cpp:
        (WebCore::CSSPrimitiveValue::cssText):
        (WebCore::CSSPrimitiveValue::parserValue):
        * css/CSSPrimitiveValue.h:
        (WebCore::CSSPrimitiveValue::):

2008-09-18  Sam Weinig  <sam@webkit.org>

        Rubber-stamped by David "I'd prefer not" Hyatt.

        More the remaining class out of RenderStyle.h/cpp

        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * rendering/style/CursorData.h: Copied from rendering/style/RenderStyle.h.
        (WebCore::CursorData::CursorData):
        (WebCore::CursorData::operator==):
        (WebCore::CursorData::operator!=):
        * rendering/style/CursorList.h: Copied from rendering/style/RenderStyle.h.
        (WebCore::CursorList::operator[]):
        (WebCore::CursorList::CursorList):
        * rendering/style/RenderStyle.cpp:
        * rendering/style/RenderStyle.h:
        (WebCore::RenderStyle::deref):
        (WebCore::RenderStyle::hasOneRef):
        (WebCore::RenderStyle::InheritedFlags::operator!=):
        (WebCore::RenderStyle::NonInheritedFlags::operator!=):
        (WebCore::RenderStyle::hasBackground):
        (WebCore::RenderStyle::outlineWidth):
        (WebCore::RenderStyle::autoWrap):
        (WebCore::RenderStyle::preserveNewline):
        (WebCore::RenderStyle::collapseWhiteSpace):
        (WebCore::RenderStyle::isCollapsibleWhiteSpace):
        (WebCore::RenderStyle::breakOnlyAfterWhiteSpace):
        (WebCore::RenderStyle::breakWords):
        (WebCore::RenderStyle::outlineOffset):
        (WebCore::RenderStyle::setLeft):
        (WebCore::RenderStyle::setRight):
        (WebCore::RenderStyle::setTop):
        (WebCore::RenderStyle::setBottom):
        (WebCore::RenderStyle::setDashboardRegion):
        (WebCore::RenderStyle::setBackgroundColor):
        (WebCore::RenderStyle::setBorderImage):
        (WebCore::RenderStyle::setBorderRadius):
        (WebCore::RenderStyle::setFontDescription):
        (WebCore::RenderStyle::adjustBackgroundLayers):
        (WebCore::RenderStyle::adjustMaskLayers):
        (WebCore::RenderStyle::deleteBindingURIs):
        (WebCore::RenderStyle::inheritBindingURIs):
        (WebCore::RenderStyle::isDisplayReplacedType):
        (WebCore::RenderStyle::isDisplayInlineType):
        (WebCore::RenderStyle::isOriginalDisplayInlineType):
        * rendering/style/StyleInheritedData.cpp: Copied from rendering/style/RenderStyle.cpp.
        * rendering/style/StyleInheritedData.h: Copied from rendering/style/RenderStyle.h.
        (WebCore::StyleInheritedData::operator!=):
        * rendering/style/StyleRareInheritedData.cpp: Copied from rendering/style/RenderStyle.cpp.
        * rendering/style/StyleRareInheritedData.h: Copied from rendering/style/RenderStyle.h.
        (WebCore::StyleRareInheritedData::operator!=):
        * rendering/style/StyleRareNonInheritedData.cpp: Copied from rendering/style/RenderStyle.cpp.
        * rendering/style/StyleRareNonInheritedData.h: Copied from rendering/style/RenderStyle.h.
        * rendering/style/StyleReflection.h: Copied from rendering/style/RenderStyle.h.

2008-09-18  David Hyatt  <hyatt@apple.com>

        Move the concept of suppression invalidation on Widgets to Scrollbar
        instead.  Since this is only used by Scrollbars, there is no need for
        it to be on Widget.

        Reviewed by Sam Weinig

        * platform/Scrollbar.cpp:
        (WebCore::Scrollbar::Scrollbar):
        (WebCore::Scrollbar::invalidateRect):
        * platform/Scrollbar.h:
        (WebCore::Scrollbar::suppressInvalidation):
        (WebCore::Scrollbar::setSuppressInvalidation):
        * platform/Widget.h:
        * platform/gtk/WidgetGtk.cpp:
        (WebCore::Widget::Widget):
        (WebCore::Widget::invalidateRect):
        * platform/qt/WidgetQt.cpp:
        (WebCore::WidgetPrivate::WidgetPrivate):
        (WebCore::Widget::invalidateRect):
        * platform/win/WidgetWin.cpp:
        (WebCore::Widget::Widget):
        (WebCore::Widget::invalidateRect):

2008-09-18  David Hyatt  <hyatt@apple.com>

        Make invalidate() on Widget non-virtual and make it just call
        invalidateRect() on the boundsGeometry() of the Widget.

        Reviewed by Dan Bernstein

        * platform/Widget.h:
        (WebCore::Widget::boundsGeometry):
        (WebCore::Widget::invalidate):
        * platform/gtk/WidgetGtk.cpp:
        * platform/mac/WidgetMac.mm:
        * platform/qt/WidgetQt.cpp:
        * platform/win/WidgetWin.cpp:
        * platform/wx/WidgetWx.cpp:

2008-09-18  Sam Weinig  <sam@webkit.org>

        Rubber-stamped in exile by David Hyatt.

        Split Animation, AnimationList, BindingURI, ContentData, CounterContent,
        KeyframeList, ShadowData, StyleFlexibleBoxData and TimingFunction out of
        RenderStyle.h/cpp

        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * css/CSSStyleSelector.cpp:
        * css/CSSStyleSelector.h:
        * page/animation/CompositeAnimation.cpp:
        * page/animation/KeyframeAnimation.cpp:
        * page/animation/KeyframeAnimation.h:
        * rendering/RenderCounter.h:
        * rendering/style/Animation.cpp: Copied from rendering/style/RenderStyle.cpp.
        (WebCore::Animation::~Animation):
        (WebCore::Animation::animationsMatch):
        (WebCore::Animation::keyframeList):
        (WebCore::Animation::setAnimationKeyframe):
        * rendering/style/Animation.h: Copied from rendering/style/RenderStyle.h.
        * rendering/style/AnimationList.cpp: Copied from rendering/style/RenderStyle.cpp.
        * rendering/style/AnimationList.h: Copied from rendering/style/RenderStyle.h.
        * rendering/style/BindingURI.cpp: Copied from rendering/style/RenderStyle.cpp.
        * rendering/style/BindingURI.h: Copied from rendering/style/RenderStyle.h.
        (WebCore::BindingURI::operator!=):
        * rendering/style/ContentData.cpp: Copied from rendering/style/RenderStyle.cpp.
        * rendering/style/ContentData.h: Copied from rendering/style/RenderStyle.h.
        (WebCore::ContentData::ContentData):
        (WebCore::ContentData::~ContentData):
        * rendering/style/CounterContent.h: Copied from rendering/style/RenderStyle.h.
        (WebCore::CounterContent::CounterContent):
        * rendering/style/CounterDirectives.cpp: Copied from rendering/style/RenderStyle.cpp.
        * rendering/style/CounterDirectives.h: Copied from rendering/style/RenderStyle.h.
        (WebCore::CounterDirectives::CounterDirectives):
        * rendering/style/KeyframeList.cpp: Copied from rendering/style/RenderStyle.cpp.
        (WebCore::KeyframeList::insert):
        * rendering/style/KeyframeList.h: Copied from rendering/style/RenderStyle.h.
        (WebCore::KeyframeValue::KeyframeValue):
        (WebCore::KeyframeList::create):
        (WebCore::KeyframeList::KeyframeList):
        * rendering/style/RenderStyle.cpp:
        * rendering/style/RenderStyle.h:
        * rendering/style/ShadowData.cpp: Copied from rendering/style/RenderStyle.cpp.
        * rendering/style/ShadowData.h: Copied from rendering/style/RenderStyle.h.
        (WebCore::ShadowData::ShadowData):
        (WebCore::ShadowData::~ShadowData):
        (WebCore::ShadowData::operator!=):
        * rendering/style/StyleFlexibleBoxData.cpp: Copied from rendering/style/RenderStyle.cpp.
        * rendering/style/StyleFlexibleBoxData.h: Copied from rendering/style/RenderStyle.h.
        (WebCore::StyleFlexibleBoxData::operator!=):
        * rendering/style/TimingFunction.h: Copied from rendering/style/RenderStyle.h.
        (WebCore::TimingFunction::TimingFunction):
        (WebCore::TimingFunction::operator==):

2008-09-18  Adele Peterson  <adele@apple.com>

        Reviewed by Dan Bernstein.

        Fix RenderStyle leaks.

        * rendering/RenderTextControl.cpp: (WebCore::RenderTextControl::createSubtreeIfNeeded):

2008-09-18  Kevin McCullough  <kmccullough@apple.com>

        Accidentally checked in code.

        * html/HTMLElementFactory.cpp:
        (WebCore::frameConstructor):
        (WebCore::iframeConstructor):

2008-09-18  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Tim.

        <rdar://problem/5722310> gracefully handle too many console messages
        (20904)
        - Keep track of the most previous message and then compare it to the
        subsequent messages as they come in.  If there are multiple of the same
        message create a count that indicates the current number.

        * manual-tests/inspector/multiple-console-messages.html: Added.
        * page/inspector/Console.js:
        * page/inspector/inspector.css:

2008-09-18  Jonathon Jongsma  <jonathon@quotidian.org>

        Reviewed by Alp Toker

        https://bugs.webkit.org/show_bug.cgi?id=20830
        [GTK] Don't use deprecated pango API

        Replace deprecated pango functions with non-deprecated ones for newer
        versions of pango

        * platform/graphics/gtk/FontGtk.cpp:
        (WebCore::getDefaultPangoLayout):
        * platform/graphics/gtk/FontPlatformDataPango.cpp:
        (WebCore::FontPlatformData::FontPlatformData):

2008-09-18  Alp Toker  <alp@nuanti.com>

        Build fix for r36587. Add new sources (and sort the lists).

        * GNUmakefile.am:

2008-09-17  Sam Weinig  <sam@webkit.org>

        Fix Windows build.

        * WebCore.vcproj/WebCore.vcproj:

2008-09-17  David Hyatt  <hyatt@apple.com>

        Switch back to having frameGeometry be virtual in order to keep Mac
        the way it used to be.

        Reviewed by Sam Weinig

        * WebCore.base.exp:
        * platform/Widget.cpp:
        (WebCore::Widget::setParent):
        * platform/Widget.h:
        * platform/gtk/WidgetGtk.cpp:
        (WebCore::Widget::frameGeometry):
        (WebCore::Widget::setFrameGeometry):
        * platform/mac/WidgetMac.mm:
        (WebCore::Widget::frameGeometry):
        (WebCore::Widget::setFrameGeometry):
        * platform/qt/WidgetQt.cpp:
        (WebCore::Widget::frameGeometry):
        (WebCore::Widget::setFrameGeometry):
        * platform/win/WidgetWin.cpp:
        (WebCore::Widget::frameGeometry):
        (WebCore::Widget::setFrameGeometry):
        * platform/wx/WidgetWx.cpp:
        (WebCore::Widget::frameGeometry):
        (WebCore::Widget::setFrameGeometry):
        * plugins/PluginView.cpp:
        (WebCore::PluginView::setFrameGeometry):
        (WebCore::PluginView::geometryChanged):
        * plugins/PluginView.h:
        * plugins/gtk/PluginViewGtk.cpp:
        (WebCore::PluginView::updatePluginWidget):
        * plugins/qt/PluginViewQt.cpp:
        (WebCore::PluginView::updatePluginWidget):
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginView::updatePluginWidget):

2008-09-17  Sam Weinig  <sam@webkit.org>

        Reviewed by Mark Rowe.

        Fix assertion in DOMWindow::adjustWindowRect where we were passing
        in garbage values and were getting lucky that they were a not Nan.

        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::windowProtoFuncOpen):

2008-09-17  Sam Weinig  <sam@webkit.org>

        Fix gtk build.

        * rendering/style/MatrixTransformOperation.cpp:

2008-09-17  Sam Weinig  <sam@webkit.org>

        Rubber-stamped with love by David Hyatt.

        Split IdentityTransformOperation, MatrixTransformOperation, RotateTransformOperation,
        ScaleTransformOperation, SkewTransformOperation, StyleTransformData, TransformOperation,
        TransformOperations and TranslateTransformOperation out of RenderStyle.h/cpp

        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * css/CSSStyleSelector.cpp:
        * page/animation/AnimationBase.cpp:
        (WebCore::solveEpsilon):
        * rendering/RenderLayer.cpp:
        * rendering/style/IdentityTransformOperation.h: Copied from rendering/style/RenderStyle.h.
        * rendering/style/MatrixTransformOperation.cpp: Copied from rendering/style/RenderStyle.cpp.
        * rendering/style/MatrixTransformOperation.h: Copied from rendering/style/RenderStyle.h.
        (WebCore::MatrixTransformOperation::MatrixTransformOperation):
        * rendering/style/RenderStyle.cpp:
        * rendering/style/RenderStyle.h:
        * rendering/style/RotateTransformOperation.cpp: Copied from rendering/style/RenderStyle.cpp.
        * rendering/style/RotateTransformOperation.h: Copied from rendering/style/RenderStyle.h.
        (WebCore::RotateTransformOperation::RotateTransformOperation):
        * rendering/style/ScaleTransformOperation.cpp: Copied from rendering/style/RenderStyle.cpp.
        * rendering/style/ScaleTransformOperation.h: Copied from rendering/style/RenderStyle.h.
        (WebCore::ScaleTransformOperation::ScaleTransformOperation):
        * rendering/style/SkewTransformOperation.cpp: Copied from rendering/style/RenderStyle.cpp.
        * rendering/style/SkewTransformOperation.h: Copied from rendering/style/RenderStyle.h.
        (WebCore::SkewTransformOperation::SkewTransformOperation):
        * rendering/style/StyleTransformData.cpp: Copied from rendering/style/RenderStyle.cpp.
        * rendering/style/StyleTransformData.h: Copied from rendering/style/RenderStyle.h.
        (WebCore::StyleTransformData::operator!=):
        * rendering/style/TransformOperation.h: Copied from rendering/style/RenderStyle.h.
        (WebCore::TransformOperation::):
        * rendering/style/TransformOperations.cpp: Copied from rendering/style/RenderStyle.cpp.
        (WebCore::TransformOperations::TransformOperations):
        * rendering/style/TransformOperations.h: Copied from rendering/style/RenderStyle.h.
        (WebCore::TransformOperations::operator!=):
        * rendering/style/TranslateTransformOperation.cpp: Copied from rendering/style/RenderStyle.cpp.
        * rendering/style/TranslateTransformOperation.h: Copied from rendering/style/RenderStyle.h.
        (WebCore::TranslateTransformOperation::TranslateTransformOperation):

2008-09-17  Mark Rowe  <mrowe@apple.com>

        Build fix.

        * rendering/style/StyleDashboardRegion.h:  PlatformString.h rather than String.h.

2008-09-17  David Hyatt  <hyatt@apple.com>

        (1) Inline a bunch of methods for accessing frame geometry.
        (2) Make sure frameGeometry() works even when you have no underlying
        native widget.
        (3) Cache a frame geometry rect cross-platform (even for widgets that
        have underlying native widgets.
        (4) PluginView's updateWindow call is now a virtual function on Widget.

        Reviewed by Sam Weinig

        * ChangeLog:
        * WebCore.base.exp:
        * platform/Widget.cpp:
        (WebCore::Widget::setFrameGeometry):
        * platform/Widget.h:
        (WebCore::Widget::x):
        (WebCore::Widget::y):
        (WebCore::Widget::width):
        (WebCore::Widget::height):
        (WebCore::Widget::size):
        (WebCore::Widget::pos):
        (WebCore::Widget::frameGeometry):
        (WebCore::Widget::resize):
        (WebCore::Widget::move):
        (WebCore::Widget::isFrameView):
        (WebCore::Widget::windowClipRect):
        * platform/mac/WidgetMac.mm:
        (WebCore::Widget::~Widget):
        (WebCore::Widget::updatePlatformWidgetFrameGeometry):
        * platform/win/WidgetWin.cpp:
        (WebCore::Widget::updatePlatformWidgetFrameGeometry):
        * plugins/PluginView.cpp:
        (WebCore::PluginView::setFrameGeometry):
        (WebCore::PluginView::geometryChanged):
        * plugins/PluginView.h:
        * plugins/gtk/PluginViewGtk.cpp:
        (WebCore::PluginView::updatePlatformWidgetFrameGeometry):
        * plugins/qt/PluginViewQt.cpp:
        (WebCore::PluginView::updatePlatformWidgetFrameGeometry):
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginView::updatePlatformWidgetFrameGeometry):
        * plugins/wx/PluginViewWx.cpp:

2008-09-17  Sam Weinig  <sam@webkit.org>

        Reviewed by David "Waterman" Hyatt.

        Fix a leak of NSViews in WidgetMac.mm.

        * platform/mac/WidgetMac.mm:
        (WebCore::Widget::~Widget):

2008-09-17  Sam Weinig  <sam@webkit.org>

        Rubber-stamped by David Waterman Hyatt.

        Split FillLayer, StyleBackgroundData, StyleBoxData, StyleDashboardRegion, StyleMarqueeData
        StyleMultiColData and StyleVisualData out of RenderStyle.h/cpp

        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * rendering/style/FillLayer.cpp: Copied from rendering/style/RenderStyle.cpp.
        * rendering/style/FillLayer.h: Copied from rendering/style/RenderStyle.h.
        (WebCore::FillLayer::operator!=):
        (WebCore::FillLayer::hasImage):
        (WebCore::FillLayer::hasFixedImage):
        * rendering/style/RenderStyle.cpp:
        * rendering/style/RenderStyle.h:
        * rendering/style/StyleBackgroundData.cpp: Copied from rendering/style/RenderStyle.cpp.
        (WebCore::StyleBackgroundData::StyleBackgroundData):
        * rendering/style/StyleBackgroundData.h: Copied from rendering/style/RenderStyle.h.
        (WebCore::StyleBackgroundData::~StyleBackgroundData):
        (WebCore::StyleBackgroundData::operator!=):
        * rendering/style/StyleBoxData.cpp: Copied from rendering/style/RenderStyle.cpp.
        * rendering/style/StyleBoxData.h: Copied from rendering/style/RenderStyle.h.
        (WebCore::StyleBoxData::operator!=):
        * rendering/style/StyleDashboardRegion.h: Copied from rendering/style/RenderStyle.h.
        (WebCore::StyleDashboardRegion::operator!=):
        * rendering/style/StyleMarqueeData.cpp: Copied from rendering/style/RenderStyle.cpp.
        * rendering/style/StyleMarqueeData.h: Copied from rendering/style/RenderStyle.h.
        (WebCore::StyleMarqueeData::operator!=):
        * rendering/style/StyleMultiColData.cpp: Copied from rendering/style/RenderStyle.cpp.
        * rendering/style/StyleMultiColData.h: Copied from rendering/style/RenderStyle.h.
        (WebCore::StyleMultiColData::operator!=):
        (WebCore::StyleMultiColData::ruleWidth):
        * rendering/style/StyleVisualData.cpp: Copied from rendering/style/RenderStyle.cpp.
        * rendering/style/StyleVisualData.h: Copied from rendering/style/RenderStyle.h.
        (WebCore::StyleVisualData::operator==):

2008-09-17  David Hyatt  <hyatt@apple.com>

        Remove WidgetClient from Widget.

        Reviewed by Sam Weinig

        * WebCore.xcodeproj/project.pbxproj:
        * platform/Widget.h:
        (WebCore::Widget::setClient):
        (WebCore::Widget::client):
        * platform/WidgetClient.h: Removed.
        * platform/gtk/WidgetGtk.cpp:
        * platform/mac/WidgetMac.mm:
        (WebCore::Widget::Widget):
        (WebCore::Widget::show):
        (WebCore::Widget::hide):
        * platform/qt/WidgetQt.cpp:
        (WebCore::WidgetPrivate::WidgetPrivate):
        * platform/win/WidgetWin.cpp:
        (WebCore::Widget::Widget):
        * platform/wx/WidgetWx.cpp:
        (WebCore::Widget::Widget):

2008-09-17  David Hyatt  <hyatt@apple.com>

        Remove isEnabled/setEnabled from Widget.  The concept of being enabled now
        only applies to Scrollbars so the method has been moved there and made
        cross-platform.  Scrollbar subclasses that have a corresponding native
        widget can subclass setEnabled to change the enabled state of the native
        widget.

        Reviewed by Sam Weinig & Darin Adler

        * WebCore.base.exp:
        * platform/Scrollbar.cpp:
        (WebCore::Scrollbar::Scrollbar):
        * platform/Scrollbar.h:
        (WebCore::Scrollbar::enabled):
        (WebCore::Scrollbar::setEnabled):
        * platform/Widget.h:
        * platform/gtk/ScrollbarGtk.cpp:
        (ScrollbarGtk::setEnabled):
        * platform/gtk/ScrollbarGtk.h:
        * platform/gtk/WidgetGtk.cpp:
        * platform/mac/ScrollbarMac.h:
        * platform/mac/ScrollbarMac.mm:
        (WebCore::ScrollbarMac::scrollbarHit):
        (WebCore::ScrollbarMac::setEnabled):
        * platform/mac/WidgetMac.mm:
        * platform/qt/WidgetQt.cpp:
        (WebCore::WidgetPrivate::WidgetPrivate):
        * platform/win/WidgetWin.cpp:
        (WebCore::Widget::Widget):
        * platform/wx/WidgetWx.cpp:

2008-09-17  Sam Weinig  <sam@webkit.org>

        Rubber-stamped by David Hyatt.

        Split all RenderStyle enums into their own file.

        * GNUmakefile.am:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * rendering/style/BorderValue.h:
        * rendering/style/CollapsedBorderValue.h:
        * rendering/style/RenderStyle.h:
        * rendering/style/RenderStyleConstants.h: Copied from rendering/style/RenderStyle.h.
        (WebCore::):
        * rendering/style/StyleCachedImage.h:
        * rendering/style/StyleGeneratedImage.h:
        * rendering/style/StyleImage.h:

2008-09-17  Steve Falkenburg  <sfalken@apple.com>

        Add back isFrameView check to fix failed assertion during scroll bar teardown.

        Reviewed by Dave Hyatt.

        * platform/Scrollbar.cpp:
        (WebCore::Scrollbar::setParent):

2008-09-17  Brady Eidson  <beidson@apple.com>

        Reviewed by Mac build fix

        * WebCore.xcodeproj/project.pbxproj: Send appropriate headers to WebKit

2008-09-17  Steve Falkenburg  <sfalken@apple.com>

        Fix build.

        * platform/win/ScrollViewWin.cpp:
        (WebCore::ScrollView::setParentVisible):
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginView::init):

2008-09-17  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Simon.

        [QtWebKit] Implement error handling in TextCodecQt::decode
        Use the QTextCodec parsing state to set the sawError out variable. This
        is needed to pass Test 70 of acid3. The test case for this bug is
        fast/encoding/invalid-xml.html that is now partially passed. To pass
        it completely the Qt text codecs need to be adjusted to have proper
        error handling.

        * platform/text/qt/TextCodecQt.cpp:
        (WebCore::TextCodecQt::decode):

2008-09-17  Sam Weinig  <sam@webkit.org>

        Rubber-stamped by Dave Hyatt.

        Split BorderData, BorderValue, CollapsedBorderValue, OutlineValue and StyleSurroundData
        out of RenderStyle.h/cpp

        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * rendering/style/BorderData.h: Copied from rendering/style/RenderStyle.h.
        (WebCore::BorderData::hasBorderRadius):
        (WebCore::BorderData::borderLeftWidth):
        (WebCore::BorderData::borderRightWidth):
        (WebCore::BorderData::borderTopWidth):
        (WebCore::BorderData::borderBottomWidth):
        (WebCore::BorderData::operator!=):
        * rendering/style/BorderValue.h: Copied from rendering/style/RenderStyle.h.
        (WebCore::):
        (WebCore::BorderValue::BorderValue):
        (WebCore::BorderValue::nonZero):
        (WebCore::BorderValue::isTransparent):
        (WebCore::BorderValue::isVisible):
        * rendering/style/CollapsedBorderValue.h: Copied from rendering/style/RenderStyle.h.
        (WebCore::):
        (WebCore::CollapsedBorderValue::CollapsedBorderValue):
        (WebCore::CollapsedBorderValue::operator==):
        * rendering/style/OutlineValue.h: Copied from rendering/style/RenderStyle.h.
        (WebCore::OutlineValue::OutlineValue):
        * rendering/style/RenderStyle.cpp:
        * rendering/style/RenderStyle.h:
        * rendering/style/StyleSurroundData.cpp: Copied from rendering/style/RenderStyle.cpp.
        * rendering/style/StyleSurroundData.h: Copied from rendering/style/RenderStyle.h.
        (WebCore::StyleSurroundData::operator!=):

2008-09-17  Beth Dakin  <bdakin@apple.com>

        Reviewed by Darin Adler.

        This is a better fix for: Invalid CSS code crashes Safari
        https://bugs.webkit.org/show_bug.cgi?id=20512

        The spec indicates that the only valid input for a counter is a
        number or an identifier. So that is exactly what we allow.

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseCounterContent):

2008-09-17  Alp Toker  <alp@nuanti.com>

        GTK+ build fix. Adapt to use PlatformWidget functions.

        * platform/gtk/ScrollViewGtk.cpp:
        (WebCore::ScrollViewScrollbar::geometryChanged):
        (WebCore::ScrollView::addChild):
        (WebCore::ScrollView::removeChild):
        * platform/gtk/ScrollbarGtk.cpp:
        (ScrollbarGtk::ScrollbarGtk):
        (ScrollbarGtk::~ScrollbarGtk):
        (ScrollbarGtk::geometryChanged):

2008-09-17  Sam Weinig  <sam@webkit.org>

        Reviewed by Adele Peterson.

        Patch for <rdar://problem/6133884>
        Calling window.resizeTo() on a subframe shouldn't change the window size

        Test: fast/dom/Window/window-resize-and-move-sub-frame.html

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::moveBy):
        (WebCore::DOMWindow::moveTo):
        (WebCore::DOMWindow::resizeBy):
        (WebCore::DOMWindow::resizeTo):

2008-09-17  Beth Dakin  <bdakin@apple.com>

        Reviewed by Adam Roben.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=20512 Invalid CSS
        code crashes Safari
        and corresponding: <rdar://problem/6173832>

        Reading through the spec, it seems like a function is not valid
        input for a counter. So this patch checks for that and bails in the
        case of invalid input.

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseCounterContent):

2008-09-17  Greg Bolsinga  <bolsinga@apple.com>

        Reviewed by Antti Koivisto.

        Fix <rdar://problem/6227089>
        Crash in WebCore::Frame::setNeedsReapplyStyles()

        View is null checked elsewhere too.

        * page/Frame.cpp:
        (WebCore::Frame::setNeedsReapplyStyles):

2008-09-17  David Hyatt  <hyatt@apple.com>

        Make the notion of having a native widget backing a Widget cross-platform.
        The PlatformWidget abstraction (which already existed) is used for this.
             Windows = HWND
             Qt = QWidget
             Mac = NSView
             wx = wxWindow
             Gtk = GtkWidget

        There are new cross-platform methods that replace all of the unique
        platform-specific methods.
             platformWidget()
             setPlatformWidget()

        For plugins, on every platform except Qt on Windows, the plugin's native
        widget is now stored in the Widget base class.  Since Qt on Windows uses
        HWNDs for plugins instead of QWidget, it is the only platform to keep the
        m_window variable in PluginView.

        Reviewed by Sam Weinig

        * WebCore.base.exp:
        * bindings/js/ScriptControllerMac.mm:
        (WebCore::ScriptController::createScriptInstanceForWidget):
        * page/mac/AccessibilityObjectWrapper.mm:
        (-[AccessibilityObjectWrapper attachmentView]):
        (-[AccessibilityObjectWrapper accessibilityAttributeValue:]):
        * page/mac/EventHandlerMac.mm:
        (WebCore::EventHandler::passMouseDownEventToWidget):
        (WebCore::EventHandler::mouseDownViewIfStillGood):
        (WebCore::EventHandler::passWheelEventToWidget):
        (WebCore::EventHandler::sendFakeEventsAfterWidgetTracking):
        * platform/Widget.cpp:
        (WebCore::Widget::init):
        (WebCore::Widget::setParent):
        (WebCore::Widget::releasePlatformWidget):
        (WebCore::Widget::retainPlatformWidget):
        * platform/Widget.h:
        (WebCore::Widget::platformWidget):
        (WebCore::Widget::setPlatformWidget):
        * platform/gtk/WidgetGtk.cpp:
        (WebCore::Widget::Widget):
        (WebCore::Widget::setFocus):
        (WebCore::gdkDrawable):
        (WebCore::Widget::setCursor):
        (WebCore::Widget::show):
        (WebCore::Widget::hide):
        (WebCore::Widget::setEnabled):
        (WebCore::Widget::isEnabled):
        (WebCore::Widget::paint):
        * platform/mac/PlatformScreenMac.mm:
        (WebCore::screenRect):
        (WebCore::screenAvailableRect):
        * platform/mac/ScrollViewMac.mm:
        (WebCore::ScrollView::scrollView):
        (WebCore::ScrollView::update):
        (WebCore::ScrollView::inWindow):
        * platform/mac/ScrollbarMac.mm:
        (WebCore::ScrollbarMac::ScrollbarMac):
        (WebCore::ScrollbarMac::~ScrollbarMac):
        (WebCore::ScrollbarMac::updateThumbPosition):
        (WebCore::ScrollbarMac::updateThumbProportion):
        (WebCore::ScrollbarMac::scrollbarHit):
        * platform/mac/WidgetMac.mm:
        (WebCore::Widget::Widget):
        (WebCore::Widget::setEnabled):
        (WebCore::Widget::isEnabled):
        (WebCore::Widget::setFocus):
        (WebCore::Widget::getOuterView):
        (WebCore::Widget::paint):
        (WebCore::Widget::invalidate):
        (WebCore::Widget::invalidateRect):
        (WebCore::Widget::setIsSelected):
        (WebCore::Widget::releasePlatformWidget):
        (WebCore::Widget::retainPlatformWidget):
        * platform/qt/WidgetQt.cpp:
        (WebCore::WidgetPrivate::WidgetPrivate):
        (WebCore::Widget::Widget):
        (WebCore::Widget::setFrameGeometry):
        (WebCore::Widget::show):
        (WebCore::Widget::hide):
        (WebCore::Widget::isEnabled):
        (WebCore::Widget::setEnabled):
        (WebCore::Widget::invalidateRect):
        (WebCore::Widget::containingWindow):
        * platform/win/WidgetWin.cpp:
        (WebCore::Widget::Widget):
        * platform/wx/WidgetWx.cpp:
        (WebCore::Widget::Widget):
        (WebCore::Widget::frameGeometry):
        (WebCore::Widget::setFocus):
        (WebCore::Widget::setCursor):
        (WebCore::Widget::show):
        (WebCore::Widget::hide):
        (WebCore::Widget::setFrameGeometry):
        (WebCore::Widget::setEnabled):
        (WebCore::Widget::isEnabled):
        (WebCore::Widget::invalidate):
        (WebCore::Widget::invalidateRect):
        (WebCore::Widget::paint):
        * plugins/PluginView.cpp:
        (WebCore::PluginView::PluginView):
        * plugins/PluginView.h:
        (WebCore::PluginView::platformPluginWidget):
        * plugins/gtk/PluginViewGtk.cpp:
        (WebCore::PluginView::updateWindow):
        (WebCore::PluginView::setFocus):
        (WebCore::PluginView::show):
        (WebCore::PluginView::hide):
        (WebCore::PluginView::setParent):
        (WebCore::PluginView::setNPWindowRect):
        (WebCore::PluginView::setParentVisible):
        (WebCore::PluginView::getValue):
        (WebCore::PluginView::forceRedraw):
        (WebCore::PluginView::init):
        * plugins/qt/PluginViewQt.cpp:
        (WebCore::PluginView::updateWindow):
        (WebCore::PluginView::setFocus):
        (WebCore::PluginView::show):
        (WebCore::PluginView::hide):
        (WebCore::PluginView::setParent):
        (WebCore::PluginView::setNPWindowRect):
        (WebCore::PluginView::setParentVisible):
        (WebCore::PluginView::getValue):
        (WebCore::PluginView::~PluginView):
        (WebCore::PluginView::init):
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginView::updateWindow):
        (WebCore::PluginView::setFocus):
        (WebCore::PluginView::show):
        (WebCore::PluginView::hide):
        (WebCore::PluginView::paint):
        (WebCore::PluginView::setParent):
        (WebCore::PluginView::setParentVisible):
        (WebCore::PluginView::setNPWindowRect):
        (WebCore::PluginView::stop):
        (WebCore::PluginView::invalidateRect):
        (WebCore::PluginView::forceRedraw):
        (WebCore::PluginView::~PluginView):
        (WebCore::PluginView::init):

2008-09-17  Sam Weinig  <sam@webkit.org>

        Fix assert.

        * platform/Widget.cpp:
        (WebCore::Widget::setParent):

2008-09-17  David Hyatt  <hyatt@apple.com>

        Beginnings of Widget refactoring (in order to make the mixing of
        widgets with and without corresponding native widgets more cross-platform).

        This first patch makes the concept of a parent ScrollView cross-platform.

        Note the similarity of the show/hide methods on the three PluginViews.  This
        will be refactored better in a later patch so that they can all share
        a base class Widget show/hide method.  For now the changes were made
        simply to be able to bring WidgetWin's setParent method up into Widget.

        Reviewed by Sam Weinig

        * WebCore.base.exp:
        * platform/ScrollView.h:
        * platform/Widget.cpp:
        (WebCore::Widget::init):
        (WebCore::Widget::setParent):
        * platform/Widget.h:
        (WebCore::Widget::isSelfVisible):
        (WebCore::Widget::isParentVisible):
        (WebCore::Widget::isVisible):
        (WebCore::Widget::setParentVisible):
        (WebCore::Widget::isPluginView):
        (WebCore::Widget::parent):
        (WebCore::Widget::handleEvent):
        (WebCore::Widget::geometryChanged):
        * platform/gtk/WidgetGtk.cpp:
        (WebCore::Widget::Widget):
        * platform/mac/ScrollViewMac.mm:
        (WebCore::ScrollView::addChild):
        (WebCore::ScrollView::removeChild):
        * platform/mac/ScrollbarMac.mm:
        (WebCore::ScrollbarMac::~ScrollbarMac):
        * platform/mac/WidgetMac.mm:
        (WebCore::Widget::Widget):
        (WebCore::Widget::~Widget):
        * platform/qt/WidgetQt.cpp:
        (WebCore::WidgetPrivate::WidgetPrivate):
        (WebCore::Widget::Widget):
        (WebCore::Widget::topLevel):
        * platform/win/ScrollViewWin.cpp:
        (WebCore::ScrollView::ScrollViewPrivate::ScrollViewPrivate):
        (WebCore::ScrollView::setAncestorVisible):
        (WebCore::ScrollView::show):
        (WebCore::ScrollView::hide):
        * platform/win/WidgetWin.cpp:
        (WebCore::Widget::Widget):
        (WebCore::Widget::setParent):
        * platform/wx/WidgetWx.cpp:
        (WebCore::Widget::Widget):
        * plugins/PluginView.cpp:
        (WebCore::PluginView::PluginView):
        * plugins/PluginView.h:
        * plugins/gtk/PluginViewGtk.cpp:
        (WebCore::PluginView::show):
        (WebCore::PluginView::hide):
        (WebCore::PluginView::setParentVisible):
        * plugins/qt/PluginViewQt.cpp:
        (WebCore::PluginView::show):
        (WebCore::PluginView::hide):
        (WebCore::PluginView::setParentVisible):
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginView::show):
        (WebCore::PluginView::hide):
        (WebCore::PluginView::setParentVisible):

2008-09-17  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Adam Roben.

        <rdar://problem/6219577> Spew in console at launch about encoding mappings when running with ICU 4.0

        * platform/text/TextCodecICU.cpp:
        (WebCore::TextCodecICU::registerExtendedEncodingNames): Updated for new encoding names.

2008-09-17  Tor Arne Vestbø  <tavestbo@trolltech.com>

        Fix the QtWebKit/Mac build

        * platform/qt/ScrollViewQt.cpp: add include

2008-09-17  David Hyatt  <hyatt@apple.com>

        Add a #define to control whether or not to use an NSScroller on Mac.
        This ifdef will allow the new NSView-less NSScroller on Mac to be
        developed side by side with the current one.

        The new scroller paints a debug red if turned on (although due to
        Widget issues you won't see anything paint yet).

        Reviewed by olliej

        * platform/Scrollbar.cpp:
        * platform/Scrollbar.h:
        * platform/mac/ScrollbarMac.h:
        * platform/mac/ScrollbarMac.mm:
        * platform/mac/ScrollbarThemeMac.cpp:
        (WebCore::ScrollbarThemeMac::paint):
        * platform/mac/ScrollbarThemeMac.h:

2008-09-16  Marco Barisione  <marco.barisione@collabora.co.uk>

        Reviewed by Alp Toker.

        http://bugs.webkit.org/show_bug.cgi?id=20854
        [GTK] Windows can be not realized in ScrollView::update

        Do not call gdk_window_invalidate_rect on a non-realized GtkWidget.

        * platform/gtk/ScrollViewGtk.cpp:
        (WebCore::ScrollView::update):

2008-09-16  Alp Toker  <alp@nuanti.com>

        Suggested by Dave Hyatt.

        Build fix and cleanup. Rename ScrollBar to Scrollbar.

        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * editing/EditorCommand.cpp:
        * page/EventHandler.cpp:
        * page/gtk/EventHandlerGtk.cpp:
        * page/mac/EventHandlerMac.mm:
        * page/mac/FrameMac.mm:
        * page/qt/EventHandlerQt.cpp:
        * page/wx/EventHandlerWx.cpp:
        * platform/PopupMenu.h:
        * platform/ScrollBar.cpp: Removed.
        * platform/ScrollBar.h: Removed.
        * platform/Scrollbar.cpp: Copied from WebCore/platform/ScrollBar.cpp.
        * platform/Scrollbar.h: Copied from WebCore/platform/ScrollBar.h.
        * platform/gtk/ScrollbarGtk.cpp:
        (ScrollbarGtk::ScrollbarGtk):
        * platform/gtk/ScrollbarGtk.h:
        * platform/mac/ScrollbarMac.h:
        * platform/qt/ScrollViewQt.cpp:
        * platform/qt/ScrollbarQt.cpp:
        * platform/qt/ScrollbarThemeQt.cpp:
        * platform/win/PlatformScrollBar.h:
        * platform/win/PopupMenuWin.cpp:
        * platform/win/ScrollViewWin.cpp:
        * platform/win/ScrollbarThemeWin.cpp:
        * platform/wx/ScrollViewWx.cpp:
        * platform/wx/TemporaryLinkStubs.cpp:
        * rendering/HitTestResult.cpp:
        * rendering/RenderLayer.cpp:
        * rendering/RenderTextControl.cpp:

2008-09-16  David Hyatt  <hyatt@apple.com>

        Fix Qt build bustage by making moveThumb a member of Scrollbar so that
        it can be called from ScrollbarQt.

        * platform/ScrollBar.cpp:
        (WebCore::Scrollbar::moveThumb):
        (WebCore::Scrollbar::handleMouseMoveEvent):
        (WebCore::Scrollbar::handleMousePressEvent):
        * platform/ScrollBar.h:
        * platform/qt/ScrollViewQt.cpp:
        * platform/qt/ScrollbarQt.cpp:
        (WebCore::Scrollbar::handleContextMenuEvent):

2008-09-16  David Hyatt  <hyatt@apple.com>

        Eliminate PlatformScrollbar.  Mac and Gtk now have subclasses for their
        native-widget scrollbars (ScrollbarMac and ScrollbarGtk).  Other platforms
        now just use Scrollbar.

        Reviewed by Sam Weinig

        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * page/mac/FrameMac.mm:
        * platform/PopupMenu.h:
        (WebCore::PopupMenu::scrollbar):
        * platform/ScrollBar.cpp:
        (WebCore::createNativeScrollbar):
        * platform/ScrollBar.h:
        * platform/gtk/PlatformScrollBar.h: Removed.
        * platform/gtk/PlatformScrollBarGtk.cpp: Removed.
        * platform/gtk/ScrollbarGtk.cpp: Copied from platform/gtk/PlatformScrollBarGtk.cpp.
        (gtkScrollEventCallback):
        (ScrollbarGtk::ScrollbarGtk):
        (ScrollbarGtk::~ScrollbarGtk):
        (ScrollbarGtk::updateThumbPosition):
        (ScrollbarGtk::updateThumbProportion):
        (ScrollbarGtk::setFrameGeometry):
        (ScrollbarGtk::geometryChanged):
        (ScrollbarGtk::gtkValueChanged):
        * platform/gtk/ScrollbarGtk.h: Copied from platform/gtk/PlatformScrollBar.h.
        * platform/mac/PlatformScrollBar.h: Removed.
        * platform/mac/PlatformScrollBarMac.mm: Removed.
        * platform/mac/ScrollbarMac.h: Copied from platform/mac/PlatformScrollBar.h.
        * platform/mac/ScrollbarMac.mm: Copied from platform/mac/PlatformScrollBarMac.mm.
        (-[WebCoreScrollBar initWithScrollbarMac:]):
        (-[WebCoreScrollBar detachScrollbarMac]):
        (WebCore::Scrollbar::createNativeScrollbar):
        (WebCore::ScrollbarMac::ScrollbarMac):
        (WebCore::ScrollbarMac::~ScrollbarMac):
        (WebCore::ScrollbarMac::updateThumbPosition):
        (WebCore::ScrollbarMac::updateThumbProportion):
        (WebCore::ScrollbarMac::scrollbarHit):
        * platform/qt/PlatformScrollBar.h: Removed.
        * platform/qt/PlatformScrollBarQt.cpp: Removed.
        * platform/qt/ScrollbarQt.cpp: Copied from platform/qt/PlatformScrollBarQt.cpp.
        (WebCore::Scrollbar::handleContextMenuEvent):
        * rendering/HitTestResult.cpp:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::createScrollbar):
        (WebCore::RenderLayer::destroyScrollbar):
        * rendering/RenderLayer.h:
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::~RenderListBox):
        (WebCore::RenderListBox::updateFromElement):
        (WebCore::RenderListBox::isPointInOverflowControl):
        * rendering/RenderObject.h:
        * rendering/RenderTextControl.cpp:

2008-09-16  David Hyatt  <hyatt@apple.com>

        Make the scrollbar resizer-dodging logic cross-platform in the
        Scrollbar class.

        Reviewed by Sam Weinig

        * platform/ScrollBar.cpp:
        (WebCore::Scrollbar::setFrameGeometry):
        (WebCore::Scrollbar::setParent):
        (WebCore::Scrollbar::windowClipRect):
        * platform/ScrollBar.h:
        * platform/ScrollView.h:
        (WebCore::ScrollView::windowResizerRect):
        (WebCore::ScrollView::resizerOverlapsContent):
        (WebCore::ScrollView::adjustOverlappingScrollbarCount):
        * platform/Widget.h:
        (WebCore::Widget::setParent):
        * platform/mac/WidgetMac.mm:
        (WebCore::Widget::convertToContainingWindow):
        * platform/win/PlatformScrollBar.h:
        * platform/win/PlatformScrollBarWin.cpp:

2008-09-16  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        - fix https://bugs.webkit.org/show_bug.cgi?id=15129
          <rdar://problem/4644824> adding a new line with DOM does unnecessary additional repaint

        Covered by fast/repaint/4776765.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::layoutBlock): Avoid repainting this object if it
        did not have layout in the beginning.
        (WebCore::RenderBlock::layoutBlockChildren): If a child did not have
        layout in the beginning, repaint it in its new position, to compensate
        for the above (regardless of whether it "moved").
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::checkForRepaintDuringLayout): Added a comment
        about generalizing this fix in the future.

2008-09-16  Dan Bernstein  <mitz@apple.com>

        Reviewed by Dave Hyatt.

        - fix https://bugs.webkit.org/show_bug.cgi?id=15384
          Div does not notice when grandparent changes height

        Test: fast/block/basic/quirk-percent-height-grandchild.html

        - fix https://bugs.webkit.org/show_bug.cgi?id=20714
          Resizing Gmail inbox vertically results in whitespace at the bottom of the window

        Test: fast/replaced/percent-height-in-anonymous-block.html

        Added a two-way mapping between boxes with percentage heights and
        their non-parent ancestors up to the one the height is computed relative
        to. In quirks mode (the first bug), this can be any number of containing
        block with auto height. In strict mode (the second bug) this can be
        the containing block of an anonymous block containing a replaced
        element.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::~RenderBlock): Added code to remove the all the
        mapping to/from this block to percentage-height descendants.
        (WebCore::RenderBlock::layoutBlockChildren): Added code to mark
        percentage-height descendants (and their containing block ancestry chain
        up to this block) for layout. This ensures that those descendants whose
        height depends on the height of this block (or an ancestor) are updated.
        (WebCore::RenderBlock::addPercentHeightDescendant): Added. Establishes
        a two-way mapping between this block and the given box.
        (WebCore::RenderBlock::removePercentHeightDescendant): Added. Removes
        all the mapping to/from this box.
        * rendering/RenderBlock.h:
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::setStyle): Added calls to
        removePercentHeightDescendant() when style changes and the box
        previously had a percentage height. An exception is when the style
        change does not require layout, in which case the box still has
        a percentage height and the mappings are valid. In all other cases,
        any required mappings will be (re-)established during layout.
        (WebCore::RenderBox::destroy): Added a call to
        removePercentHeightDescendant.
        (WebCore::RenderBox::calcPercentageHeight): Added code that, in quirks
        mode, if a higher-than-parent containing block is affecting the box's
        height, creates a mapping between the box and that block.
        (WebCore::RenderBox::calcReplacedHeightUsing): Changed to skip over
        anonymous containing blocks, if any, and when that happens, use
        addPercentHeightDescendant() to ensure that the non-anonymous block
        is aware of the dependent percent-height box.

2008-09-16  Dirk Schulze  <vbs85@gmx.de>

        Reviewed by Oliver Hunt and Alp Toker.

        Implemented toDataURL in Cairo. Only PNG support
        at the moment.

        Qt, Cairo and wx require toDataURL implementations
        https://bugs.webkit.org/show_bug.cgi?id=17719

        * platform/MIMETypeRegistry.cpp:
        (WebCore::initializeSupportedImageMIMETypesForEncoding):
        * platform/graphics/cairo/ImageBufferCairo.cpp:
        (WebCore::ImageBuffer::ImageBuffer):
        (WebCore::writeFunction):
        (WebCore::ImageBuffer::toDataURL):

2008-09-16  Tor Arne Vestbø  <tavestbo@trolltech.com>

        Reviewed by Simon.

        Hide unused media element controls in the QtWebKit port

        * platform/qt/html4-adjustments-qt.css

2008-09-16  Ariya Hidayat  <ariya.hidayat@trolltech.com>

        Reviewed by Simon.

        Fix compilation of the Qt scrollbar code.

        * platform/qt/PlatformScrollBarQt.cpp:
        (WebCore::scPart):
        (WebCore::styleOptionSlider):
        (WebCore::thumbLength):
        (WebCore::pixelPosToRangeValue):
        (WebCore::PlatformScrollbar::handleContextMenuEvent):

2008-09-16  Adam Treat  <treat@kde.org>

        Reviewed by Anders Carlsson.

        Prevent accesses off of the end of the buffer introduced in r36450
        and when checking for descriptions of mime. Also, coding style fix.

        * plugins/qt/PluginPackageQt.cpp:
        (WebCore::PluginPackage::fetchInfo):

2008-09-15  Rob Buis  <buis@kde.org>

        Reviewed by Eric.

        https://bugs.webkit.org/show_bug.cgi?id=20634
        SVG transform attribute is ignored by <use> in <clipPath>

        Transform the paths with the local transform when part
        of a clip path.

        Test: svg/custom/use-clipped-transform.svg

        * svg/SVGClipPathElement.cpp:
        (WebCore::SVGClipPathElement::canvasResource):
        * svg/SVGStyledTransformableElement.cpp:
        (WebCore::SVGStyledTransformableElement::toClipPath):
        * svg/SVGStyledTransformableElement.h:

2008-09-15  Dave Hyatt  <hyatt@apple.com>

        Convert Qt over to its ScrollbarTheme.  Add cross-platform support for jumping the thumb location directly
        to a pressed location on the track (this is done with the middle mouse on Qt and with Shift-Click on Windows).

        Reviewed by Sam Weinig

        * platform/ScrollBar.cpp:
        (WebCore::thumbUnderMouse):
        (WebCore::Scrollbar::autoscrollPressedPart):
        (WebCore::Scrollbar::startTimerIfNeeded):
        (WebCore::moveThumb):
        (WebCore::Scrollbar::handleMouseMoveEvent):
        (WebCore::Scrollbar::handleMousePressEvent):
        * platform/ScrollBar.h:
        (WebCore::Scrollbar::pressedPos):
        (WebCore::Scrollbar::pixelStep):
        (WebCore::Scrollbar::setPressedPos):
        * platform/ScrollbarTheme.h:
        (WebCore::ScrollbarTheme::thumbPosition):
        (WebCore::ScrollbarTheme::thumbLength):
        (WebCore::ScrollbarTheme::trackPosition):
        (WebCore::ScrollbarTheme::trackLength):
        * platform/ScrollbarThemeComposite.cpp:
        (WebCore::ScrollbarThemeComposite::trackPosition):
        * platform/ScrollbarThemeComposite.h:
        * platform/qt/PlatformScrollBarQt.cpp:
        (WebCore::PlatformScrollbar::PlatformScrollbar):
        (WebCore::):
        * platform/qt/ScrollbarThemeQt.cpp:
        (WebCore::styleOptionSlider):
        (WebCore::ScrollbarThemeQt::hitTest):
        (WebCore::ScrollbarThemeQt::shouldCenterOnThumb):
        (WebCore::ScrollbarThemeQt::invalidatePart):
        (WebCore::ScrollbarThemeQt::thumbPosition):
        (WebCore::):
        * platform/qt/ScrollbarThemeQt.h:
        * platform/win/ScrollbarThemeSafari.cpp:
        (WebCore::ScrollbarThemeSafari::shouldCenterOnThumb):
        * platform/win/ScrollbarThemeSafari.h:
        * platform/win/ScrollbarThemeWin.cpp:
        (WebCore::ScrollbarThemeWin::shouldCenterOnThumb):
        * platform/win/ScrollbarThemeWin.h:

2008-09-15  David Smith  <catfish.man@gmail.com>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=20180

        Cache the result of parsing the an+b expression in :nth-child(an+b). Roughly a 2x speedup for :nth-child on SlickSpeed.

        * GNUmakefile.am: Add CSSNthSelector
        * WebCore.pro: Add CSSNthSelector
        * WebCore.vcproj/WebCore.vcproj: Add CSSNthSelector
        * WebCore.xcodeproj/project.pbxproj: Add CSSNthSelector
        * css/CSSGrammar.y: Create CSSNthSelectors instead of CSSSelectors for :nth-*
        * css/CSSNthSelector.cpp: Added.
        (WebCore::CSSNthSelector::parseNth): Moved from CSSStyleSelector and modified to cache
        (WebCore::CSSNthSelector::matchNth): Moved from CSSStyleSelector and modified to use the cache
        * css/CSSNthSelector.h: Added.
        (WebCore::CSSNthSelector::CSSNthSelector):
        (WebCore::CSSNthSelector::~CSSNthSelector):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::createFloatingNthSelector):
        * css/CSSParser.h:
        * css/CSSSelector.h: Use the free bit here to store a flag for CSSNthSelector
        (WebCore::CSSSelector::CSSSelector):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::SelectorChecker::checkOneSelector): Take advantage of knowing that all :nth-* selectors are CSSNthSelectors

2008-09-15  Matt Lilek  <webkit@mattlilek.com>

        Reviewed by Tim Hatcher.

        Clean up some inspector JS callbacks to remove an extra return.

        * page/InspectorController.cpp:
        (WebCore::hideDOMNodeHighlight):
        (WebCore::loaded):
        (WebCore::unloading):
        (WebCore::attach):
        (WebCore::detach):
        (WebCore::startDebuggingAndReloadInspectedPage):
        (WebCore::stopDebugging):
        (WebCore::debuggerAttached):
        (WebCore::pauseOnExceptions):
        (WebCore::pauseInDebugger):
        (WebCore::resumeDebugger):
        (WebCore::stepOverStatementInDebugger):
        (WebCore::stepIntoStatementInDebugger):
        (WebCore::stepOutOfFunctionInDebugger):
        (WebCore::isWindowVisible):
        (WebCore::closeWindow):

2008-09-15  Dave Hyatt  <hyatt@apple.com>

        Completely switch Windows scrollbars over to ScrollbarTheme.  The Aqua windows scrollbar and native scrollbar
        now share most of their code.

        Also removing mini size scrollbar support, since it would have crashed Windows had it ever been used, and it
        also is never used in our code anyway.

        Reviewed by Sam Weinig

        * WebCore.vcproj/WebCore.vcproj:
        * platform/ScrollTypes.h:
        (WebCore::):
        * platform/ScrollbarThemeComposite.cpp:
        (WebCore::ScrollbarThemeComposite::splitTrack):
        (WebCore::ScrollbarThemeComposite::thumbLength):
        (WebCore::ScrollbarThemeComposite::minimumThumbLength):
        * platform/ScrollbarThemeComposite.h:
        * platform/mac/PlatformScrollBarMac.mm:
        (NSControlSizeForScrollBarControlSize):
        * platform/win/PlatformScrollBar.h:
        * platform/win/PlatformScrollBarSafari.cpp: Removed.
        * platform/win/PlatformScrollBarWin.cpp:
        (WebCore::PlatformScrollbar::PlatformScrollbar):
        * platform/win/ScrollbarThemeSafari.cpp:
        (WebCore::ScrollbarTheme::nativeTheme):
        (WebCore::):
        (WebCore::scrollbarControlStateFromThemeState):
        (WebCore::ScrollbarThemeSafari::hasButtons):
        (WebCore::ScrollbarThemeSafari::hasThumb):
        (WebCore::buttonRepaintRect):
        (WebCore::ScrollbarThemeSafari::backButtonRect):
        (WebCore::ScrollbarThemeSafari::forwardButtonRect):
        (WebCore::trackRepaintRect):
        (WebCore::ScrollbarThemeSafari::trackRect):
        (WebCore::ScrollbarThemeSafari::minimumThumbLength):
        (WebCore::ScrollbarThemeSafari::paintTrack):
        (WebCore::ScrollbarThemeSafari::paintButton):
        (WebCore::ScrollbarThemeSafari::paintThumb):
        * platform/win/ScrollbarThemeSafari.h:
        * platform/win/ScrollbarThemeWin.cpp:
        * platform/win/ScrollbarThemeWin.h:

2008-09-15  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Darin Adler, Beth Dakin

        <rdar://problem/4003789> Expose lists as AXList
        <rdar://problem/5707399> VO: Definition lists not announced in Safari

        Lists are now exposed through AX. On the mac (in SnowLeopard) they use two new subroles
        AXContentList for <ul>, <ol> and AXDefinitionList for <dl>
        Inside the definition list, each <dt> "term" has an accessibility description ("term"),
        as does each <dd> tag ("definition")

        Test: accessibility/lists.html

        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * page/AXObjectCache.cpp:
        * page/AccessibilityList.cpp: Added.
        * page/AccessibilityList.h: Added.
        * page/AccessibilityObject.h:
        * page/AccessibilityRenderObject.cpp:
        * page/AccessibilityTable.cpp:
        * page/mac/AccessibilityObjectWrapper.mm:
        * page/mac/WebCoreViewFactory.h:
        * platform/LocalizedStrings.h:
        * platform/mac/LocalizedStringsMac.mm:
        * platform/qt/Localizations.cpp:

2008-09-15  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Eric.

        Fixes: https://bugs.webkit.org/show_bug.cgi?id=20865
        Prepare HTMLScriptElement & SVGScriptElement unification, and unification of event handling.

        Several renames:
        dispatchHTMLEvent -> dispatchEventForType
        setHTMLEventListener -> setEventListenerForType
        getHTMLEventListener -> eventListenerForType
        removeHTMLEventListener -> removeEventListenerForType
        isHTMLEventListener -> isAttachedToEventTargetNode
        ...

        Similar renames for the dispatch/get/set/*Window*Event functions.
        Kill JSSVGLazyEventListener and merge with JSLazyEventListener.

        Most important change: Rename setHTMLEventListener to setEventListenerForTypeAndAttribute,
        as there exists a generic createEventListener() method now, taking care of JSLazyEventListener creation.

        setHTMLEventListener() used createHTMLEventListener() before and was HTML specific.
        SVG is able to use the code as well now. This affects most files in html/.

        No functional changes.

        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::~JSDOMWindowBase):
        (WebCore::JSDOMWindowBase::setListener):
        (WebCore::JSDOMWindowBase::getListener):
        (WebCore::JSDOMWindowBase::findJSEventListener):
        (WebCore::JSDOMWindowBase::findOrCreateJSEventListener):
        (WebCore::JSDOMWindowBase::findJSUnprotectedEventListener):
        (WebCore::JSDOMWindowBase::findOrCreateJSUnprotectedEventListener):
        (WebCore::JSDOMWindowBase::jsEventListenersAttachedToEventTargetNodes):
        (WebCore::JSDOMWindowBase::jsUnprotectedEventListenersAttachedToEventTargetNodes):
        * bindings/js/JSDOMWindowBase.h:
        * bindings/js/JSEventListener.cpp:
        (WebCore::JSAbstractEventListener::handleEvent):
        (WebCore::JSAbstractEventListener::isAttachedToEventTargetNode):
        (WebCore::JSUnprotectedEventListener::JSUnprotectedEventListener):
        (WebCore::JSUnprotectedEventListener::~JSUnprotectedEventListener):
        (WebCore::JSEventListener::JSEventListener):
        (WebCore::JSEventListener::~JSEventListener):
        (WebCore::JSLazyEventListener::JSLazyEventListener):
        (WebCore::eventParameterName):
        (WebCore::JSLazyEventListener::parseCode):
        (WebCore::getNodeEventListener):
        * bindings/js/JSEventListener.h:
        (WebCore::JSAbstractEventListener::JSAbstractEventListener):
        (WebCore::JSUnprotectedEventListener::create):
        (WebCore::JSEventListener::create):
        (WebCore::JSLazyEventListener::):
        (WebCore::JSLazyEventListener::create):
        * bindings/js/JSEventTargetNode.cpp:
        (WebCore::JSEventTargetNode::setListener):
        (WebCore::JSEventTargetNode::getListener):
        * bindings/js/JSSVGLazyEventListener.cpp: Removed.
        * bindings/js/JSSVGLazyEventListener.h: Removed.
        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::createHTMLEventHandler):
        (WebCore::ScriptController::createSVGEventHandler):
        * dom/Document.cpp:
        (WebCore::Document::setFocusedNode):
        (WebCore::Document::handleWindowEvent):
        (WebCore::Document::setWindowEventListenerForType):
        (WebCore::Document::windowEventListenerForType):
        (WebCore::Document::removeWindowEventListenerForType):
        (WebCore::Document::addWindowEventListener):
        (WebCore::Document::hasWindowEventListener):
        (WebCore::Document::removePendingFrameBeforeUnloadEventCount):
        (WebCore::Document::createEventListener):
        (WebCore::Document::setWindowEventListenerForTypeAndAttribute):
        * dom/Document.h:
        * dom/EventListener.h:
        (WebCore::EventListener::isAttachedToEventTargetNode):
        * dom/EventTargetNode.cpp:
        (WebCore::EventTargetNode::dispatchFocusEvent):
        (WebCore::EventTargetNode::dispatchBlurEvent):
        (WebCore::EventTargetNode::dispatchEventForType):
        (WebCore::EventTargetNode::removeEventListenerForType):
        (WebCore::EventTargetNode::setEventListenerForType):
        (WebCore::EventTargetNode::setEventListenerForTypeAndAttribute):
        (WebCore::EventTargetNode::eventListenerForType):
        * dom/EventTargetNode.h:
        * dom/XMLTokenizer.cpp:
        (WebCore::XMLTokenizer::notifyFinished):
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplacementFragment::ReplacementFragment):
        * html/HTMLBodyElement.cpp:
        (WebCore::HTMLBodyElement::parseMappedAttribute):
        * html/HTMLButtonElement.cpp:
        (WebCore::HTMLButtonElement::parseMappedAttribute):
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::parseMappedAttribute):
        (WebCore::HTMLElement::checkDTD):
        * html/HTMLElement.h:
        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::onChange):
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::prepareSubmit):
        (WebCore::HTMLFormElement::reset):
        (WebCore::HTMLFormElement::parseMappedAttribute):
        * html/HTMLFrameElementBase.cpp:
        (WebCore::HTMLFrameElementBase::parseMappedAttribute):
        * html/HTMLFrameSetElement.cpp:
        (WebCore::HTMLFrameSetElement::parseMappedAttribute):
        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::parseMappedAttribute):
        * html/HTMLImageLoader.cpp:
        (WebCore::HTMLImageLoader::dispatchLoadEvent):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::parseMappedAttribute):
        (WebCore::HTMLInputElement::setValueFromRenderer):
        (WebCore::HTMLInputElement::onSearch):
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::asyncEventTimerFired):
        (WebCore::HTMLMediaElement::load):
        (WebCore::HTMLMediaElement::mediaPlayerNetworkStateChanged):
        (WebCore::HTMLMediaElement::setReadyState):
        (WebCore::HTMLMediaElement::seek):
        (WebCore::HTMLMediaElement::mediaPlayerTimeChanged):
        (WebCore::HTMLMediaElement::willSaveToCache):
        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::parseMappedAttribute):
        * html/HTMLScriptElement.cpp:
        (WebCore::HTMLScriptElement::parseMappedAttribute):
        (WebCore::HTMLScriptElement::dispatchLoadEvent):
        (WebCore::HTMLScriptElement::dispatchErrorEvent):
        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::parseMappedAttribute):
        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::parseMappedAttribute):
        * html/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::notifyFinished):
        * page/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::mouseButtonListener):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::canMouseDownStartSelect):
        (WebCore::EventHandler::canMouseDragExtendSelect):
        * page/Frame.cpp:
        (WebCore::Frame::sendScrollEvent):
        * page/Page.cpp:
        (WebCore::networkStateChanged):
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::valueChanged):
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::selectionChanged):
        * svg/SVGDocumentExtensions.cpp:
        * svg/SVGDocumentExtensions.h:
        * svg/SVGElement.cpp:
        (WebCore::SVGElement::parseMappedAttribute):
        (WebCore::SVGElement::finishParsingChildren):
        * svg/SVGElement.h:
        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::parseMappedAttribute):
        * svg/SVGSVGElement.h:

2008-09-15  Dave Hyatt  <hyatt@apple.com>

        Convert PlatformScrollbarWin to use ScrollbarTheme for hit testing.  PlatformScrollbarQt/Gtk still
        need to be converted.

        Reviewed by Sam Weinig

        * platform/ScrollBar.cpp:
        (WebCore::Scrollbar::Scrollbar):
        (WebCore::Scrollbar::updateThumbPosition):
        (WebCore::Scrollbar::updateThumbProportion):
        (WebCore::Scrollbar::autoscrollPressedPart):
        (WebCore::Scrollbar::startTimerIfNeeded):
        * platform/ScrollBar.h:
        * platform/ScrollbarTheme.h:
        (WebCore::ScrollbarTheme::invalidateParts):
        * platform/ScrollbarThemeComposite.cpp:
        (WebCore::ScrollbarThemeComposite::hitTest):
        (WebCore::ScrollbarThemeComposite::invalidatePart):
        (WebCore::ScrollbarThemeComposite::thumbPosition):
        (WebCore::ScrollbarThemeComposite::thumbLength):
        (WebCore::ScrollbarThemeComposite::trackLength):
        * platform/ScrollbarThemeComposite.h:
        * platform/win/PlatformScrollBarSafari.cpp:
        (WebCore::PlatformScrollbar::PlatformScrollbar):
        * platform/win/PlatformScrollBarWin.cpp:
        (WebCore::PlatformScrollbar::PlatformScrollbar):

2008-09-15  David Smith  <catfish.man@gmail.com>

        "Just do it"'d by Mark Rowe

        https://bugs.webkit.org/show_bug.cgi?id=20856
        Add missing license header

        * dom/NodeRenderStyle.h:

2008-09-15  Dean Jackson  <dino@apple.com>

        Reviewed by Tim Hatcher.

        Add default constructor for ShadowData
        https://bugs.webkit.org/show_bug.cgi?id=20757

        Test: transitions/shadow.html

        * rendering/style/RenderStyle.h:

2008-09-15  Dean Jackson  <dino@apple.com>

        Reviewed by Tim Hatcher.

        RenderStyle should update keyframes.
        http://bugs.webkit.org/show_bug.cgi?id=20756

        * rendering/style/RenderStyle.cpp:
        (WebCore::StyleRareNonInheritedData::updateKeyframes):

2008-09-15  Dean Jackson  <dino@apple.com>

        Reviewed by Tim Hatcher.

        Unnecessary ASSERT in ImplicitAnimation destructor.
        https://bugs.webkit.org/show_bug.cgi?id=20817

        * page/animation/ImplicitAnimation.cpp:
        (WebCore::ImplicitAnimation::~ImplicitAnimation):

2008-09-15  Adam Treat  <treat@kde.org>

        Reviewed by Simon.

        Fix plugin extension info. It was returning the mimetype where the
        extension was given.

        * plugins/qt/PluginPackageQt.cpp:
        (WebCore::PluginPackage::fetchInfo):

2008-09-15  Dean Jackson  <dino@apple.com>

        Reviewed by Tim Hatcher

        Coding style violation!!!! Cleanup AnimationBase.cpp

        * page/animation/AnimationBase.cpp:
        (WebCore::blendFunc):

2008-09-15  David Hyatt  <hyatt@apple.com>

        Move all hit testing code for scrollbars into the base class.  Refactor
        it to accommodate all platform-specific behaviors using virtual ScrollbarTheme
        functions.

        No platform is using this code yet.  Although it has been moved and compiles
        (even on Mac), it is not being used on any platform.

        Reviewed by Sam Weinig

        * platform/ScrollBar.cpp:
        (WebCore::Scrollbar::autoscrollPressedPart):
        (WebCore::Scrollbar::startTimerIfNeeded):
        (WebCore::Scrollbar::handleMouseMoveEvent):
        (WebCore::Scrollbar::handleMouseOutEvent):
        (WebCore::Scrollbar::handleMouseReleaseEvent):
        (WebCore::Scrollbar::handleMousePressEvent):
        * platform/ScrollBar.h:
        (WebCore::Scrollbar::handleContextMenuEvent):
        * platform/ScrollbarTheme.h:
        (WebCore::ScrollbarTheme::hitTest):
        (WebCore::ScrollbarTheme::invalidateOnMouseEnterExit):
        (WebCore::ScrollbarTheme::invalidatePart):
        (WebCore::ScrollbarTheme::shouldCenterOnThumb):
        (WebCore::ScrollbarTheme::centerOnThumb):
        (WebCore::ScrollbarTheme::thumbPosition):
        (WebCore::ScrollbarTheme::thumbLength):
        (WebCore::ScrollbarTheme::trackLength):
        (WebCore::ScrollbarTheme::initialAutoscrollTimerDelay):
        (WebCore::ScrollbarTheme::autoscrollTimerDelay):
        * platform/Widget.h:
        (WebCore::Widget::parent):
        * platform/mac/PlatformScrollBar.h:
        (WebCore::PlatformScrollbar::handleMouseMoveEvent):
        (WebCore::PlatformScrollbar::handleMouseOutEvent):
        (WebCore::PlatformScrollbar::handleMousePressEvent):
        (WebCore::PlatformScrollbar::handleMouseReleaseEvent):
        * platform/mac/WidgetMac.mm:
        (WebCore::Widget::convertFromContainingWindow):
        * platform/win/ScrollbarThemeWin.cpp:
        (WebCore::ScrollbarThemeWin::invalidateOnMouseEnterExit):
        * platform/win/ScrollbarThemeWin.h:

2008-09-15  Dan Bernstein  <mitz@apple.com>

        Reviewed by Sam Weinig.

        - fix <rdar://problem/5842247> Single long breakable word takes O(n^2) to lay out

        Cache the next breakable position for text nodes in InlineIterator.

        * rendering/bidi.cpp:
        (WebCore::InlineIterator::InlineIterator):
        (WebCore::InlineIterator::increment):
        (WebCore::RenderBlock::findNextLineBreak):

2008-09-15  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein

        Fix assertion and integral pixel issue when creating subimages.
        https://bugs.webkit.org/show_bug.cgi?id=20786

        * platform/graphics/cg/ImageCG.cpp:
        (WebCore::BitmapImage::draw):

2008-09-15  Tor Arne Vestbø  <tavestbo@trolltech.com>

        Reviewed by Simon.

        Implment seek() and clean up and improve debugging output

        * platform/graphics/qt/MediaPlayerPrivatePhonon.cpp:
        (debugMediaObject):
        (WebCore::MediaPlayerPrivate::seek):
        (WebCore::MediaPlayerPrivate::setVolume):
        (WebCore::MediaPlayerPrivate::setMuted):
        (WebCore::MediaPlayerPrivate::updateStates):
        (WebCore::MediaPlayerPrivate::naturalSize):
        (WebCore::MediaPlayerPrivate::paint):
        (WebCore::MediaPlayerPrivate::stateChanged):
        (WebCore::MediaPlayerPrivate::tick):

2008-09-15  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Simon.

        Remove bogus Q_ASSERTs from the MediaPlayer Phonon implementation

        m_mediaObject, m_audioOutput, m_videoWidget get created in the
        c'tor and will only be deleted in the c'tor. The Q_ASSERTs would
        only check if we use the MediaPlayerPrivate after it has been deleted.

        Acked-by: Tor Arne Vestbø  <tavestbo@trolltech.com>

        * platform/graphics/qt/MediaPlayerPrivatePhonon.cpp:
        (WebCore::MediaPlayerPrivate::play):
        (WebCore::MediaPlayerPrivate::setVolume):
        (WebCore::MediaPlayerPrivate::updateStates):

2008-09-15  Anders Carlsson  <andersca@apple.com>

        Reviewed by Maciej.

        <rdar://problem/6163988>
        https://bugs.webkit.org/show_bug.cgi?id=20457
        Canvas: createPattern crashes WebKit in WTF::RefPtr<WebCore::Image>::operator!() const + 9 with a 1D pattern

        Check the width and height and throw an exception if any of them are 0.

        * html/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::createPattern):

2008-09-15  Tor Arne Vestbø  <tavestbo@trolltech.com>

        Reviewed by Simon.

        Render media element controls with antialiasing enabled

        * platform/qt/RenderThemeQt.cpp:
        (WebCore::RenderThemeQt::paintMediaMuteButton):
        (WebCore::RenderThemeQt::paintMediaPlayButton):
        (WebCore::RenderThemeQt::paintMediaSliderTrack):
        (WebCore::RenderThemeQt::paintMediaSliderThumb):

2008-09-15  Ariya Hidayat  <ariya.hidayat@trolltech.com>

        Reviewed by Simon.

        Upon non fatal error, switch to the pause state (so that playback can continue)

        * platform/graphics/qt/MediaPlayerPrivatePhonon.cpp:
        (WebCore::MediaPlayerPrivate::updateStates):

2008-09-15  Tor Arne Vestbø  <tavestbo@trolltech.com>

        Reviewed by Simon.

        Don't set WTF_USE_JSC in WebCore.pro now that it's set in config.h

        * WebCore.pro:

2008-09-15  Tor Arne Vestbø  <tavestbo@trolltech.com>

        Reviewed by Simon.

        Make QtInstance::create() private and fix caching

        * bindings/js/ScriptControllerQt.cpp:
        (WebCore::ScriptController::createScriptInstanceForWidget):
        * bridge/qt/qt_instance.cpp:
        (JSC::Bindings::QtInstance::getQtInstance):
        (JSC::Bindings::QtInstance::getRuntimeObject):
        * bridge/qt/qt_instance.h:
        (JSC::Bindings::QtInstance::create):
        * bridge/qt/qt_runtime.cpp:
        (JSC::Bindings::convertQVariantToValue):
        (JSC::Bindings::QtConnectionObject::execute):

2008-09-15  David Smith  <catfish.man@gmail.com>

        Reviewed by Dave Hyatt.

        https://bugs.webkit.org/show_bug.cgi?id=20180

        >2x speedup on querySelector[All] with :nth-child by removing the collectRulesOnly argument on SelectorChecker.
        With collectRulesOnly set to true (the default) an optimization is turned off, and no callers were intentionally leaving it true.
        querySelector[All] assumed that the default was probably the right way to go, and so ended up being slow.

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::CSSStyleSelector):
        (WebCore::CSSStyleSelector::SelectorChecker::SelectorChecker):
        * css/CSSStyleSelector.h:

2008-09-14  Dave Hyatt  <hyatt@apple.com>

        Refactor PlatformScrollbarWin's painting so that it is now done by ScrollbarThemeWin.  PlatformScrollbarSafari
        is still painting itself (a subsequent patch will move its painting into ScrollbarThemeSafari).

        Reviewed by Sam Weinig

        * platform/ScrollBar.h:
        (WebCore::Scrollbar::client):
        (WebCore::Scrollbar::currentPos):
        (WebCore::Scrollbar::totalSize):
        * platform/ScrollbarTheme.h:
        * platform/ScrollbarThemeComposite.cpp:
        (WebCore::pageForScrollView):
        (WebCore::ScrollbarThemeComposite::paint):
        * platform/ScrollbarThemeComposite.h:
        (WebCore::ScrollbarThemeComposite::trackIsSinglePiece):
        * platform/win/PlatformScrollBar.h:
        * platform/win/PlatformScrollBarSafari.cpp:
        * platform/win/PlatformScrollBarWin.cpp:
        * platform/win/ScrollbarThemeSafari.h:
        (WebCore::ScrollbarThemeSafari::hasButtons):
        (WebCore::ScrollbarThemeSafari::hasThumb):
        (WebCore::ScrollbarThemeSafari::backButtonRect):
        (WebCore::ScrollbarThemeSafari::forwardButtonRect):
        (WebCore::ScrollbarThemeSafari::trackRect):
        (WebCore::ScrollbarThemeSafari::splitTrack):
        (WebCore::ScrollbarThemeSafari::paintTrack):
        (WebCore::ScrollbarThemeSafari::paintButton):
        (WebCore::ScrollbarThemeSafari::paintThumb):
        * platform/win/ScrollbarThemeWin.cpp:
        (WebCore::isRunningOnVistaOrLater):
        (WebCore::checkAndInitScrollbarTheme):
        (WebCore::ScrollbarThemeWin::ScrollbarThemeWin):
        (WebCore::ScrollbarThemeWin::themeChanged):
        (WebCore::ScrollbarThemeWin::hasThumb):
        (WebCore::ScrollbarThemeWin::backButtonRect):
        (WebCore::ScrollbarThemeWin::forwardButtonRect):
        (WebCore::ScrollbarThemeWin::trackRect):
        (WebCore::ScrollbarThemeWin::splitTrack):
        (WebCore::ScrollbarThemeWin::paintTrack):
        (WebCore::ScrollbarThemeWin::paintButton):
        (WebCore::gripperRect):
        (WebCore::paintGripper):
        (WebCore::ScrollbarThemeWin::paintThumb):
        (WebCore::ScrollbarThemeWin::thumbPosition):
        (WebCore::ScrollbarThemeWin::thumbLength):
        (WebCore::ScrollbarThemeWin::trackLength):
        * platform/win/ScrollbarThemeWin.h:
        (WebCore::ScrollbarThemeWin::hasButtons):
        (WebCore::ScrollbarThemeWin::trackIsSinglePiece):

2008-09-14  Anthony Ricaud  <rik24d@gmail.com>

        Moving all resource graphs under the same container for future scalable feature.
        This is a speedup on resize but maybe a loss on changing the sorting function.

        https://bugs.webkit.org/show_bug.cgi?id=20555

        Reviewed by Timothy Hatcher.

        * page/inspector/ResourcesPanel.js: Added a container for all resource graphs.
        Added WebInspector.ResourceGraph. No more _updateGraphBars on resize.
        * page/inspector/inspector.css: Edited corresponding rules and removed unnecessaries.

2008-09-14  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Maciej Stachowiak.

        https://bugs.webkit.org/show_bug.cgi?id=20738
        compareBoundaryPoints gives incorrect results

        Test: fast/dom/Range/compareBoundaryPoints-2.html

        * dom/Range.cpp: (WebCore::Range::compareBoundaryPoints): Correct meanings of START_TO_END
        and END_TO_START.
        * page/DOMSelection.cpp: (WebCore::DOMSelection::addRange): Updated for this change.

2008-09-14  Maciej Stachowiak  <mjs@apple.com>

        Unreviewed build fix.

        Trying again.

        * bindings/js/JSQuarantinedObjectWrapper.cpp:
        (WebCore::JSQuarantinedObjectWrapper::hasInstance):

2008-09-14  Maciej Stachowiak  <mjs@apple.com>

        Unreviewed build fix.

        Blind attempt to fix build. Correct parameters for hasInstance.

        * bindings/js/JSQuarantinedObjectWrapper.cpp:
        (WebCore::JSQuarantinedObjectWrapper::hasInstance):
        * bindings/js/JSQuarantinedObjectWrapper.h:

2008-09-14  Dan Bernstein  <mitz@apple.com>

        Rubber-stamped by Sam Weinig.

        - revert <http://trac.webkit.org/changeset/36382> because it exposed
          <https://bugs.webkit.org/show_bug.cgi?id=20846> and resulted in crashes
          on Tiger.

        * platform/graphics/mac/FontCacheMac.mm:
        (WebCore::FontCache::getFontDataForCharacters):
        (WebCore::FontCache::getLastResortFallbackFont):

2008-09-14  Dave Hyatt  <hyatt@apple.com>

        Add a new ScrollbarThemeComposite base class that is shared by ScrollbarThemeSafari and
        ScrollbarThemeWin.  Any scrollbar that wants to render by ScrollbarPart can subclass from this
        theme.

        Reviewed by Sam Weinig

        * WebCore.vcproj/WebCore.vcproj:
        * platform/win/ScrollbarThemeSafari.h:
        * platform/win/ScrollbarThemeWin.h:

2008-09-14  Alp Toker  <alp@nuanti.com>

        https://bugs.webkit.org/show_bug.cgi?id=20320
        [GTK] A white rectangle is visible behind widgets with rounded corners

        Sync bundled gtk2drawing.c to the latest version from Mozilla (coding
        style exempt).

        Requested by Michael Monreal.

        * platform/gtk/RenderThemeGtk.cpp:
        (WebCore::RenderThemeGtk::RenderThemeGtk):
        * platform/gtk/gtk2drawing.c:
        (moz_gtk_set_widget_name):
        (ensure_window_widget):
        (setup_widget_prototype):
        (ensure_button_arrow_widget):
        (moz_gtk_get_combo_box_inner_button):
        (moz_gtk_get_combo_box_button_inner_widgets):
        (ensure_combo_box_widgets):
        (moz_gtk_get_combo_box_entry_inner_widgets):
        (moz_gtk_get_combo_box_entry_arrow):
        (ensure_combo_box_entry_widgets):
        (ensure_toolbar_widget):
        (ensure_tooltip_widget):
        (ensure_menu_bar_widget):
        (ensure_menu_bar_item_widget):
        (ensure_menu_popup_widget):
        (ensure_menu_item_widget):
        (ensure_image_menu_item_widget):
        (ensure_menu_separator_widget):
        (ensure_check_menu_item_widget):
        (ensure_tree_header_cell_widget):
        (ensure_scrolled_window_widget):
        (moz_gtk_button_paint):
        (moz_gtk_init):
        (moz_gtk_button_get_inner_border):
        (moz_gtk_toggle_paint):
        (calculate_button_inner_rect):
        (calculate_arrow_rect):
        (moz_gtk_scrollbar_button_paint):
        (moz_gtk_scrollbar_thumb_paint):
        (moz_gtk_caret_paint):
        (moz_gtk_entry_paint):
        (moz_gtk_treeview_paint):
        (moz_gtk_tree_header_cell_paint):
        (moz_gtk_combo_box_paint):
        (moz_gtk_downarrow_paint):
        (moz_gtk_combo_box_entry_button_paint):
        (moz_gtk_toolbar_paint):
        (moz_gtk_tab_scroll_arrow_paint):
        (moz_gtk_menu_bar_paint):
        (moz_gtk_menu_item_paint):
        (moz_gtk_get_widget_border):
        (moz_gtk_get_combo_box_entry_button_size):
        (moz_gtk_get_tab_scroll_arrow_size):
        (moz_gtk_get_downarrow_size):
        (moz_gtk_images_in_menus):
        (moz_gtk_widget_paint):
        (moz_gtk_shutdown):
        * platform/gtk/gtkdrawing.h:

2008-09-14  David Hyatt  <hyatt@apple.com>

        Convert Mac, Gtk, wx and Qt over to the new ScrollbarTheme for
        painting.  Mac and Gtk themes don't do anything and just let the
        underlying widget paint.  Qt now uses the theme to paint.  wx doesn't
        do anything yet.

        Reviewed by Sam Weinig

        * platform/ScrollBar.cpp:
        (WebCore::Scrollbar::paint):
        * platform/ScrollBar.h:
        (WebCore::Scrollbar::value):
        (WebCore::Scrollbar::visibleSize):
        (WebCore::Scrollbar::maximum):
        (WebCore::Scrollbar::lineStep):
        (WebCore::Scrollbar::pageStep):
        (WebCore::Scrollbar::pixelStep):
        (WebCore::Scrollbar::pressedPart):
        (WebCore::Scrollbar::hoveredPart):
        (WebCore::Scrollbar::theme):
        * platform/ScrollbarTheme.h:
        (WebCore::ScrollbarTheme::paint):
        (WebCore::ScrollbarTheme::scrollbarThickness):
        (WebCore::ScrollbarTheme::supportsControlTints):
        (WebCore::ScrollbarTheme::themeChanged):
        * platform/gtk/PlatformScrollBar.h:
        * platform/gtk/PlatformScrollBarGtk.cpp:
        * platform/mac/PlatformScrollBar.h:
        * platform/mac/PlatformScrollBarMac.mm:
        * platform/qt/PlatformScrollBar.h:
        * platform/qt/PlatformScrollBarQt.cpp:
        * platform/qt/ScrollbarThemeQt.cpp:
        (WebCore::styleOptionSlider):
        * platform/qt/ScrollbarThemeQt.h:
        (WebCore::ScrollbarThemeQt::paint):
        * platform/win/PlatformScrollBarSafari.cpp:
        (WebCore::PlatformScrollbar::paint):
        * platform/win/ScrollbarThemeSafari.h:
        (WebCore::ScrollbarThemeSafari::supportsControlTints):
        * platform/wx/PlatformScrollBar.h:
        * platform/wx/TemporaryLinkStubs.cpp:
        (PlatformScrollbar::~PlatformScrollbar):

2008-09-14  Sam Weinig  <sam@webkit.org>

        Qt build fix.

        * platform/qt/PlatformScrollBarQt.cpp:

2008-09-14  Sam Weinig  <sam@webkit.org>

        Reviewed by Mark Rowe.

        Remove extraneous semicolons.

        * bindings/scripts/CodeGeneratorObjC.pm:
        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::tokenizeRelAttribute):
        * html/HTMLScriptElement.cpp:
        (WebCore::HTMLScriptElement::charsetAttributeValue):
        (WebCore::HTMLScriptElement::typeAttributeValue):
        * platform/graphics/qt/GradientQt.cpp:
        (WebCore::Gradient::platformGradient):
        * platform/qt/ScrollViewQt.cpp:
        (WebCore::ScrollView::ScrollViewPrivate::setHasHorizontalScrollbar):
        * platform/win/ScrollViewWin.cpp:
        (WebCore::ScrollView::updateScrollbars):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::paintEllipsisBoxes):
        * svg/SVGPathSegList.cpp:
        (WebCore::SVGPathSegList::toPathData):

2008-09-14  Sam Weinig  <sam@webkit.org>

        Qt build fix.

        * platform/qt/ScrollViewQt.cpp:
        (WebCore::ScrollView::updateScrollbars):

2008-09-14  Sam Weinig  <sam@webkit.org>

        Qt build fix.

        * platform/qt/PlatformScrollBarQt.cpp:
        (WebCore::PlatformScrollbar::PlatformScrollbar):
        (WebCore::PlatformScrollbar::paint):

2008-09-13  Jan Michael Alonzo  <jmalonzo@webkit.org>

        Gtk build fix, not reviewed.

        * platform/gtk/PlatformScrollBarGtk.cpp:
        (PlatformScrollbar::PlatformScrollbar):
        * platform/gtk/ScrollViewGtk.cpp:
        (WebCore::ScrollView::updateScrollbars):

2008-09-13  Dave Hyatt  <hyatt@apple.com>

        Remove scrollbar's setRect method.  Clients can now just call setFrameGeometry (the corresponding Widget) method
        to set the dimensions of a scrollbar.

        Reviewed by Sam Weinig

        * platform/ScrollBar.h:
        * platform/gtk/PlatformScrollBar.h:
        * platform/gtk/PlatformScrollBarGtk.cpp:
        (PlatformScrollbar::setFrameGeometry):
        * platform/gtk/ScrollViewGtk.cpp:
        (WebCore::ScrollView::updateScrollbars):
        * platform/mac/PlatformScrollBarMac.mm:
        * platform/qt/PlatformScrollBarQt.cpp:
        * platform/qt/ScrollViewQt.cpp:
        (WebCore::ScrollView::updateScrollbars):
        * platform/win/PlatformScrollBar.h:
        * platform/win/PlatformScrollBarSafari.cpp:
        (WebCore::PlatformScrollbar::PlatformScrollbar):
        (WebCore::PlatformScrollbar::setFrameGeometry):
        * platform/win/PlatformScrollBarWin.cpp:
        (WebCore::PlatformScrollbar::PlatformScrollbar):
        (WebCore::PlatformScrollbar::setFrameGeometry):
        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupWndProc):
        * platform/win/ScrollViewWin.cpp:
        (WebCore::ScrollView::updateScrollbars):
        * platform/wx/PlatformScrollBar.h:
        * platform/wx/TemporaryLinkStubs.cpp:
        (PlatformScrollbar::updateThumbProportion):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::positionOverflowControls):
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::paintScrollbar):

2008-09-13  Dave Hyatt  <hyatt@apple.com>

        Remove setEnabled() from all Scrollbar classes that were just using their Widget base class methods.

        Reviewed by Sam Weinig

        * platform/ScrollBar.h:
        * platform/gtk/PlatformScrollBar.h:
        * platform/gtk/PlatformScrollBarGtk.cpp:
        * platform/mac/PlatformScrollBar.h:
        * platform/mac/PlatformScrollBarMac.mm:
        * platform/win/PlatformScrollBar.h:
        * platform/win/PlatformScrollBarSafari.cpp:
        * platform/win/PlatformScrollBarWin.cpp:
        * platform/wx/PlatformScrollBar.h:
        * platform/wx/TemporaryLinkStubs.cpp:
        (PlatformScrollbar::~PlatformScrollbar):

2008-09-13  Dave Hyatt  <hyatt@apple.com>

        Remove width()/height() from Scrollbar now that it derives from Widget.  Remove width()/height() from
        all PlatformScrollbar subclasses that just called the Widget base class versions of those methods.

        Reviewed by Sam Weinig

        * platform/ScrollBar.h:
        * platform/gtk/PlatformScrollBar.h:
        * platform/gtk/PlatformScrollBarGtk.cpp:
        * platform/mac/PlatformScrollBar.h:
        * platform/mac/PlatformScrollBarMac.mm:
        * platform/win/PlatformScrollBarSafari.cpp:
        * platform/win/PlatformScrollBarWin.cpp:
        * platform/wx/PlatformScrollBar.h:
        * platform/wx/TemporaryLinkStubs.cpp:
        (PlatformScrollbar::~PlatformScrollbar):

2008-09-13  Dave Hyatt  <hyatt@apple.com>

        Move stopTimerIfNeeded out of PlatformScrollbar destructors and into Scrollbar.

        Reviewed by Sam Weinig

        * platform/ScrollBar.cpp:
        (WebCore::Scrollbar::~Scrollbar):
        * platform/ScrollBar.h:
        * platform/qt/PlatformScrollBarQt.cpp:
        (WebCore::PlatformScrollbar::~PlatformScrollbar):
        * platform/win/PlatformScrollBarSafari.cpp:
        (WebCore::PlatformScrollbar::~PlatformScrollbar):
        * platform/win/PlatformScrollBarWin.cpp:
        (WebCore::PlatformScrollbar::~PlatformScrollbar):

2008-09-13  David Hyatt  <hyatt@apple.com>

        Move maximum() from Qt's PlatformScrollbar to be a cross-platform
        function on Scrollbar.  Fixes Qt build bustage.

        Reviewed by Sam Weinig

        * platform/ScrollBar.h:
        (WebCore::Scrollbar::orientation):
        (WebCore::Scrollbar::value):
        (WebCore::Scrollbar::maximum):
        * platform/qt/PlatformScrollBar.h:

2008-09-13  Dan Bernstein  <mitz@apple.com>

        Reviewed by Sam Weinig.

        - use the LastResort font for missing glyphs instead of showing the
          primary font's missing glyph

        Test: platform/mac/fast/text/last-resort-font.html

        * platform/graphics/mac/FontCacheMac.mm:
        (WebCore::FontCache::getFontDataForCharacters): Changed to return the
        last resort font if a substitute font cannot be found.
        (WebCore::FontCache::getLastResortFallbackFont): Removed an outdated
        comment (the user's preferred standard font is included in the search
        thanks to code in FontCache::getFontData()) and changed to return the
        LastResort font.

2008-09-13  Dave Hyatt  <hyatt@apple.com>

        This patch adds ScrollbarTheme to the build.  ScrollbarTheme is similar to RenderTheme (but for
        scrollbars only).  For now ScrollbarTheme just handles returning the size of scrollbars.  Subsequent
        patches will move rendering and hit testing functionality into this class.

        Implemented ScrollbarTheme subclasses for four ports (Mac, Win, Gtk, Qt).  The wxWidgets port does not
        implement scrollbars yet, so I added a temporary link stub to keep things compiling on wx.

        Reviewed by Sam Weinig

        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * platform/ScrollBar.cpp:
        (WebCore::Scrollbar::Scrollbar):
        * platform/ScrollBar.h:
        * platform/ScrollbarTheme.h: Added.
        (WebCore::ScrollbarTheme::~ScrollbarTheme):
        (WebCore::ScrollbarTheme::scrollbarThickness):
        (WebCore::ScrollbarTheme::themeChanged):
        * platform/gtk/ScrollbarThemeGtk.cpp: Added.
        (WebCore::ScrollbarTheme::nativeTheme):
        (WebCore::ScrollbarThemeGtk::~ScrollbarThemeGtk):
        (WebCore::ScrollbarThemeGtk::scrollbarThickness):
        * platform/gtk/ScrollbarThemeGtk.h: Added.
        * platform/mac/PlatformScrollBar.h:
        * platform/mac/ScrollbarThemeMac.cpp: Added.
        (WebCore::ScrollbarTheme::nativeTheme):
        (WebCore::):
        (WebCore::ScrollbarThemeMac::~ScrollbarThemeMac):
        (WebCore::ScrollbarThemeMac::scrollbarThickness):
        * platform/mac/ScrollbarThemeMac.h: Added.
        * platform/qt/PlatformScrollBarQt.cpp:
        * platform/qt/ScrollbarThemeQt.cpp: Added.
        (WebCore::ScrollbarTheme::nativeTheme):
        (WebCore::ScrollbarThemeQt::~ScrollbarThemeQt):
        (WebCore::ScrollbarThemeQt::scrollbarThickness):
        * platform/qt/ScrollbarThemeQt.h: Added.
        * platform/win/PlatformScrollBar.h:
        * platform/win/PlatformScrollBarSafari.cpp:
        * platform/win/PlatformScrollBarWin.cpp:
        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenu::calculatePositionAndSize):
        * platform/win/ScrollViewWin.cpp:
        (WebCore::ScrollView::updateScrollbars):
        (WebCore::ScrollView::themeChanged):
        * platform/win/ScrollbarThemeSafari.cpp: Added.
        (WebCore::ScrollbarTheme::nativeTheme):
        (WebCore::):
        (WebCore::ScrollbarThemeSafari::~ScrollbarThemeSafari):
        (WebCore::ScrollbarThemeSafari::scrollbarThickness):
        * platform/win/ScrollbarThemeSafari.h: Added.
        * platform/win/ScrollbarThemeWin.cpp: Added.
        (WebCore::ScrollbarTheme::nativeTheme):
        (WebCore::ScrollbarThemeWin::~ScrollbarThemeWin):
        (WebCore::ScrollbarThemeWin::scrollbarThickness):
        (WebCore::ScrollbarThemeWin::themeChanged):
        * platform/win/ScrollbarThemeWin.h: Added.
        * platform/wx/TemporaryLinkStubs.cpp:
        (ScrollbarTheme::nativeTheme):
        * rendering/RenderLayer.cpp:
        (WebCore::scrollCornerRect):
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::calcHeight):
        (WebCore::RenderTextControl::calcPrefWidths):

2008-09-13  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Timothy Hatcher.

        <rdar://problem/5060439> Web elements should have an AXTopLevelUIElement

        * page/mac/AccessibilityObjectWrapper.mm:
        (-[AccessibilityObjectWrapper accessibilityAttributeNames]):

2008-09-13  Dan Bernstein  <mitz@apple.com>

        Reviewed by Timothy Hatcher.

        - fix <rdar://problem/6171280> REGRESSION (r35667): Assertion failure in WebCore::FrameView::scheduleRelayout() when releasing a page with counters from the b/f cache

        No regression test because the back/forward cache is disabled in DumpRenderTree

        * rendering/RenderContainer.cpp:
        (WebCore::RenderContainer::invalidateCounters): Bail out if the document
        is being destroyed.

2008-09-13  Kevin Ollivier  <kevino@theolliviers.com>

        wx build fixes for new methods recently introduced.

        * platform/graphics/wx/AffineTransformWx.cpp:
        (WebCore::AffineTransform::AffineTransform):
        (WebCore::AffineTransform::setMatrix):
        (WebCore::AffineTransform::setA):
        (WebCore::AffineTransform::setB):
        (WebCore::AffineTransform::setC):
        (WebCore::AffineTransform::setD):
        (WebCore::AffineTransform::setE):
        (WebCore::AffineTransform::setF):
        * platform/wx/LocalizedStringsWx.cpp:
        (WebCore::AXDefinitionListTermText):
        (WebCore::AXDefinitionListDefinitionText):

2008-09-12  Dave Hyatt  <hyatt@apple.com>

        Move the member variables of PlatformScrollbar up into Scrollbar.  Move autoscroll timer handling
        up into scrollbar.  Make sure a bunch of cross-platform code now just uses "Scrollbar" instead of
        "PlatformScrollbar."

        Reviewed by Sam Weinig

        * WebCore.vcproj/WebCore.vcproj:
        * editing/EditorCommand.cpp:
        * page/EventHandler.cpp:
        (WebCore::EventHandler::selectCursor):
        (WebCore::EventHandler::handleMousePressEvent):
        (WebCore::EventHandler::handleMouseMoveEvent):
        * page/EventHandler.h:
        * page/MouseEventWithHitTestResults.cpp:
        (WebCore::MouseEventWithHitTestResults::scrollbar):
        * page/MouseEventWithHitTestResults.h:
        * page/gtk/EventHandlerGtk.cpp:
        (WebCore::EventHandler::passMousePressEventToScrollbar):
        * page/mac/EventHandlerMac.mm:
        (WebCore::EventHandler::passMousePressEventToScrollbar):
        * page/qt/EventHandlerQt.cpp:
        (WebCore::EventHandler::passMousePressEventToScrollbar):
        * page/win/EventHandlerWin.cpp:
        (WebCore::EventHandler::passMousePressEventToScrollbar):
        * page/wx/EventHandlerWx.cpp:
        (WebCore::EventHandler::passMousePressEventToScrollbar):
        * platform/PopupMenu.h:
        * platform/ScrollBar.cpp:
        (WebCore::Scrollbar::Scrollbar):
        (WebCore::Scrollbar::autoscrollTimerFired):
        (WebCore::Scrollbar::autoscrollPressedPart):
        (WebCore::Scrollbar::startTimerIfNeeded):
        (WebCore::Scrollbar::stopTimerIfNeeded):
        (WebCore::Scrollbar::pressedPartScrollDirection):
        (WebCore::Scrollbar::pressedPartScrollGranularity):
        * platform/ScrollBar.h:
        (WebCore::Scrollbar::handleMousePressEvent):
        (WebCore::Scrollbar::invalidatePart):
        (WebCore::Scrollbar::thumbUnderMouse):
        * platform/ScrollView.h:
        * platform/ScrollbarClient.h: Added.
        (WebCore::ScrollbarClient::~ScrollbarClient):
        * platform/gtk/ScrollViewGtk.cpp:
        (WebCore::ScrollView::scrollbarUnderMouse):
        * platform/qt/PlatformScrollBar.h:
        * platform/qt/PlatformScrollBarQt.cpp:
        (WebCore::PlatformScrollbar::PlatformScrollbar):
        (WebCore::scrollbarPart):
        (WebCore::PlatformScrollbar::handleMouseMoveEvent):
        (WebCore::PlatformScrollbar::handleMouseOutEvent):
        (WebCore::PlatformScrollbar::handleMousePressEvent):
        (WebCore::PlatformScrollbar::handleMouseReleaseEvent):
        * platform/qt/ScrollViewQt.cpp:
        (WebCore::ScrollView::scrollbarUnderMouse):
        (WebCore::ScrollView::wheelEvent):
        * platform/win/PlatformScrollBar.h:
        * platform/win/PlatformScrollBarSafari.cpp:
        (WebCore::PlatformScrollbar::PlatformScrollbar):
        * platform/win/PlatformScrollBarWin.cpp:
        (WebCore::PlatformScrollbar::PlatformScrollbar):
        * platform/win/ScrollViewWin.cpp:
        (WebCore::ScrollView::scrollbarUnderMouse):
        * rendering/HitTestResult.cpp:
        (WebCore::HitTestResult::setScrollbar):
        * rendering/HitTestResult.h:
        (WebCore::HitTestResult::scrollbar):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::hitTestOverflowControls):
        * rendering/RenderLayer.h:
        * rendering/RenderListBox.h:

2008-09-12  Steve Falkenburg  <sfalken@apple.com>

        Fix Mac build.

        * css/CSSStyleSelector.cpp:
        (WebCore::getTransformOperationType):

2008-09-12  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Dave Hyatt.

        Make transform animation behavior match spec
        https://bugs.webkit.org/show_bug.cgi?id=20770

        Tests: transitions/transform-op-list-match.html
               transitions/transform-op-list-no-match.html

        * css/CSSStyleSelector.cpp:
        * css/CSSStyleSelector.h:
        * page/animation/AnimationBase.cpp:
        * page/animation/AnimationBase.h:
        * page/animation/ImplicitAnimation.cpp:
        * page/animation/ImplicitAnimation.h:
        * page/animation/KeyframeAnimation.cpp:
        * page/animation/KeyframeAnimation.h:
        * rendering/RenderLayer.cpp:
        * rendering/style/RenderStyle.cpp:
        * rendering/style/RenderStyle.h:

2008-09-12  Ojan Vafai  <ojan@chromium.org>

        Properly escape contents of links added to the inspector.
        For now, just build the link with the DOM and get the
        outerHTML. Eventually, we probably just want to do
        this entirely with the DOM.

        Reviewed by Timothy Hatcher.

        https://bugs.webkit.org/show_bug.cgi?id=20684

        * manual-tests/inspector/escape-links.html: Added.
        * page/inspector/StylesSidebarPane.js:
        * page/inspector/inspector.js:
        * page/inspector/utilities.js:

2008-09-12  Adele Peterson  <adele@apple.com>

        Reviewed by John Sullivan and Kevin McCullough.

        Fix for <rdar://problem/6216951> REGRESSION (r36000?): Crash due to infinite recursion into EventHandler::hitTestResultAtPoint() with disconnected frames

        * page/EventHandler.cpp: (WebCore::EventHandler::hitTestResultAtPoint):
        Hit testing again on the main frame will only work if we aren't already on the main frame.  If we are already on the main frame, that will
        cause infinite recursion.  This change checks that we're not already on the main frame before hit testing again.

2008-09-12  Kevin McCullough  <kmccullough@apple.com>

        RS by Tim .

        Re-introducing the code since it was not the cause of the crash.
        See r36343.

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::canBeProgramaticallyScrolled):
        * rendering/RenderObject.h:

2008-09-12  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Dave Hyatt.

        When changing one animation in a list, don't reset other animations
        https://bugs.webkit.org/show_bug.cgi?id=20675

        Test: animations/change-one-anim.html

        * page/animation/AnimationBase.cpp:
        (WebCore::AnimationBase::getNumProperties):
        * page/animation/AnimationBase.h:
        * page/animation/AnimationController.cpp:
        * page/animation/CompositeAnimation.cpp:
        (WebCore::CompositeAnimation::updateKeyframeAnimations):
        * page/animation/CompositeAnimation.h:
        * page/animation/ImplicitAnimation.cpp:
        * page/animation/KeyframeAnimation.cpp:
        * page/animation/KeyframeAnimation.h:
        (WebCore::KeyframeAnimation::setIndex):

2008-09-12  Brady Eidson  <beidson@apple.com>

        Reviewed by Mitz Pettel

        Fix the ASSERT and failure in webarchive/archive-empty-frame-source.html

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::mainResource): Further restoration of original WebArchive behavior.
          Subresources can never be created from nil data, but there is always a MainResource, whether
          or not there's any data.  So in the case where the main resource has no data, fake it for the
          sake of creating the ArchiveResource.

2008-09-12  Dave Hyatt  <hyatt@apple.com>

        Preparation for major scrollbar rearchitecture.  Eliminate the concept of non-widget based
        scrollbars (which we never supported anyway).  Make Scrollbar derive from Widget directly.
        Remove all the isWidget and hasPlatformScrollbars guards.

        Reviewed by Tim Hatcher

        * platform/ScrollBar.h:
        * platform/gtk/PlatformScrollBar.h:
        * platform/mac/PlatformScrollBar.h:
        * platform/qt/PlatformScrollBar.h:
        * platform/win/PlatformScrollBar.h:
        * platform/win/ScrollViewWin.cpp:
        (WebCore::ScrollView::ScrollViewPrivate::setHasHorizontalScrollbar):
        (WebCore::ScrollView::ScrollViewPrivate::setHasVerticalScrollbar):
        * platform/wx/PlatformScrollBar.h:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::horizontalScrollbarWidget):
        (WebCore::RenderLayer::verticalScrollbarWidget):
        (WebCore::RenderLayer::createScrollbar):
        (WebCore::RenderLayer::destroyScrollbar):
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::~RenderListBox):
        (WebCore::RenderListBox::updateFromElement):
        (WebCore::RenderListBox::isPointInOverflowControl):

2008-09-12  Dan Bernstein  <mitz@apple.com>

        Reviewed by Sam Weinig.

        - https://bugs.webkit.org/show_bug.cgi?id=20793 clean up page/animation

        * page/animation/AnimationController.cpp:
        * page/animation/AnimationController.h:
        * page/animation/CompositeAnimation.cpp:
        * page/animation/CompositeAnimation.h:
        * page/animation/ImplicitAnimation.cpp:
        * page/animation/ImplicitAnimation.h:
        * page/animation/KeyframeAnimation.cpp:
        * page/animation/KeyframeAnimation.h:

2008-09-11  Timothy Hatcher  <timothy@apple.com>

        Add a renderedImage method to DOMNode to get an image
        of the rendering for the node and it's descendants.

        <rdar://problem/5849349> Would like API to create
        an image for a DOM node

        Reviewed by Oliver Hunt.

        * bindings/objc/DOM.mm:
        (-[DOMNode renderedImage]): Call Frame::nodeImage.
        * bindings/objc/DOMPrivate.h:
        * page/Frame.h:
        * page/mac/FrameMac.mm:
        (WebCore::Frame::nodeImage):

2008-09-08  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Dave Hyatt

        Need to support comma separated list of key times in keyframes selectors
        https://bugs.webkit.org/show_bug.cgi?id=20680

        Test: animations/keyframes-comma-separated.html

        * css/CSSGrammar.y:
        * css/CSSParser.cpp:
        (WebCore::CSSParser::createKeyframeRule):
        * css/CSSParser.h:
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::addKeyframeStyle):
        * css/WebKitCSSKeyframeRule.cpp:
        (WebCore::WebKitCSSKeyframeRule::WebKitCSSKeyframeRule):
        (WebCore::WebKitCSSKeyframeRule::cssText):
        (WebCore::WebKitCSSKeyframeRule::parseKeyString):
        * css/WebKitCSSKeyframeRule.h:
        (WebCore::WebKitCSSKeyframeRule::keyText):
        (WebCore::WebKitCSSKeyframeRule::setKeyText):
        (WebCore::WebKitCSSKeyframeRule::getKeys):
        * css/WebKitCSSKeyframesRule.cpp:
        (WebCore::WebKitCSSKeyframesRule::append):
        (WebCore::WebKitCSSKeyframesRule::insertRule):
        (WebCore::WebKitCSSKeyframesRule::deleteRule):
        (WebCore::WebKitCSSKeyframesRule::findRule):
        (WebCore::WebKitCSSKeyframesRule::findRuleIndex):
        * css/WebKitCSSKeyframesRule.h:
        * page/animation/AnimationBase.cpp:
        (WebCore::AnimationBase::blendProperties):

2008-09-11  Kevin McCullough  <kmccullough@apple.com>

        RS by Tim.

        Reverting because this caused a crash.

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::canBeProgramaticallyScrolled):
        (WebCore::RenderObject::hasScrollableView):
        * rendering/RenderObject.h:

2008-09-11  Dean Jackson  <dino@apple.com>

        Reviewed by Dan Bernstein.

        Fix assertion on transition property "none"
        https://bugs.webkit.org/show_bug.cgi?id=20751

        Test: transitions/transition-end-event-set-none.html

        * page/animation/CompositeAnimation.cpp:
        (WebCore::CompositeAnimation::updateTransitions):

2008-09-11  David Smith  <catfish.man@gmail.com>

        Rubber-stamped by mitzpettel.

        Remove an accidentally added extra file.

        * WebCore: Removed.

2008-09-11  David Smith  <catfish.man@gmail.com>

        Reviewed by Darin

        https://bugs.webkit.org/show_bug.cgi?id=20180

        This speeds up :nth-child matching as tested by querySelectorAll by around 10% by inlining the common case of Node::renderStyle(). Many thanks to mitzpettel and othermaciej for suggestions and help.

        * WebCore.xcodeproj/project.pbxproj: Add NodeRenderStyle.h
        * css/CSSStyleSelector.cpp: include NodeRenderStyle.h
        * dom/Element.cpp: include NodeRenderStyle.h
        * dom/Node.cpp: Remove the definition of renderStyle()
        (WebCore::Node::nonRendererRenderStyle):
        * dom/Node.h: Make renderStyle() nonvirtual and add nonRendererRenderStyle()
        * dom/NodeRenderStyle.h: Added.
        (WebCore::Node::renderStyle): Inline the common case of this, call nonRendererRenderStyle for the part that needed to be virtual
        * html/HTMLOptGroupElement.cpp: include NodeRenderStyle.h
        * html/HTMLOptGroupElement.h:
        (WebCore::HTMLOptGroupElement::nonRendererRenderStyle): override to return m_style
        * html/HTMLOptionElement.cpp: include NodeRenderStyle.h
        * html/HTMLOptionElement.h:
        (WebCore::HTMLOptionElement::nonRendererRenderStyle): override to return m_style
        * rendering/RenderListBox.cpp: include NodeRenderStyle.h
        * rendering/RenderMenuList.cpp: include NodeRenderStyle.h
        * svg/SVGUseElement.cpp: include NodeRenderStyle.h

2008-09-11  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Adele and Tim.

        <rdar://problem/6100597> REGRESSION: clicking on search results in Web
        Inspector does not scroll to the line of the results (20167)
        - This was put in by Max to fix auto scrolling but is not correct for
        the whole web: rdar://problem/6213098

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::canBeProgramaticallyScrolled):
        * rendering/RenderObject.h:

2008-09-11  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Beth Dakin

        <rdar://problem/6210511> AX: if a frame has a title, that should be reported as the AXWebArea's title

        Test: accessibility/frame-with-title.html

        * page/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::accessibilityDescription):

2008-09-11  Dirk Schulze  <vbs85@gmx.de>

        Reviewed by Simon.

        Fixed stroke() and strokeRect() to support gradients
        and patterns on Qt.

        [Qt] Canvas stroke don't work for gradients and patterns
        [https://bugs.webkit.org/show_bug.cgi?id=20749]

        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::GraphicsContext::strokePath):
        (WebCore::GraphicsContext::strokeRect):

2008-09-11  Dirk Schulze  <vbs85@gmx.de>

        Reviewed by Simon.

        https://bugs.webkit.org/show_bug.cgi?id=20729

        Fixed canvas gradients for Qt

        [Qt] Canvas gradients don't work as expected
        [https://bugs.webkit.org/show_bug.cgi?id=20729]

        * platform/graphics/qt/GradientQt.cpp:
        (WebCore::Gradient::platformGradient):

2008-09-11  Dirk Schulze  <vbs85@gmx.de>

        Reviewed by Simon.

        https://bugs.webkit.org/show_bug.cgi?id=20568

        Add support for patterns to Qt.

        * platform/graphics/qt/PatternQt.cpp:
        (WebCore::Pattern::createPlatformPattern):

2008-09-10  Dan Bernstein  <mitz@apple.com>

        Reviewed by Sam Weinig.

        - clean up AnimationBase

        * page/animation/AnimationBase.cpp:
        * page/animation/AnimationBase.h:
        * page/animation/CompositeAnimation.cpp:
        * page/animation/ImplicitAnimation.cpp:
        * page/animation/ImplicitAnimation.h:
        * page/animation/KeyframeAnimation.cpp:
        * page/animation/KeyframeAnimation.h:

2008-09-10  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=20741
        REGRESSION: ISO-8859-8-I encoding is registered incorrectly

        Turns out that there were no real behavior changes for 8859-8, as it was only a debug-only
        check to ignore this specific registration that was failing. Yet, I decided to add a bunch of
        tests for ISO-8859-8 encoding aliases, as we handle them in a quite complicated manner.

        I also found and fixed a potential crasher for non-Mac ports.

        Tests: fast/encoding/hebrew/8859-8-e.html
               fast/encoding/hebrew/8859-8-i.html
               fast/encoding/hebrew/8859-8.html
               fast/encoding/hebrew/csISO88598I.html
               fast/encoding/hebrew/hebrew.html
               fast/encoding/hebrew/iso-ir-138.html
               fast/encoding/hebrew/logical.html

        * platform/text/TextEncodingRegistry.cpp: (WebCore::checkExistingName): Check for iso-8859-8
        (case-insensitively, because different versions of ICU report this MIME name in different
        case).

        * platform/text/TextCodecICU.cpp:
        (WebCore::TextCodecICU::registerExtendedEncodingNames): Updated some comments.
        (WebCore::TextCodecICU::registerExtendedCodecs): Try both MIME and IANA names here, too.
        There are four names in ICU that only have MIME names (x-mac-* ones), so we could end up
        with an encoding map entry, but no codec for these. This was not an issue on the Mac, as
        we also support these via TEC (which we should stop doing), but on Windows, this would
        likely crash.

2008-09-09  Dave Hyatt  <hyatt@apple.com

        Resurrect PlatformScrollbarWin.

        Reviewed by Adam Roben

        * WebCore.vcproj/WebCore.vcproj:
        * platform/win/PlatformScrollBarWin.cpp:
        (WebCore::isRunningOnVistaOrLater):
        (WebCore::checkAndInitScrollbarTheme):
        (WebCore::PlatformScrollbar::PlatformScrollbar):
        (WebCore::PlatformScrollbar::invalidateTrack):
        (WebCore::PlatformScrollbar::invalidatePart):
        (WebCore::PlatformScrollbar::paint):
        (WebCore::PlatformScrollbar::hasButtons):
        (WebCore::PlatformScrollbar::hasThumb):
        (WebCore::PlatformScrollbar::backButtonRect):
        (WebCore::PlatformScrollbar::forwardButtonRect):
        (WebCore::PlatformScrollbar::trackRect):
        (WebCore::PlatformScrollbar::gripperRect):
        (WebCore::PlatformScrollbar::thumbLength):
        (WebCore::PlatformScrollbar::paintButton):
        (WebCore::PlatformScrollbar::paintTrack):
        (WebCore::PlatformScrollbar::paintThumb):
        (WebCore::PlatformScrollbar::paintGripper):
        (WebCore::PlatformScrollbar::hitTest):
        (WebCore::PlatformScrollbar::handleMouseMoveEvent):
        (WebCore::PlatformScrollbar::handleMouseOutEvent):
        (WebCore::PlatformScrollbar::themeChanged):

2008-09-09  Cameron Zwarich  <cwzwarich@uwaterloo.ca>

        Reviewed by Maciej Stachowiak.

        Bug 20759: Remove MacroAssembler
        <https://bugs.webkit.org/show_bug.cgi?id=20759>

        Make the necessary changes to ForwardingHeaders to remove
        MacroAssembler.

        * ForwardingHeaders/masm/IA32MacroAsm.h: Removed.
        * ForwardingHeaders/masm/MacroAssembler.h: Removed.
        * ForwardingHeaders/masm/X86Assembler.h: Added.

2008-09-09  Alp Toker  <alp@nuanti.com>

        Reviewed by Dave Hyatt.

        https://bugs.webkit.org/show_bug.cgi?id=16792
        [GTK] Fails to render Japanese/Chinese text with simple path

        https://bugs.webkit.org/show_bug.cgi?id=16942
        [GTK] Oddities in font selection and fall back

        https://bugs.webkit.org/show_bug.cgi?id=16862
        [GTK] Custom fonts hard-coded to use grayscale antialiasing and no hinting

        GTK+ font fixes and enhancements.

        Implement font fallback for the simple FontConfig-based text path and
        improve the Pango-based complex text path to make use of requested
        font properties and available font selection.

        Add text shadow support to the complex path.

        * platform/graphics/gtk/FontCacheGtk.cpp:
        (WebCore::FontCache::getFontDataForCharacters):
        (WebCore::FontCache::getSimilarFontPlatformData):
        * platform/graphics/gtk/FontGtk.cpp:
        (WebCore::setPangoAttributes):
        (WebCore::Font::drawComplexText):
        (WebCore::getDefaultPangoLayout):
        (WebCore::Font::floatWidthForComplexText):
        (WebCore::Font::offsetForPositionForComplexText):
        (WebCore::Font::selectionRectForComplexText):
        * platform/graphics/gtk/FontPlatformData.h:
        (WebCore::FontPlatformData::FontPlatformData):
        (WebCore::FontPlatformData::hash):
        * platform/graphics/gtk/FontPlatformDataGtk.cpp:
        (WebCore::FontPlatformData::FontPlatformData):
        * platform/graphics/gtk/SimpleFontDataGtk.cpp:
        (WebCore::SimpleFontData::platformDestroy):

2008-09-09  Dave Hyatt  <hyatt@apple.com>

        Make the Windows classic case work again.  Overlap in slider constants and other constants broke
        the push state for buttons and checkboxes.  Make sure to check the RenderObject's appearance
        value to make sure it's really a slider thumb to resolve this conflict.

        Reviewed by Adam Roben

        * rendering/RenderThemeWin.cpp:
        (WebCore::drawControl):

2008-09-05  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Sam Weinig.

        Need to handle the case when 0% or 100% keyframe is omitted
        https://bugs.webkit.org/show_bug.cgi?id=20679

        Tests: animations/keyframes-from-missing.html
               animations/keyframes-to-missing.html

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::addKeyframeStyle):

2008-09-09  Dave Hyatt  <hyatt@apple.com>

        Resurrect Safari's original RenderThemeWin and bring it up to date with ToT.  Having a current
        RenderThemeWin that does not have any Skia dependencies should provide a good basis for a potential
        merge of Google Chrome's RenderThemeWin (to help us see where the Skia stuff can be cut and to see
        what changes have been made as compared with the old RenderThemeWin).

        Fix CSS2 system fonts to properly set both the rendering mode (so that they properly pick up GDI vs. CG
        text rendering modes) and the printer font setting (so that OS X system fonts properly pick up screen
        vs. printer advancement rounding).

        Reviewed by Adam/Sam

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        * platform/graphics/Icon.h:
        (WebCore::Icon::create):
        * rendering/RenderThemeWin.cpp:
        (WebCore::RenderThemeWin::RenderThemeWin):
        (WebCore::RenderThemeWin::~RenderThemeWin):
        (WebCore::RenderThemeWin::buttonTheme):
        (WebCore::RenderThemeWin::textFieldTheme):
        (WebCore::RenderThemeWin::menuListTheme):
        (WebCore::RenderThemeWin::sliderTheme):
        (WebCore::RenderThemeWin::close):
        (WebCore::RenderThemeWin::themeChanged):
        (WebCore::RenderThemeWin::supportsHover):
        (WebCore::fillFontDescription):
        (WebCore::RenderThemeWin::systemFont):
        (WebCore::RenderThemeWin::supportsFocus):
        (WebCore::RenderThemeWin::determineClassicState):
        (WebCore::RenderThemeWin::determineState):
        (WebCore::RenderThemeWin::determineSliderThumbState):
        (WebCore::RenderThemeWin::getClassicThemeData):
        (WebCore::RenderThemeWin::getThemeData):
        (WebCore::drawControl):
        (WebCore::RenderThemeWin::paintButton):
        (WebCore::RenderThemeWin::paintTextField):
        (WebCore::RenderThemeWin::paintMenuList):
        (WebCore::RenderThemeWin::adjustMenuListStyle):
        (WebCore::RenderThemeWin::adjustMenuListButtonStyle):
        (WebCore::RenderThemeWin::paintMenuListButton):
        (WebCore::RenderThemeWin::paintSliderTrack):
        (WebCore::RenderThemeWin::paintSliderThumb):
        (WebCore::RenderThemeWin::adjustSliderThumbSize):
        (WebCore::RenderThemeWin::paintSearchField):
        (WebCore::RenderThemeWin::adjustSearchFieldStyle):
        (WebCore::RenderThemeWin::paintSearchFieldCancelButton):
        (WebCore::RenderThemeWin::adjustSearchFieldCancelButtonStyle):
        (WebCore::RenderThemeWin::adjustSearchFieldDecorationStyle):
        (WebCore::RenderThemeWin::adjustSearchFieldResultsDecorationStyle):
        (WebCore::RenderThemeWin::paintSearchFieldResultsDecoration):
        (WebCore::RenderThemeWin::adjustSearchFieldResultsButtonStyle):
        (WebCore::RenderThemeWin::paintSearchFieldResultsButton):
        * rendering/RenderThemeWin.h:
        (WebCore::ThemeData::ThemeData):
        (WebCore::RenderThemeWin::paintSearchFieldDecoration):
        (WebCore::RenderThemeWin::adjustButtonStyle):
        (WebCore::RenderThemeWin::adjustTextFieldStyle):
        (WebCore::RenderThemeWin::adjustTextAreaStyle):

2008-09-09  Dean Jackson  <dino@apple.com>

        Reviewed by Sam Weinig.

        Document::createEvent missing cases for animation and
        transition events.
        https://bugs.webkit.org/show_bug.cgi?id=20734

        Test: transitions/transition-end-event-create.html
        Test: animations/animation-events-create.html

        * dom/Document.cpp:
        (WebCore::Document::createEvent):
            - add the two cases

2008-09-09  Dan Bernstein  <mitz@apple.com>

        - Tiger build fix

        * WebCore.Tiger.exp:
        * WebCore.base.exp:
        * platform/mac/WebCoreSystemInterface.h:
        * platform/mac/WebCoreSystemInterface.mm:

2008-09-09  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        - WebCore part of <rdar://problem/6206244> Use alternate character-to-glyph interface on Leopard

        * WebCore.Tiger.exp:
        * WebCore.base.exp:
        * platform/graphics/SimpleFontData.h:
        * platform/graphics/mac/GlyphPageTreeNodeMac.cpp:
        (WebCore::GlyphPage::fill):
        * platform/graphics/mac/SimpleFontDataMac.mm:
        (WebCore::initFontData):
        (WebCore::SimpleFontData::platformInit):
        (WebCore::SimpleFontData::platformDestroy):
        * platform/mac/WebCoreSystemInterface.h:
        * platform/mac/WebCoreSystemInterface.mm:

2008-09-09  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Tim.

        <rdar://problem/6198545> REGRESSION: Inspector debugger barfs on
        breakpoints inside eval.

        * page/inspector/inspector.js:

2008-09-09  Joerg Bornemann  <joerg.bornemann@trolltech.com>

        Reviewed by Simon.

        Fix compilation of the Qt port with disabled plugins on Windows

        * WebCore.pro:
        * plugins/PluginView.cpp:
        (WebCore::PluginView::PluginView):
        * plugins/PluginView.h:

2008-09-09  Jungshik Shin  <jungshik.shin@gmail.com>

        Reviewed by Alexey Proskuryakov.

        Try MIME charset names before trying IANA names
        ( https://bugs.webkit.org/show_bug.cgi?id=17537 )

        With this change, shorter and more widely used names (preferred MIME
        names) are returned by document.charset, document.characterSet,
        document.inputEncoding rather than IANA names. This  helps
        fixing bug 18085 in addition to web developers who are more familiar
        with MIME names. For instance, EUC-JP, ISO-8859-X and US-ASCII will be
        returned instead of Extended_UNIX_Code_Packed_Format_for_Japanese,
        ISO-8859-X:19xx, and ANSI_X3.4-1968. It also replaces IBM8xx with cp8xx.
        Note that cp/IBM 8xx are extremly rare in today's web. Even if they're
        used, the former is still recognized as aliases to the latter so that
        there's very little, if any, to worry about.

        * platform/text/TextCodecICU.cpp:
        (WebCore::TextCodecICU::registerExtendedEncodingNames):

2008-09-08  Sam Weinig  <sam@webkit.org>

        Reviewed by Maciej Stachowiak and Oliver Hunt.

        Add forwarding headers.

        * ForwardingHeaders/wtf/HashFunctions.h: Added.

2008-09-05  Dean Jackson  <dino@apple.com>

        Reviewed by Dan Bernstein.

        Update grammar so that we can add a keyframe rule via the DOM.
        https://bugs.webkit.org/show_bug.cgi?id=20613

        * css/CSSGrammar.y:
        * css/tokenizer.flex:

2008-09-08  Antti Koivisto  <antti@apple.com>

        Reviewed by Dan Bernstein.

        Allow <br> for simple UA stylesheet. Editing code generates them. It does not
        actually show up in any of the default stylesheets.

        * css/CSSStyleSelector.cpp:
        (WebCore::elementCanUseSimpleDefaultStyle):

2008-09-08  Dimitri Glazkov  <dglazkov@google.com>

        Reviewed by Dan Bernstein.

        - fix https://bugs.webkit.org/show_bug.cgi?id=20237
          Zero width and space characters are displayed incorrectly if not contained in a fallback font

        Adds an extra check for Object Replacement Character (U+FFFC) to address
        the issue with fast/text/zero-width-characters.html test when run
        with Windows system default fonts.

        * platform/graphics/Font.h:
        (WebCore::Font::treatAsZeroWidthSpace):

2008-09-08  Dean Jackson  <dino@apple.com>

        Reviewed by Sam Weinig.

        Code style issue I forgot to fix from previous commit.

        * platform/graphics/AffineTransform.cpp:
        (WebCore::AffineTransform::blend):

2008-09-08  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Sam Weinig

        - Animation of -webkit-transform matrix() function should not do linear interpolation
          https://bugs.webkit.org/show_bug.cgi?id=20667

        Test: animations/matrix-anim.html

        * ChangeLog:
        * platform/graphics/AffineTransform.cpp:
        (WebCore::affineTransformDecompose):
        (WebCore::affineTransformCompose):
        (WebCore::AffineTransform::blend):
        * platform/graphics/AffineTransform.h:
        * rendering/style/RenderStyle.cpp:
        (WebCore::MatrixTransformOperation::blend):

2008-09-08  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=20668
        multipart/form-data does not always include Content-type for submitted files

        Cannot be tested with DRT or manual tests.

        * platform/MIMETypeRegistry.cpp:
        (WebCore::initializeSupportedNonImageMimeTypes): Fix spacing.
        (WebCore::MIMETypeRegistry::getMIMETypeForPath): Default to application/octet-stream for
        unknown extensions, not just missing ones.

2008-09-08  Simon Hausmann  <hausmann@webkit.org>

        Build fix for the Qt/Windows build, define USE_JSC to
        enable the WebCore::String -> JSC::UString operator that
        MSVC insists on seeing

        * WebCore.pro:

2008-09-08  Anders Carlsson  <andersca@apple.com>

        Reviewed by Maciej.

        <rdar://problem/5850387> Showing bookmarks reloads Google Reader instead.

        In some cases, timeouts scheduled by a page in the onunload handler could fire even when the
        page had been unloaded and replaced by a non-HTML representation based view (such as the bookmarks view).

        Fix this by clearing timeouts for pages that aren't cached when the provisional load is committed.

        * bindings/js/JSDOMWindowBase.h:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::commitProvisionalLoad):

2008-09-07  Antti Koivisto  <antti@apple.com>

        Reviewed by Dave Hyatt.

        Don't leak the simple stylesheet.
        Also call RenderTheme::adjustDefaultStyleSheet() in right place.

        * css/CSSStyleSelector.cpp:
        (WebCore::loadFullDefaultStyle):
        (WebCore::loadSimpleDefaultStyle):
        (WebCore::CSSStyleSelector::styleForElement):

2008-09-07  Cameron Zwarich  <cwzwarich@uwaterloo.ca>

        Reviewed by Oliver Hunt.

        Bug 20711: Change KJS prefix on preprocessor macros to JSC
        <https://bugs.webkit.org/show_bug.cgi?id=20711>

        * bindings/js/JSEventTargetBase.h:
        * bindings/js/JSHTMLInputElementBase.cpp:
        * bindings/js/JSHTMLInputElementBase.h:
        * bindings/scripts/CodeGeneratorJS.pm:

2008-09-07  Cameron Zwarich  <cwzwarich@uwaterloo.ca>

        Reviewed by Maciej Stachowiak.

        Bug 20704: Replace the KJS namespace
        <https://bugs.webkit.org/show_bug.cgi?id=20704>

        Rename the KJS namespace to JSC. There are still some uses of KJS in the
        names of JNI functions, and I will check if these are safe to change
        as well.

        * WebCore.base.exp:
        * bindings/js/GCController.cpp:
        * bindings/js/JSAttrCustom.cpp:
        * bindings/js/JSAudioConstructor.cpp:
        * bindings/js/JSAudioConstructor.h:
        (WebCore::JSAudioConstructor::classInfo):
        * bindings/js/JSCSSRuleCustom.cpp:
        * bindings/js/JSCSSStyleDeclarationCustom.cpp:
        * bindings/js/JSCSSValueCustom.cpp:
        * bindings/js/JSCanvasPixelArrayCustom.cpp:
        * bindings/js/JSCanvasRenderingContext2DCustom.cpp:
        * bindings/js/JSClipboardCustom.cpp:
        * bindings/js/JSConsoleCustom.cpp:
        * bindings/js/JSCustomSQLStatementCallback.cpp:
        (WebCore::JSCustomSQLStatementCallback::handleEvent):
        * bindings/js/JSCustomSQLStatementCallback.h:
        (WebCore::JSCustomSQLStatementCallback::create):
        * bindings/js/JSCustomSQLStatementErrorCallback.cpp:
        (WebCore::JSCustomSQLStatementErrorCallback::handleEvent):
        * bindings/js/JSCustomSQLStatementErrorCallback.h:
        (WebCore::JSCustomSQLStatementErrorCallback::create):
        * bindings/js/JSCustomSQLTransactionCallback.cpp:
        (WebCore::JSCustomSQLTransactionCallback::handleEvent):
        * bindings/js/JSCustomSQLTransactionCallback.h:
        (WebCore::JSCustomSQLTransactionCallback::create):
        * bindings/js/JSCustomSQLTransactionErrorCallback.cpp:
        (WebCore::JSCustomSQLTransactionErrorCallback::handleEvent):
        * bindings/js/JSCustomSQLTransactionErrorCallback.h:
        (WebCore::JSCustomSQLTransactionErrorCallback::create):
        * bindings/js/JSCustomVoidCallback.cpp:
        (WebCore::JSCustomVoidCallback::handleEvent):
        * bindings/js/JSCustomVoidCallback.h:
        (WebCore::JSCustomVoidCallback::create):
        * bindings/js/JSCustomXPathNSResolver.cpp:
        (WebCore::JSCustomXPathNSResolver::create):
        * bindings/js/JSCustomXPathNSResolver.h:
        * bindings/js/JSDOMApplicationCacheCustom.cpp:
        (WebCore::JSDOMApplicationCache::dispatchEvent):
        * bindings/js/JSDOMBinding.cpp:
        (WebCore::jsOwnedStringOrNull):
        * bindings/js/JSDOMBinding.h:
        (WebCore::DOMObject::DOMObject):
        (WebCore::cacheDOMObject):
        (WebCore::cacheSVGDOMObject):
        (WebCore::DOMExceptionTranslator::DOMExceptionTranslator):
        (WebCore::toJS):
        * bindings/js/JSDOMWindowBase.cpp:
        * bindings/js/JSDOMWindowBase.h:
        (WebCore::JSDOMWindowBase::classInfo):
        (WebCore::JSDOMWindowBase::d):
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::getPropertyAttributes):
        * bindings/js/JSDOMWindowCustom.h:
        (WebCore::asJSDOMWindow):
        (WebCore::JSDOMWindow::customGetOwnPropertySlot):
        (WebCore::JSDOMWindow::customPut):
        (WebCore::JSDOMWindowBase::allowsAccessFrom):
        (WebCore::JSDOMWindowBase::allowsAccessFromNoErrorMessage):
        * bindings/js/JSDOMWindowShell.cpp:
        (WebCore::JSDOMWindowShell::getPropertyAttributes):
        * bindings/js/JSDOMWindowShell.h:
        (WebCore::JSDOMWindowShell::classInfo):
        * bindings/js/JSDatabaseCustom.cpp:
        * bindings/js/JSDocumentCustom.cpp:
        * bindings/js/JSDocumentFragmentCustom.cpp:
        * bindings/js/JSElementCustom.cpp:
        * bindings/js/JSEventCustom.cpp:
        * bindings/js/JSEventListener.cpp:
        * bindings/js/JSEventListener.h:
        (WebCore::JSUnprotectedEventListener::create):
        (WebCore::JSEventListener::create):
        * bindings/js/JSEventTargetBase.cpp:
        * bindings/js/JSEventTargetBase.h:
        (WebCore::JSEventTargetBase::getValueProperty):
        (WebCore::JSEventTargetBase::putValueProperty):
        (WebCore::JSEventTargetBase::getOwnPropertySlot):
        (WebCore::JSEventTargetBase::put):
        (WebCore::JSEventTargetPrototype::JSEventTargetPrototype):
        (WebCore::JSEventTargetPrototype::self):
        (WebCore::JSEventTargetPrototype::getOwnPropertySlot):
        (WebCore::JSEventTargetPrototype::classInfo):
        * bindings/js/JSEventTargetNode.cpp:
        * bindings/js/JSEventTargetNode.h:
        (WebCore::JSEventTargetNode::getOwnPropertySlot):
        (WebCore::JSEventTargetNode::getValueProperty):
        (WebCore::JSEventTargetNode::put):
        (WebCore::JSEventTargetNode::putValueProperty):
        * bindings/js/JSHTMLAllCollection.h:
        (WebCore::JSHTMLAllCollection::JSHTMLAllCollection):
        (WebCore::JSHTMLAllCollection::toBoolean):
        * bindings/js/JSHTMLAppletElementCustom.cpp:
        * bindings/js/JSHTMLCollectionCustom.cpp:
        * bindings/js/JSHTMLDocumentCustom.cpp:
        * bindings/js/JSHTMLElementCustom.cpp:
        * bindings/js/JSHTMLEmbedElementCustom.cpp:
        * bindings/js/JSHTMLFormElementCustom.cpp:
        * bindings/js/JSHTMLFrameElementCustom.cpp:
        * bindings/js/JSHTMLFrameSetElementCustom.cpp:
        * bindings/js/JSHTMLIFrameElementCustom.cpp:
        * bindings/js/JSHTMLInputElementBase.cpp:
        (WebCore::JSHTMLInputElementBase::JSHTMLInputElementBase):
        (WebCore::JSHTMLInputElementBase::getOwnPropertySlot):
        * bindings/js/JSHTMLInputElementBase.h:
        (WebCore::JSHTMLInputElementBase::classInfo):
        * bindings/js/JSHTMLObjectElementCustom.cpp:
        * bindings/js/JSHTMLOptionElementConstructor.cpp:
        * bindings/js/JSHTMLOptionElementConstructor.h:
        (WebCore::JSHTMLOptionElementConstructor::classInfo):
        * bindings/js/JSHTMLOptionsCollectionCustom.cpp:
        * bindings/js/JSHTMLSelectElementCustom.cpp:
        (WebCore::selectIndexSetter):
        (WebCore::JSHTMLSelectElement::indexSetter):
        * bindings/js/JSHTMLSelectElementCustom.h:
        * bindings/js/JSHistoryCustom.cpp:
        * bindings/js/JSImageConstructor.cpp:
        * bindings/js/JSImageConstructor.h:
        (WebCore::JSImageConstructor::classInfo):
        * bindings/js/JSInspectedObjectWrapper.cpp:
        * bindings/js/JSInspectedObjectWrapper.h:
        (WebCore::JSInspectedObjectWrapper::wrapOutgoingValue):
        (WebCore::JSInspectedObjectWrapper::classInfo):
        * bindings/js/JSInspectorCallbackWrapper.cpp:
        * bindings/js/JSInspectorCallbackWrapper.h:
        (WebCore::JSInspectorCallbackWrapper::classInfo):
        (WebCore::JSInspectorCallbackWrapper::wrapOutgoingValue):
        * bindings/js/JSJavaScriptCallFrameCustom.cpp:
        * bindings/js/JSLocationCustom.cpp:
        * bindings/js/JSMimeTypeArrayCustom.cpp:
        * bindings/js/JSNSResolver.cpp:
        * bindings/js/JSNSResolver.h:
        (WebCore::JSNSResolver::create):
        * bindings/js/JSNamedNodeMapCustom.cpp:
        * bindings/js/JSNamedNodesCollection.cpp:
        (WebCore::JSNamedNodesCollection::JSNamedNodesCollection):
        * bindings/js/JSNamedNodesCollection.h:
        (WebCore::JSNamedNodesCollection::classInfo):
        * bindings/js/JSNavigatorCustom.cpp:
        * bindings/js/JSNodeCustom.cpp:
        * bindings/js/JSNodeFilterCondition.cpp:
        (WebCore::JSNodeFilterCondition::acceptNode):
        * bindings/js/JSNodeFilterCondition.h:
        (WebCore::JSNodeFilterCondition::create):
        * bindings/js/JSNodeFilterCustom.cpp:
        * bindings/js/JSNodeIteratorCustom.cpp:
        * bindings/js/JSNodeListCustom.cpp:
        * bindings/js/JSPluginArrayCustom.cpp:
        * bindings/js/JSPluginCustom.cpp:
        * bindings/js/JSPluginElementFunctions.cpp:
        (WebCore::getRuntimeObject):
        * bindings/js/JSPluginElementFunctions.h:
        * bindings/js/JSQuarantinedObjectWrapper.cpp:
        (WebCore::JSQuarantinedObjectWrapper::construct):
        (WebCore::JSQuarantinedObjectWrapper::call):
        * bindings/js/JSQuarantinedObjectWrapper.h:
        (WebCore::JSQuarantinedObjectWrapper::unwrappedObject):
        (WebCore::JSQuarantinedObjectWrapper::unwrappedGlobalObject):
        (WebCore::JSQuarantinedObjectWrapper::className):
        * bindings/js/JSRGBColor.cpp:
        * bindings/js/JSRGBColor.h:
        (WebCore::JSRGBColor::classInfo):
        * bindings/js/JSSQLResultSetRowListCustom.cpp:
        * bindings/js/JSSQLTransactionCustom.cpp:
        * bindings/js/JSSVGLazyEventListener.cpp:
        * bindings/js/JSSVGLazyEventListener.h:
        * bindings/js/JSSVGLengthCustom.cpp:
        * bindings/js/JSSVGMatrixCustom.cpp:
        (WebCore::JSSVGMatrix::inverse):
        (WebCore::JSSVGMatrix::rotateFromVector):
        * bindings/js/JSSVGPathSegCustom.cpp:
        * bindings/js/JSSVGPathSegListCustom.cpp:
        (WebCore::JSSVGPathSegList::initialize):
        (WebCore::JSSVGPathSegList::getItem):
        (WebCore::JSSVGPathSegList::insertItemBefore):
        (WebCore::JSSVGPathSegList::replaceItem):
        (WebCore::JSSVGPathSegList::removeItem):
        (WebCore::JSSVGPathSegList::appendItem):
        * bindings/js/JSSVGPointListCustom.cpp:
        * bindings/js/JSSVGTransformListCustom.cpp:
        * bindings/js/JSStorageCustom.cpp:
        * bindings/js/JSStyleSheetCustom.cpp:
        * bindings/js/JSStyleSheetListCustom.cpp:
        * bindings/js/JSTextCustom.cpp:
        * bindings/js/JSTreeWalkerCustom.cpp:
        * bindings/js/JSXMLHttpRequestConstructor.cpp:
        * bindings/js/JSXMLHttpRequestConstructor.h:
        (WebCore::JSXMLHttpRequestConstructor::classInfo):
        * bindings/js/JSXMLHttpRequestCustom.cpp:
        * bindings/js/JSXMLHttpRequestUploadCustom.cpp:
        * bindings/js/JSXSLTProcessorConstructor.cpp:
        * bindings/js/JSXSLTProcessorConstructor.h:
        (WebCore::JSXSLTProcessorConstructor::classInfo):
        * bindings/js/JSXSLTProcessorCustom.cpp:
        * bindings/js/ScheduledAction.cpp:
        * bindings/js/ScheduledAction.h:
        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::attachDebugger):
        (WebCore::ScriptController::windowScriptNPObject):
        * bindings/js/ScriptController.h:
        * bindings/js/ScriptControllerGtk.cpp:
        (WebCore::ScriptController::createScriptInstanceForWidget):
        * bindings/js/ScriptControllerMac.mm:
        (WebCore::ScriptController::createScriptInstanceForWidget):
        (WebCore::ScriptController::windowScriptObject):
        (WebCore::ScriptController::clearPlatformScriptObjects):
        (WebCore::updateRenderingForBindings):
        (WebCore::ScriptController::initJavaJSBindings):
        * bindings/js/ScriptControllerQt.cpp:
        (WebCore::ScriptController::createScriptInstanceForWidget):
        * bindings/js/ScriptControllerWin.cpp:
        (WebCore::ScriptController::createScriptInstanceForWidget):
        * bindings/js/ScriptControllerWx.cpp:
        (WebCore::ScriptController::createScriptInstanceForWidget):
        * bindings/js/StringSourceProvider.h:
        (WebCore::StringSourceProvider::getRange):
        * bindings/objc/DOM.mm:
        (-[DOMNode JSC::Bindings::]):
        * bindings/objc/DOMInternal.h:
        * bindings/objc/DOMInternal.mm:
        (-[WebScriptObject _initializeScriptDOMNodeImp]):
        * bindings/objc/DOMUtility.mm:
        (JSC::createDOMWrapper):
        (WebCore::createDOMWrapper):
        * bindings/objc/WebScriptObject.mm:
        (WebCore::createJSWrapper):
        (-[WebScriptObject _initWithJSObject:JSC::originRootObject:JSC::Bindings::rootObject:JSC::Bindings::]):
        * bindings/objc/WebScriptObjectPrivate.h:
        * bindings/scripts/CodeGeneratorJS.pm:
        * bridge/NP_jsobject.cpp:
        * bridge/NP_jsobject.h:
        * bridge/c/c_class.cpp:
        * bridge/c/c_class.h:
        * bridge/c/c_instance.cpp:
        * bridge/c/c_instance.h:
        * bridge/c/c_runtime.cpp:
        * bridge/c/c_runtime.h:
        * bridge/c/c_utility.cpp:
        * bridge/c/c_utility.h:
        * bridge/jni/jni_class.cpp:
        * bridge/jni/jni_class.h:
        * bridge/jni/jni_instance.cpp:
        * bridge/jni/jni_instance.h:
        * bridge/jni/jni_jsobject.h:
        * bridge/jni/jni_jsobject.mm:
        (JavaJSObject::call):
        (JavaJSObject::convertJObjectToValue):
        * bridge/jni/jni_objc.mm:
        (JSC::Bindings::dispatchJNICall):
        * bridge/jni/jni_runtime.cpp:
        * bridge/jni/jni_runtime.h:
        * bridge/jni/jni_utility.cpp:
        * bridge/jni/jni_utility.h:
        * bridge/npruntime.cpp:
        (_NPN_GetStringIdentifier):
        * bridge/objc/WebScriptObject.h:
        * bridge/objc/objc_class.h:
        * bridge/objc/objc_class.mm:
        * bridge/objc/objc_instance.h:
        * bridge/objc/objc_instance.mm:
        * bridge/objc/objc_runtime.h:
        * bridge/objc/objc_runtime.mm:
        * bridge/objc/objc_utility.h:
        * bridge/objc/objc_utility.mm:
        * bridge/qt/qt_class.cpp:
        * bridge/qt/qt_class.h:
        * bridge/qt/qt_instance.cpp:
        * bridge/qt/qt_instance.h:
        * bridge/qt/qt_runtime.cpp:
        (JSC::Bindings::convertQVariantToValue):
        (JSC::Bindings::):
        * bridge/qt/qt_runtime.h:
        * bridge/runtime.cpp:
        * bridge/runtime.h:
        * bridge/runtime_array.cpp:
        * bridge/runtime_array.h:
        * bridge/runtime_method.cpp:
        * bridge/runtime_method.h:
        * bridge/runtime_object.cpp:
        * bridge/runtime_object.h:
        * bridge/runtime_root.cpp:
        (JSC::Bindings::RootObject::invalidate):
        (JSC::Bindings::RootObject::gcProtect):
        (JSC::Bindings::RootObject::gcUnprotect):
        * bridge/runtime_root.h:
        * bridge/testbindings.cpp:
        * bridge/testbindings.mm:
        * bridge/testqtbindings.cpp:
        * dom/Document.cpp:
        (WebCore::Document::~Document):
        * dom/NSResolver.h:
        * dom/Node.cpp:
        (WebCore::Node::setDocument):
        (WebCore::ResolveNamespaceFunctor::ResolveNamespaceFunctor):
        (WebCore::resolveNamespacesForSelector):
        (WebCore::Node::querySelector):
        (WebCore::Node::querySelectorAll):
        * dom/Node.h:
        * dom/NodeFilter.cpp:
        * dom/NodeFilter.h:
        * dom/NodeFilterCondition.cpp:
        * dom/NodeFilterCondition.h:
        * dom/NodeIterator.cpp:
        * dom/NodeIterator.h:
        * dom/Traversal.cpp:
        * dom/Traversal.h:
        * dom/TreeWalker.cpp:
        * dom/TreeWalker.h:
        * dom/make_names.pl:
        * history/CachedPage.cpp:
        * history/CachedPage.h:
        * html/HTMLPlugInElement.cpp:
        (WebCore::HTMLPlugInElement::getInstance):
        * html/HTMLPlugInElement.h:
        * loader/FrameLoader.cpp:
        * loader/FrameLoader.h:
        * loader/icon/IconDatabase.cpp:
        (WebCore::iconDatabase):
        * page/Console.cpp:
        * page/Console.h:
        * page/InspectorController.cpp:
        (WebCore::XMLHttpRequestResource::XMLHttpRequestResource):
        (WebCore::XMLHttpRequestResource::~XMLHttpRequestResource):
        (WebCore::InspectorResource::setXMLHttpRequestProperties):
        (WebCore::InspectorResource::sourceString):
        (WebCore::getResourceDocumentNode):
        (WebCore::search):
        (WebCore::InspectorController::focusNode):
        (WebCore::InspectorController::inspectedWindowScriptObjectCleared):
        (WebCore::InspectorController::addDatabaseScriptResource):
        (WebCore::InspectorController::resourceRetrievedByXMLHttpRequest):
        * page/InspectorController.h:
        (WebCore::InspectorController::profiles):
        * page/JavaScriptCallFrame.cpp:
        (WebCore::JavaScriptCallFrame::scopeChain):
        * page/JavaScriptCallFrame.h:
        (WebCore::JavaScriptCallFrame::create):
        (WebCore::JavaScriptCallFrame::update):
        * page/JavaScriptDebugListener.h:
        * page/JavaScriptDebugServer.cpp:
        (WebCore::dispatchDidParseSource):
        * page/JavaScriptDebugServer.h:
        * page/JavaScriptProfile.cpp:
        * page/JavaScriptProfile.h:
        * page/JavaScriptProfileNode.cpp:
        (WebCore::getTotalTime):
        (WebCore::getSelfTime):
        (WebCore::getTotalPercent):
        (WebCore::getSelfPercent):
        (WebCore::getNumberOfCalls):
        (WebCore::getChildren):
        (WebCore::getVisible):
        * page/JavaScriptProfileNode.h:
        * page/Page.cpp:
        (WebCore::Page::setDebuggerForAllPages):
        (WebCore::Page::setDebugger):
        * page/Page.h:
        (WebCore::Page::debugger):
        * page/mac/FrameMac.mm:
        * platform/KURL.h:
        (WebCore::KURL::operator JSC::UString):
        * platform/text/AtomicString.cpp:
        (WebCore::AtomicString::add):
        (WebCore::AtomicString::find):
        * platform/text/AtomicString.h:
        (WebCore::AtomicString::AtomicString):
        * platform/text/PlatformString.h:
        * platform/text/String.cpp:
        (WebCore::charactersToDouble):
        * platform/win/BString.cpp:
        * platform/win/BString.h:
        * plugins/MimeTypeArray.h:
        * plugins/Plugin.h:
        * plugins/PluginArray.h:
        * plugins/PluginView.cpp:
        (WebCore::PluginView::start):
        (WebCore::PluginView::performRequest):
        (WebCore::PluginView::bindingInstance):
        * plugins/PluginView.h:
        * plugins/gtk/PluginViewGtk.cpp:
        (WebCore::PluginView::paint):
        (WebCore::PluginView::handleKeyboardEvent):
        (WebCore::PluginView::handleMouseEvent):
        (WebCore::PluginView::setNPWindowRect):
        (WebCore::PluginView::stop):
        (WebCore::PluginView::init):
        * plugins/qt/PluginViewQt.cpp:
        (WebCore::PluginView::setNPWindowRect):
        (WebCore::PluginView::stop):
        (WebCore::PluginView::init):
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginView::dispatchNPEvent):
        (WebCore::PluginView::handleKeyboardEvent):
        (WebCore::PluginView::handleMouseEvent):
        (WebCore::PluginView::setNPWindowRect):
        (WebCore::PluginView::stop):
        * storage/Database.cpp:
        (WebCore::Database::Database):
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::responseText):
        (WebCore::XMLHttpRequest::loadRequestAsynchronously):
        (WebCore::XMLHttpRequest::clearResponse):
        (WebCore::XMLHttpRequest::dropProtection):
        (WebCore::XMLHttpRequest::didFinishLoading):
        (WebCore::XMLHttpRequest::didReceiveData):
        * xml/XMLHttpRequest.h:

2008-09-07  Adam Barth  <abarth@webkit.org>

        Reviewed by Sam Weinig.

        Adopt opener restriction on frame navigation.
          https://bugs.webkit.org/show_bug.cgi?id=20642

        This restriction helps prevent an attacker from navigating top-level
        windows that were created by another web site.

        Tests: http/tests/security/frameNavigation/not-opener.html
               http/tests/security/frameNavigation/opener.html

        * loader/FrameLoader.cpp:
        (WebCore::canAccessAncestor):
        (WebCore::FrameLoader::shouldAllowNavigation):

2008-09-07  Dan Bernstein  <mitz@apple.com>

        Reviewed by Maciej Stachowiak.

        - use the correct sign for vertical offsets of combining marks

        * platform/graphics/win/UniscribeController.cpp:
        (WebCore::UniscribeController::shapeAndPlaceItem):

2008-09-07  Dan Bernstein  <mitz@apple.com>

        Reviewed by Dave Hyatt.

        - add the combining mark offsets in two places where I forgot them

        * platform/graphics/win/FontCGWin.cpp:
        (WebCore::Font::drawGlyphs):

2008-09-07  Dan Bernstein  <mitz@apple.com>

        Reviewed by Dave Hyatt.

        - correct glyph advances in complex text using web fonts rendered with
          Core Graphics

        * platform/graphics/win/FontCustomPlatformData.cpp:
        (WebCore::FontCustomPlatformData::fontPlatformData):

2008-09-07  Keishi Hattori  <casey.hattori@gmail.com>

        Adds console.dirxml support to the Web Inspector.

        https://bugs.webkit.org/show_bug.cgi?id=19156

        Reviewed by Timothy Hatcher.

        * WebCore.vcproj/WebCore.vcproj: Added ElementsTreeOutline.js.
        * bindings/js/JSConsoleCustom.cpp:
        (WebCore::JSConsole::dirxml):
        * page/Console.cpp:
        (WebCore::Console::dirxml): Adds a ConsoleMessage with NodeMessageLevel.
        * page/Console.h:
        (WebCore::): Added NodeMessageLevel.
        * page/Console.idl: Added console.dirxml.
        * page/inspector/Console.js: A NodeMessage creates a ElementsTreeOutline.
        * page/inspector/ElementsPanel.js: Modified to use ElementsTreeOutline. The ElementsTreeOutline
        in the ElementsPanel has includeRootDOMNode and selectEnabled set to true.
        * page/inspector/ElementsTreeOutline.js: Added.
        (WebInspector.ElementsTreeOutline): A subclass of TreeOutline for displaying a DOM node tree.
        (WebInspector.ElementsTreeElement): A subclass of TreeElement for ElementsTreeOutline.
        * page/inspector/WebKit.qrc: Added ElementsTreeOutline.js.
        * page/inspector/inspector.css:
        * page/inspector/inspector.html: Added ElementsTreeOutline.js.
        * page/inspector/inspector.js: Moved hover related methods to WebInspector.
        (WebInspector.altKeyDown):
        (WebInspector.forceHoverHighlight):
        (WebInspector.hoveredDOMNode):
        (WebInspector._updateHoverHighlightSoon):
        (WebInspector._updateHoverHighlight):
        (WebInspector.documentKeyDown): Updates WebInspector.altKeyDown
        (WebInspector.documentKeyUp): Updates WebInspector.altKeyDown
        * page/inspector/utilities.js: Added getDocumentForNode, parentNodeOrFrameElement,
        isAncestorIncludingParentFrames.

2008-09-06  Mark Rowe  <mrowe@apple.com>

        Qt build fix.

        * bridge/qt/qt_runtime.cpp:
        (KJS::Bindings::convertQVariantToValue):

=== End merge of squirrelfish-extreme ===

2008-09-05  Oliver Hunt  <oliver@apple.com>

        Start bringing up SFX on windows.

        Reviewed by Mark Rowe and Sam Weinig

        Start doing the work to bring up SFX on windows.  Initially
        just working on WREC, as it does not make any calls so reduces
        the amount of code that needs to be corrected.

        Add forwarding headers

        * ChangeLog:
        * ForwardingHeaders/masm/MacroAssembler.h: Added.
        * WebCore.vcproj/WebCore.vcproj:

2008-08-27  Mark Rowe  <mrowe@apple.com>

        Reviewed by Oliver Hunt.

        Fix the build of the full WebKit stack.

        Add forwarding headers.

        * ForwardingHeaders/masm/IA32MacroAsm.h: Added.
        * ForwardingHeaders/wrec/WREC.h: Added.

=== Start merge of squirrelfish-extreme ===

2008-09-06  Antti Koivisto  <antti@apple.com>

        Reviewed by Dave Hyatt.

        <rdar://problem/6187043>
        Don't parse full HTML user agent style sheet unless it is actually needed
        <rdar://problem/6131889>
        WebView is significantly more expensive to create recently

        Parsing the html4.css takes significant amount of time and memory (~50kb) on application
        startup. Some clients may never use most of the rules.

        With this patch we use simplified UA stylesheet until we hit something it can't handle.
        This avoids full stylesheet parsing on application startup (due to empty document construction)
        and also makes it possible for clients with very simple demands (divs and spans only) never to load
        the full style.

        It also delays view source style parsing until it is used.

        * css/CSSStyleSelector.cpp:
        (WebCore::elementCanUseSimpleDefaultStyle):
        (WebCore::CSSStyleSelector::CSSStyleSelector):
        (WebCore::loadFullDefaultStyle):
        (WebCore::loadSimpleDefaultStyle):
        (WebCore::loadViewSourceStyle):
        (WebCore::CSSStyleSelector::matchUARules):
        (WebCore::CSSStyleSelector::styleForElement):

2008-09-06  Kevin Ollivier  <kevino@theolliviers.com>

        wx build fix.

        * WebCoreSources.bkl:

2008-09-06  Antti Koivisto  <antti@apple.com>

        Reverting r35953 which was causing problems on Windows which relies on
        WebCore timers in nested event loops. r36132 did alternative fix.

        * page/Chrome.cpp:
        (WebCore::PageGroupLoadDeferrer::PageGroupLoadDeferrer):
        (WebCore::PageGroupLoadDeferrer::~PageGroupLoadDeferrer):

2008-09-06  Antti Koivisto  <antti@apple.com>

        Reviewed by Dan Bernstein.

        Fix <rdar://problem/6201644>
        https://bugs.webkit.org/show_bug.cgi?id=20493
        Crash after OK in dialog box and reloading page in secure mode

        Limited loader only fix since the general timer fix is causing problems on Windows.

        * loader/loader.cpp:
        (WebCore::Loader::servePendingRequests):
        (WebCore::Loader::Host::Host):
        (WebCore::Loader::Host::didFinishLoading):
        (WebCore::Loader::Host::didFail):
        (WebCore::Loader::Host::didReceiveData):
        * loader/loader.h:
        (WebCore::Loader::Host::processingResource):

2008-09-06  Dan Bernstein  <mitz@apple.com>

        Reviewed by Dave Hyatt.

        The initial Core Text adoption prototype was made by Daniel Fenwick.

        - <rdar://problem/5158514> Add a Core Text-based complex text code path

        Currently the Core Text code path is not used in any configuration.

        * WebCore.xcodeproj/project.pbxproj: Added files.
        * config.h: Defined WTF_USE_ATSUI and WTF_USE_CORE_TEXT.
        * platform/graphics/Font.cpp:
        (WebCore::WidthIterator::advance): Moved the spacingDisabled() test out
        of the loop.
        * platform/graphics/GlyphBuffer.h:
        (WebCore::GlyphBuffer::add): Added this version that takes an advance.
        * platform/graphics/SimpleFontData.h: Added ATSUI and CORE_TEXT #ifdefs.
        Added getCTFont() and getCFStringAttributes() and corresponding data
        members for Core Text.
        * platform/graphics/mac/CoreTextController.cpp: Added.
        (WebCore::roundCGFloat): Helper function.
        (WebCore::ceilCGFloat): Helper function.
        (WebCore::CoreTextController::CoreTextRun::CoreTextRun):
        (WebCore::CoreTextController::CoreTextController):
        (WebCore::CoreTextController::offsetForPosition):
        (WebCore::CoreTextController::collectCoreTextRuns): Added. Segments the
        run into subruns as necessary such that each subrun can be rendered with
        a single font. Also separates out soft hyphens and replaces them with
        real hyphens, because Core Text does not emit a glyph for soft hyphens.
        Then calls collectCoreTextRunsForCharacters() on each subrun.
        (WebCore::CoreTextController::advance):
        (WebCore::CoreTextController::collectCoreTextRunsForCharacters): Creates
        a CTLine from the given subrun and collects its CoreTextRuns.
        (WebCore::CoreTextController::adjustGlyphsAndAdvances): Applies the
        rounding hacks, letter- and word-spacing and glyph substitutions and
        stores the resulting adjusted glyphs and advances.
        * platform/graphics/mac/CoreTextController.h: Copied from WebCore/platform/graphics/win/UniscribeController.h.
        (WebCore::CoreTextController::totalWidth):
        (WebCore::CoreTextController::finalRoundingWidth):
        (WebCore::CoreTextController::CoreTextRun::ctRun):
        (WebCore::CoreTextController::CoreTextRun::glyphCount):
        (WebCore::CoreTextController::CoreTextRun::fontData):
        (WebCore::CoreTextController::CoreTextRun::characters):
        (WebCore::CoreTextController::CoreTextRun::stringLocation):
        (WebCore::CoreTextController::CoreTextRun::stringLength):
        (WebCore::CoreTextController::CoreTextRun::indexAt):
        * platform/graphics/mac/FontMac.mm: Moved the ATSUI-specific parts to
        FontMacATSUI.mm.
        * platform/graphics/mac/FontMacATSUI.mm: Copied from WebCore/platform/graphics/mac/FontMac.mm.
        (WebCore::disableLigatures): Changed to call
        FontPlatformData::allowsLigatures().
        (WebCore::overrideLayoutOperation): Changed to call
        FontPlatformData::roundsGlyphAdvances().
        * platform/graphics/mac/FontMacCoreText.cpp: Copied from WebCore/platform/graphics/win/FontWin.cpp.
        (WebCore::Font::selectionRectForComplexText): Changed to use
        totalWidth() instead of advancing to the end and using runWidthSoFar().
        (WebCore::Font::drawComplexText):
        (WebCore::Font::floatWidthForComplexText): Ditto.
        (WebCore::Font::offsetForPositionForComplexText):
        * platform/graphics/mac/FontPlatformData.h:
        * platform/graphics/mac/FontPlatformDataMac.mm:
        (WebCore::FontPlatformData::setFont):
        (WebCore::FontPlatformData::roundsGlyphAdvances): Added. Checks the
        AppKit rendering mode.
        (WebCore::FontPlatformData::allowsLigatures): Added. Implements the
        heuristic that allows ligatures in fonts that do not have a glyph for
        'a', based on the assumption that such fonts are only used in complex
        text.
        * platform/graphics/mac/SimpleFontDataMac.mm:
        (WebCore::SimpleFontData::platformInit):
        (WebCore::SimpleFontData::platformDestroy):
        (WebCore::SimpleFontData::getCTFont): Added.
        (WebCore::SimpleFontData::getCFStringAttributes): Added. Caches and
        returns an attributes dictionary.
        * platform/text/mac/ShapeArabic.c: Added ATSUI #ifdefs.
        * platform/text/mac/ShapeArabic.h: Ditto.

2008-09-06  Dan Bernstein  <mitz@apple.com>

        Reviewed by Dave Hyatt.

        - make combining mark offsets work in CG text on Windows

        * platform/graphics/win/FontCGWin.cpp:
        (WebCore::Font::drawGlyphs): The old code tried to translate the text
        matrix, but failed for two reasons: it did not actually change the
        matrix, and even if it did, CGContextSetTextPosition overwrites the
        translation values in the text matrix. Instead, just added the
        translation to the anchor point.

2008-09-05  Gustavo Noronha Silva  <gns@gnome.org>

        Reviewed by Alp Toker.

        https://bugs.webkit.org/show_bug.cgi?id=18346
        [GTK] Remove build warnings

        Applied some casts, and removed an unused typedef to make the
        compiler happy, printing less warnings when building.

        * page/gtk/AccessibilityObjectWrapperAtk.cpp:
        * platform/graphics/gtk/SimpleFontDataPango.cpp:
        (WebCore::SimpleFontData::containsCharacters):
        * platform/graphics/gtk/VideoSinkGStreamer.cpp:
        (webkit_video_sink_set_caps):
        * platform/network/soup/ResourceHandleSoup.cpp:

2008-09-05  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Roben.

        Build fix for WebKitWin and Chromium

        * platform/FileSystem.h:

2008-09-05  Eric Seidel  <eric@webkit.org>

        Reviewed by Darin Adler.

        Try to make Chromium compile with ToT:
        - Wrap a few places which depend on KJS:: in #if USE(JSC)
        - Include some windows forward declarations

        * dom/Node.h:
        * page/Console.h:
        * page/animation/CompositeAnimation.h:
        * platform/FileSystem.h:
        * platform/graphics/Image.h:
        * platform/text/AtomicString.h:
        * platform/text/String.cpp:
        * rendering/style/RenderStyle.h:

2008-09-05  Dave Hyatt  <hyatt@apple.com>

        Add support for runtime switchability of the Aqua look and the native look on Windows.
        Make RenderThemeWin compile by default even when USE(SAFARI_THEME) is set.

        Reviewed by Adam Roben

        * WebCore.vcproj/WebCore.vcproj:
        * page/Settings.cpp:
        (WebCore::Settings::setShouldPaintNativeControls):
        * page/Settings.h:
        (WebCore::Settings::shouldPaintNativeControls):
        * rendering/RenderThemeSafari.cpp:
        (WebCore::theme):
        * rendering/RenderThemeWin.cpp:

2008-09-05  Antti Koivisto  <antti@apple.com>

        Qt build fix.

        * svg/SVGFEImageElement.cpp:
        (WebCore::SVGFEImageElement::build):

2008-09-05  Dirk Schulze  <vbs85@gmx.de>

        Gtk build fix

        * GNUmakefile.am:

2008-09-05  Antti Koivisto  <antti@apple.com>

        Another build fix.

        * svg/SVGFEImageElement.cpp:
        (WebCore::SVGFEImageElement::notifyFinished):

2008-09-05  Antti Koivisto  <antti@apple.com>

        Build fixes.

        * WebCore.xcodeproj/project.pbxproj:
        * svg/graphics/filters/SVGFEImage.cpp:
        (WebCore::FEImage::cachedImage):

2008-09-05  Antti Koivisto  <antti@apple.com>

        Reviewed by Darin Adler.

        Most of the implementation for https://bugs.webkit.org/show_bug.cgi?id=17998
        When a resource is cached locally, WebKit should follow RFC 2616 "Specific end-to-end revalidation" instead of "Unspecified end-to-end revalidation"

        Implement HTTP 1.1 "Specific end-to-end revalidation" for WebCore memory cache. This patch does
        not yet enable it for the biggest use case, reloading. However it is good for general browsing as
        well. Doing this in WebCore level as opposed to relying on disk cache has big benefit that
        we avoid re-decoding resources, especially images.

        To be exact the enabled case is not actually the "Specific end-to-end revalidation" since it does not include
        CacheControl: max-age=0 header. That would be added in reload case.

        The approach for revalidation is to kick the original resource out from the memory cache
        and create a new CachedResource that represents the revalidation request. In case
        we get 304 back for the request we put the original resource back to the cache, update
        its expiration date and switch the clients registered to revalidation resource to be
        clients of the original resource.

        All heap allocated CachedImage pointers now use CachedResourceHandle<CachedImage> (and so on) instead.
        This allows updating the handles to point to the original resource when the revalidation succeeds. It
        also acts as refcounting smart pointer.

        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSFontFaceSource.h:
        * css/CSSImportRule.h:
        * dom/Clipboard.h:
        (WebCore::Clipboard::dragImage):
        * dom/ProcessingInstruction.h:
        * dom/ScriptElement.h:
        * dom/XMLTokenizer.cpp:
        (WebCore::XMLTokenizer::isWaitingForScripts):
        * dom/XMLTokenizer.h:
        * html/HTMLImageLoader.cpp:
        (WebCore::HTMLImageLoader::setImage):
        (WebCore::HTMLImageLoader::updateFromElement):
        (WebCore::HTMLImageLoader::notifyFinished):
        * html/HTMLImageLoader.h:
        (WebCore::HTMLImageLoader::image):
        * html/HTMLLinkElement.h:
        * html/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::reset):
        (WebCore::HTMLTokenizer::scriptHandler):
        (WebCore::HTMLTokenizer::notifyFinished):
        * html/HTMLTokenizer.h:
        * loader/Cache.cpp:
        (WebCore::Cache::revalidateResource):
        (WebCore::Cache::revalidationSucceeded):
        (WebCore::Cache::revalidationFailed):
        * loader/Cache.h:
        * loader/CachedResource.cpp:
        (WebCore::CachedResource::CachedResource):
        (WebCore::CachedResource::~CachedResource):
        (WebCore::CachedResource::isExpired):
        (WebCore::CachedResource::setResponse):
        (WebCore::CachedResource::deleteIfPossible):
        (WebCore::CachedResource::setResourceToRevalidate):
        (WebCore::CachedResource::clearResourceToRevalidate):
        (WebCore::CachedResource::switchClientsToRevalidatedResource):
        (WebCore::CachedResource::canUseCacheValidator):
        (WebCore::CachedResource::mustRevalidate):
        * loader/CachedResource.h:
        (WebCore::CachedResource::canDelete):
        (WebCore::CachedResource::registerHandle):
        (WebCore::CachedResource::unregisterHandle):
        (WebCore::CachedResource::isCacheValidator):
        (WebCore::CachedResource::resourceToRevalidate):
        (WebCore::CachedResource::setExpirationDate):
        * loader/CachedResourceHandle.cpp: Added.
        (WebCore::CachedResourceHandleBase::setResource):
        * loader/CachedResourceHandle.h: Added.
        (WebCore::CachedResourceHandleBase::~CachedResourceHandleBase):
        (WebCore::CachedResourceHandleBase::get):
        (WebCore::CachedResourceHandleBase::operator!):
        (WebCore::CachedResourceHandleBase::operator UnspecifiedBoolType):
        (WebCore::CachedResourceHandleBase::CachedResourceHandleBase):
        (WebCore::CachedResourceHandleBase::operator=):
        (WebCore::CachedResourceHandle::CachedResourceHandle):
        (WebCore::CachedResourceHandle::get):
        (WebCore::CachedResourceHandle::operator->):
        (WebCore::CachedResourceHandle::operator=):
        (WebCore::CachedResourceHandle::operator==):
        (WebCore::CachedResourceHandle::operator!=):
        (WebCore::operator==):
        (WebCore::operator!=):
        * loader/DocLoader.cpp:
        (WebCore::DocLoader::checkForReload):
        * loader/UserStyleSheetLoader.h:
        * loader/loader.cpp:
        (WebCore::Loader::Host::servePendingRequests):
        (WebCore::Loader::Host::didFinishLoading):
        (WebCore::Loader::Host::didFail):
        (WebCore::Loader::Host::didReceiveResponse):
        (WebCore::Loader::Host::didReceiveData):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::selectCursor):
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::setCachedImage):
        (WebCore::RenderImage::imageChanged):
        * rendering/RenderImage.h:
        (WebCore::RenderImage::cachedImage):
        (WebCore::RenderImage::imagePtr):
        * rendering/style/RenderStyle.h:
        * rendering/style/StyleCachedImage.h:
        (WebCore::StyleCachedImage::data):
        (WebCore::StyleCachedImage::cachedImage):
        * svg/SVGFEImageElement.h:
        * svg/graphics/filters/SVGFEImage.h:
        * xml/XSLImportRule.h:

2008-09-04  Brady Eidson  <beidson@apple.com>

        Reviewed by Mitz

        <rdar://problem/6180236> - Safari times out connections after 1 or 2 minutes

        A 60-second default timeout was added in http://trac.webkit.org/changeset/17144 in an attempt
        to model default NSURLRequest behavior in a cross-platform manner.

        Sadly by always enforcing this 60 second timeout, WebCore was stomping over the wishes of any Webkit
        client that wished to enforce a much larger default timeout using NSURLRequest API.

        Additionally, upon reviewing what all other browsers do, it seems apparent that "no limit" is desirable
        behavior on the web and this restores previous Safari/WebKit behavior.

        It would be easy to write a layout test for this, but to be effective it would have
        to run for at least 61 seconds, which seems insane until will can parallelize run-webkit-tests

        * manual-tests/timeout-test.html: Added.
        * manual-tests/timeout-test.php: Added.

        * platform/network/ResourceRequestBase.h:
        (WebCore::ResourceRequestBase::ResourceRequestBase):  Rename the constant to "unspecifiedTimeoutInterval"
          and make it UINT_MAX so platforms that do set it have an effective "no timeout."  (Windows, for example)
        * platform/network/mac/ResourceRequestMac.mm:
        (WebCore::ResourceRequest::doUpdatePlatformRequest):  If the timeout for this request is
          "unspecifiedTimeoutInterval", then don't bother setting the timeout using NSURLRequest API, allowing
          WebKit applications to enforce their own default timeout.

2008-09-04  Dan Bernstein  <mitz@apple.com>

        Reviewed by Beth Dakin.

        - fix <rdar://problem/6198514> Changing a button's opacity triggers relayout

        Test: fast/repaint/button-spurious-layout-hint.html

        * rendering/RenderButton.cpp:
        (WebCore::RenderButton::setStyle): Reset the inner block's style box
        flex to 0 to avoid getting a spurious layout hint.

2008-09-04  Kevin Ollivier  <kevino@theolliviers.com>

        wx build fixes.

        * WebCoreSources.bkl:
        * bindings/js/ScriptControllerWx.cpp: Added.
        (WebCore::ScriptController::createScriptInstanceForWidget):
        * page/wx/AccessibilityObjectWx.cpp: Added.
        (WebCore::AccessibilityObject::accessibilityIgnoreAttachment):
        * platform/graphics/wx/GraphicsContextWx.cpp:
        * webcore-base.bkl:
        * webcore-wx.bkl:

2008-09-04  Dan Bernstein  <mitz@apple.com>

        Reviewed by Mark Rowe.

        - roll out r36050 because it made svg/custom/invalid-fill-hex.svg fail,
          and fixing https://bugs.webkit.org/show_bug.cgi?id=15360 appears to
          require a different approach

        * css/CSSGrammar.y:

2008-09-04  Mark Rowe  <mrowe@apple.com>

        Reviewed by Eric Seidel.

        Fix https://bugs.webkit.org/show_bug.cgi?id=20639.
        Bug 20639: ENABLE_DASHBOARD_SUPPORT does not need to be a FEATURE_DEFINE

        * Configurations/WebCore.xcconfig: Remove ENABLE_DASHBOARD_SUPPORT from FEATURE_DEFINES.
        * DerivedSources.make: Revert to checking for ENABLE_DASHBOARD_SUPPORT rather than looking
        for ENABLE_DASHBOARD_SUPPORT in FEATURE_DEFINES.

2008-09-04  Mark Rowe  <mrowe@apple.com>

        Mac build fix.

        * config.h: Only check the value of HAVE_CONFIG_H if it is defined.

2008-09-04  Eric Seidel  <eric@webkit.org>

        Build fix only, no review.

        * dom/XMLTokenizer.cpp: Fix the Chromium merge build by adding a missing header (the Mac files must include it somewhere).

2008-09-04  Marco Barisione  <marco.barisione@collabora.co.uk>

        Reviewed by Eric Seidel.

        http://bugs.webkit.org/show_bug.cgi?id=20380
        [GTK][AUTOTOOLS] Include autotoolsconfig.h from config.h

        * config.h: Include the configuration header generated by autotools if
        available.

2008-09-04  Dan Bernstein  <mitz@apple.com>

        Rubber-stamped by Dave Hyatt.

        - rename CachedResource::allReferencesRemoved() to allClientsRemoved()

        * loader/CachedFont.cpp:
        (WebCore::CachedFont::allClientsRemoved):
        * loader/CachedFont.h:
        * loader/CachedImage.cpp:
        (WebCore::CachedImage::allClientsRemoved):
        * loader/CachedImage.h:
        * loader/CachedResource.cpp:
        (WebCore::CachedResource::removeClient):
        * loader/CachedResource.h:
        (WebCore::CachedResource::allClientsRemoved):

2008-09-04  Adam Roben  <aroben@apple.com>

        Windows build fix after r36071

        We were getting these errors:

        error C2356: initialization segment must not change during translation
        unit

        This was happening because multiple files #included by
        DerivedSources.cpp were themselves #including StaticConstructors.h. I
        fixed the error by adding header guards to StaticConstructors.h so its
        contents will only be included once.

        But it's also not a good idea for StaticConstructors.h to end up in
        DerivedSources.cpp, since it ends up "polluting" all the source files
        we have in there. So I removed all the files that include
        StaticConstructors.h and added some preprocessor directives to
        DerivedSources.cpp to catch this error in the future.

        * DerivedSources.cpp: Removed the *Names.cpp files, which include
        StaticConstructors.h, and added some preprocessor directives to make
        sure we don't end up accidentally including StaticConstructors.h in
        the future.
        * WebCore.vcproj/WebCore.vcproj: Added the *Names.cpp files.
        * platform/StaticConstructors.h: Added header guards.

2008-09-04  Adam Roben  <aroben@apple.com>

        Windows build fix

        * platform/graphics/win/FontPlatformData.h: Added a missing #include
        of PassRefPtr.h, and corrected the capitalization of RefCounted.h.
        * platform/text/PlatformString.h: Added a missing #include of
        PassRefPtr.h.

2008-09-04  Tor Arne Vestbø  <tavestbo@trolltech.com>

        Reviewed by Simon.

        Fix the QtWebKit build to match changes in r36016

        * WebCore.pro:
        * bridge/qt/qt_instance.cpp:
        (KJS::Bindings::QtInstance::getRuntimeObject):
        * bridge/qt/qt_runtime.cpp:
        (KJS::Bindings::convertQVariantToValue):
        (KJS::Bindings::QtConnectionObject::execute):

2008-09-04  Tor Arne Vestbø  <tavestbo@trolltech.com>

        Reviewed by Simon.

        Re-enable support for user stylesheets in QtWebKit

        QtWebKit now follows the FRAME_LOADS_USER_STYLESHEET
        code path, which allows us to keep API support for
        loading user style sheets from remote URLs.

        As part of the change UserStyleSheetLoader.cpp/h was
        moved from WebCore/loader/mac to WebCore/loader.

        * WebCore.pro:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/Document.h:
        * loader/UserStyleSheetLoader.cpp: Renamed from WebCore/loader/mac/UserStyleSheetLoader.cpp.
        (UserStyleSheetLoader::UserStyleSheetLoader):
        (UserStyleSheetLoader::~UserStyleSheetLoader):
        * loader/UserStyleSheetLoader.h: Renamed from WebCore/loader/mac/UserStyleSheetLoader.h.
        * page/qt/FrameQt.cpp:
        (WebCore::Frame::setUserStyleSheetLocation):
        (WebCore::Frame::setUserStyleSheet):

2008-09-04  Alp Toker  <alp@nuanti.com>

        Reviewed by Eric.

        Remove left-over QT and CAIRO platform checks.

        * html/CanvasRenderingContext2D.cpp:

2008-09-04  Eric Seidel  <eric@webkit.org>

        Reviewed by Mark Rowe.

        Fix leak of TextMetrics due to over-ref as see on buildbot.

        * html/TextMetrics.h: use adoptRef since RefCounted starts @ refcount 1 instead of 0 now.

2008-09-04  Dan Bernstein  <mitz@apple.com>

        Reviewed by Dave Hyatt.

        - fix https://bugs.webkit.org/show_bug.cgi?id=19717
          <rdar://problem/6026832> REGRESSION (r31876): menu items render horizontally at the Economist

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::layoutOnlyPositionedObjects): In the
        positioned movement only case, call
        tryLayoutDoingPositionedMovementOnly() and fall back on doing a full
        layout if that fails.
        (WebCore::RenderBlock::layoutPositionedObjects): Ditto.
        * rendering/RenderBox.h:
        (WebCore::RenderBox::tryLayoutDoingPositionedMovementOnly): Renamed
        layoutDoingPositionedMovementOnly to this, and made this function
        check if the width changed. If it did, return, leaving the object
        dirty. The caller can then call layout(). The width can change even
        in the "positioned movement only" case if the object is shrink-to-fit
        and the available width constraint is met. (This was the case in the
        bug).
        * rendering/RenderObject.h:
        (WebCore::RenderObject::tryLayoutDoingPositionedMovementOnly):
        Renamed layoutDoingPositionedMovementOnly() to this.

2008-09-03  Eric Seidel  <eric@webkit.org>

        No review, build fix only.

        Attempt to fix the Qt build.

        * WebCore.pro: add page/animation to include path

2008-09-03  Mark Rowe  <mrowe@apple.com>

        Mac build fix.  Correctly detect whether dashboard support is enabled.

        * DerivedSources.make:

2008-09-03  Eric Seidel  <eric@webkit.org>

        Reviewed by Sam.

        Clean up Platform.h and add PLATFORM(CHROMIUM), PLATFORM(SKIA) and USE(V8_BINDINGS)

        * Configurations/WebCore.xcconfig: add missing ENABLE_*
        * config.h: add rules for V8_BINDINGS

2008-09-03  Eric Seidel  <eric@webkit.org>

        Reviewed by Sam.

        https://bugs.webkit.org/show_bug.cgi?id=20620

        Add #if USE(JSC) around KJS dependencies
        Remove !USE(JAVASCRIPTCORE_BINDINGS) support for 3 reasons:
        1. Most platforms have it on anyway
        2. V8 is going to want to share some of that code
        3. Those platforms which want it off, should have a separate file instead of an #ifdef in our .cpp

        * bindings/js/JSPluginElementFunctions.cpp: remove !USE(JAVASCRIPTCORE_BINDINGS) support
        * config.h: change JAVASCRIPTCORE_BINDINGS to JSC and add USE(V8)
        * html/HTMLAppletElement.cpp: remove USE(JAVASCRIPTCORE_BINDINGS) wrappers
        * html/HTMLAppletElement.h: remove USE(JAVASCRIPTCORE_BINDINGS) wrappers
        * html/HTMLEmbedElement.cpp: remove USE(JAVASCRIPTCORE_BINDINGS) wrappers
        * html/HTMLEmbedElement.h: remove USE(JAVASCRIPTCORE_BINDINGS) wrappers
        * html/HTMLObjectElement.cpp: remove USE(JAVASCRIPTCORE_BINDINGS) wrappers
        * html/HTMLObjectElement.h: remove USE(JAVASCRIPTCORE_BINDINGS) wrappers
        * html/HTMLPlugInElement.cpp: replace USE(JAVASCRIPTCORE_BINDINGS) with USE(JSC) where needed
        * html/HTMLPlugInElement.h: replace USE(JAVASCRIPTCORE_BINDINGS) with USE(JSC) where needed
        * platform/text/AtomicString.cpp: add USE(JSC)
        * platform/text/AtomicString.h: add USE(JSC)
        * platform/text/PlatformString.h: add USE(JSC)
        * platform/text/String.cpp: add USE(JSC)
        * platform/text/StringImpl.cpp: add USE(JSC)
        * platform/text/StringImpl.h: add USE(JSC)

2008-09-03  Dean McNamee  <deanm@chromium.org>

        Reviewed by Darin Adler.

        Fix https://bugs.webkit.org/show_bug.cgi?id=20511
        Bug 20511: Remove static initializers on Windows

        Avoid static initializers on Windows by forcing Visual C++ to put
        all static initializers in a code segment that is never executed.

        * config.h:
        * css/MediaFeatureNames.cpp:
        * dom/EventNames.cpp:
        * dom/QualifiedName.cpp:
        * dom/make_names.pl:
        * platform/StaticConstructors.h:
        * platform/text/AtomicString.cpp:

2008-09-03  Dirk Schulze  <vbs85@gmx.de>

        Reviewed by Dave Hyatt.

        Make FontCairo draw TextStroke and TextFill separately.

        [CAIRO] draw TextFill and TextStroke separately.
        [https://bugs.webkit.org/show_bug.cgi?id=20631]

        * platform/graphics/cairo/FontCairo.cpp:
        (WebCore::Font::drawGlyphs):

2008-09-03  Peter Kasting  <pkasting@google.com>

        Reviewed by Dave Hyatt.

        https://bugs.webkit.org/show_bug.cgi?id=19663
        Account for paint and timer lag when animating images.  Also pretend
        that images whose animations were paused (by becoming invisible)
        continued to animate, by "catching up" to the correct frame when they're
        shown again.

        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::BitmapImage):
        (WebCore::BitmapImage::startAnimation):
        (WebCore::BitmapImage::advanceAnimation):
        (WebCore::BitmapImage::internalAdvanceAnimation):
        (WebCore::BitmapImage::notifyObserverAndTrimDecodedData):
        * platform/graphics/BitmapImage.h:
        * platform/graphics/cairo/ImageCairo.cpp:
        (WebCore::BitmapImage::draw):
        * platform/graphics/cg/ImageCG.cpp:
        (WebCore::BitmapImage::draw):
        * platform/graphics/qt/ImageQt.cpp:
        (WebCore::BitmapImage::draw):
        * platform/graphics/wx/ImageWx.cpp:
        (WebCore::BitmapImage::draw):

2008-09-03  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Tim.

        Remove the rest of the "zombie" code from the profiler.
        - There is no longer a need for the ProfilerClient callback mechanism.

        * page/Console.cpp:
        (WebCore::Console::Console):
        (WebCore::Console::profile):
        (WebCore::Console::profileEnd): Move the variables from the header to
        here since we don't have to wait for a callback to use them.
        * page/Console.h:
        * page/InspectorController.cpp:
        (WebCore::InspectorController::startUserInitiatedProfiling):
        (WebCore::InspectorController::stopUserInitiatedProfiling):
        * page/InspectorController.h:

2008-09-03  Ada Chan  <adachan@apple.com>

        Windows build fix.

        * WebCore.vcproj/WebCore.vcproj: Added JSWebKitCSSKeyframeRule.cpp and JSWebKitCSSKeyframesRule.cpp to the project.

2008-09-01  Dean Jackson  <dino@apple.com>

        Reviewed by Dave Hyatt.

        https://bugs.webkit.org/show_bug.cgi?id=20594
        Add DOM interfaces for WebKitCSSKeyframeRule
        and WebKitCSSKeyframesRule.

        TEST: LayoutTests/css3/keyframes-rule.html

        * css/WebKitCSSKeyframeRule.idl: Added
        * css/WebKitCSSKeyframesRule.idl: Added

        * bindings/js/JSCSSRuleCustom.cpp:
        (WebCore::toJS):
            Add return of new JS Keyframe rules
        * bindings/objc/DOMInternal.h:
            Include new internal header

        * DerivedSources.make:
        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
            Build configs for new files

2008-09-03  Adam Roben  <aroben@apple.com>

        Windows build fix

        * DerivedSources.cpp: Add JSTextMetrics.cpp to fix the build.
        * WebCore.vcproj/WebCore.vcproj: Add JSTextMetrics.h for
        convenience/consistency.

2008-09-03  Adele Peterson  <adele@apple.com>

        Build fix.

        * WebCore.vcproj/WebCore.vcproj:

2008-09-03  David Hyatt  <hyatt@apple.com>

        Fix for bug 18203, right floats should be allowed to overflow past the left border edge.

        Reviewed by Darin (ages ago)

        Added fast/block/float/clamped-right-float.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::positionNewFloats):

2008-09-02  David Hyatt  <hyatt@apple.com>

        Add support for canvas text drawing APIs.

        Reviewed by olliej

        Tests added as fast/canvas/canvas-text-*.html

        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSCanvasRenderingContext2DCustom.cpp:
        (WebCore::JSCanvasRenderingContext2D::fillText):
        (WebCore::JSCanvasRenderingContext2D::strokeText):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::initForStyleResolve):
        (WebCore::CSSStyleSelector::applyPropertyToStyle):
        * css/CSSStyleSelector.h:
        * html/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::State::State):
        (WebCore::CanvasRenderingContext2D::font):
        (WebCore::CanvasRenderingContext2D::setFont):
        (WebCore::CanvasRenderingContext2D::textAlign):
        (WebCore::CanvasRenderingContext2D::setTextAlign):
        (WebCore::CanvasRenderingContext2D::textBaseline):
        (WebCore::CanvasRenderingContext2D::setTextBaseline):
        (WebCore::CanvasRenderingContext2D::fillText):
        (WebCore::CanvasRenderingContext2D::strokeText):
        (WebCore::CanvasRenderingContext2D::measureText):
        (WebCore::CanvasRenderingContext2D::drawTextInternal):
        (WebCore::CanvasRenderingContext2D::accessFont):
        * html/CanvasRenderingContext2D.h:
        * html/CanvasRenderingContext2D.idl:
        * html/TextMetrics.h: Added.
        (WebCore::TextMetrics::create):
        (WebCore::TextMetrics::width):
        (WebCore::TextMetrics::setWidth):
        (WebCore::TextMetrics::TextMetrics):
        * html/TextMetrics.idl: Added.
        * platform/graphics/Font.cpp:
        (WebCore::Font::lineGap):
        * platform/graphics/Font.h:
        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::drawBidiText):
        * platform/graphics/GraphicsContext.h:
        * platform/graphics/GraphicsTypes.cpp:
        (WebCore::textAlignName):
        (WebCore::parseTextAlign):
        (WebCore::textBaselineName):
        (WebCore::parseTextBaseline):
        * platform/graphics/GraphicsTypes.h:
        (WebCore::):

2008-09-03  John Sullivan  <sullivan@apple.com>

        Fixed <rdar://problem/6193022> <rdar://problem/6193022> Crash occurs at WebCore::AnimationBase::propertiesEqual () after certain steps

        Fixed by Darin, reviewed by me

        * page/animation/AnimationBase.cpp:
        (WebCore::AnimationBase::propertiesEqual):
        added ensurePropertyMap() to this static function
        (WebCore::AnimationBase::getPropertyAtIndex):
        ditto
        (WebCore::AnimationBase::getNumProperties):
        ditto

2008-09-03  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Darin and Tim.

        Remove most of the "zombie" mode from the profiler.  Next we will need
        to remove the client callback mechanism in profiles.
        - These changes are a result of changes to JSCore.

        * manual-tests/inspector/profiler-test-nested-start-and-stop-profiler.html:
        * page/Console.cpp:
        (WebCore::retrieveLastCaller):
        (WebCore::Console::profileEnd):
        * page/InspectorController.cpp:
        (WebCore::InspectorController::stopUserInitiatedProfiling):

2008-09-03  Adele Peterson  <adele@apple.com>

        Reviewed by Darin Adler.

        Test: fast/forms/search-display-none-cancel-button.html

        Allow display:none to work on a search field's cancel button.  Prepare for adding more style-ability for the results button too.

        * css/html4.css: Set display:inline-block for these buttons.  Now they can be overridden by a web author.

        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::setStyle): Add nil checks for the button renderers.
        (WebCore::RenderTextControl::createResultsButtonStyle): Don't set the display explicitly.  This is now done in html4.css.
        (WebCore::RenderTextControl::createCancelButtonStyle): ditto.
        (WebCore::RenderTextControl::createSubtreeIfNeeded):
        Reorganize this code so our complicated way of adding shadow nodes is abstracted out into the TextControlInnerElement class.
        (WebCore::RenderTextControl::updateFromElement): Added nil checks for the button renderers.
        (WebCore::RenderTextControl::subtreeHasChanged): ditto.
        (WebCore::RenderTextControl::calcHeight): ditto.
        (WebCore::RenderTextControl::nodeAtPoint): ditto.
        (WebCore::RenderTextControl::layout): ditto.
        (WebCore::RenderTextControl::calcPrefWidths): ditto.
        (WebCore::RenderTextControl::clientPaddingLeft): ditto.
        (WebCore::RenderTextControl::clientPaddingRight): ditto.

        * rendering/TextControlInnerElements.cpp:
        (WebCore::RenderTextControlInnerBlock::RenderTextControlInnerBlock): Moved from RenderTextControl.cpp.
        (WebCore::RenderTextControlInnerBlock::nodeAtPoint): ditto.
        (WebCore::TextControlInnerElement::attachInnerElement): Added.
         This does all the separate steps of attaching a shadow node that used to be repeated in RenderTextControl::createSubtreeIfNeeded for each element.
        (WebCore::TextControlInnerTextElement::createRenderer): Added.  Creates a RenderTextControlInnerBlock.
        * rendering/TextControlInnerElements.h:

2008-08-28  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Maciej.

        Elminate SQLiteAuthorizer class.

        * WebCore.xcodeproj/project.pbxproj:
        * WebCore.vcproj/WebCore.vcproj:
        * GNUmakefile.am
        Removed SQLiteAuthorizer.h.

        * platform/sql/SQLiteAuthorizer.cpp:
        * platform/sql/SQLiteAuthorizer.h: Removed.
        * platform/sql/SQLiteDatabase.cpp:
        (WebCore::SQLiteDatabase::authorizerFunction):
        (WebCore::SQLiteDatabase::setAuthorizer):
        * platform/sql/SQLiteDatabase.h:
        * storage/DatabaseAuthorizer.h:
        (WebCore::DatabaseAuthorizer::create):
        (WebCore::DatabaseAuthorizer::createView):
        (WebCore::DatabaseAuthorizer::createTempView):
        (WebCore::DatabaseAuthorizer::dropView):
        (WebCore::DatabaseAuthorizer::dropTempView):
        (WebCore::DatabaseAuthorizer::allowSelect):
        (WebCore::DatabaseAuthorizer::allowReindex):
        Merge SQLiteAuthorizer and DatabaseAuthorizer, as keeping them separate serves no purpose.

2008-09-03  Dirk Schulze  <vbs85@gmx.de>

        Reviewed by Mark Rowe.

        WebKitGtk build fix.

        * GNUmakefile.am:
        * page/animation/AnimationController.h:

2008-09-02  Robert Blaut  <webkit@blaut.biz>

        Reviewed by Geoff Garen.

        Fix for <https://bugs.webkit.org/show_bug.cgi?id=16913>
        Misplaced elements should not close DL lists.

        Test: fast/invalid/test-case-tr-th-td-should-not-close-dl-list.html

        * html/HTMLParser.cpp:
        (WebCore::HTMLParser::handleError):

2008-09-02  Glenn Wilson  <wilsong@gmail.com>

        Reviewed by Darin Adler.

        Fix for <https://bugs.webkit.org/show_bug.cgi?id=15360>
        Bug 15360: color:#{predefined colorName} is treated as colorName in Safari

        We would inappropriately interpret and apply an invalid CSS "color" property
        when the value is a predefined color preceded by a '#' symbol.  For example,
        style="color:#gray;" would apply the color gray when it should not.

        In the bison template, "hexcolor" was defined as both "HEX maybe_space" OR "IDENT maybe_space".
        This caused identifiers not fitting the appropriate hex format but preceded by a '#' to be
        interpreted as a valid color (CSSPrimitiveValue::CSS_PARSER_HEXCOLOR), when it was really just
        an ignorable token.

        To correct this, "IDENT maybe_space" was removed from "hexcolor" and added under "term" as
        '#' IDENT maybe_space, which is then processed as a CSSPrimitiveValue::CSS_STRING instead of
        CSSPrimitiveValue::CSS_PARSER_HEXCOLOR.

        Test: css1/color_and_background/invalid_color.html

        * css/CSSGrammar.y:

2008-09-02  Mihnea Ovidenie  <mihnea@adobe.com>

        Reviewed by Darin Adler.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=19964
        Bug 19964: Divide by zero crash in RenderBox::calculateBackgroundSize with 0,0 bmp background image

        Add a check to RenderBox::repaintLayerRectsForImage to make sure the current layer image can be rendered.

        Test: css3/khtml-background-size-0x0-bmp.html

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::repaintLayerRectsForImage):

2008-09-02  Glenn Wilson  <wilsong@gmail.com>

        Reviewed by Eric Seidel.

        Fix https://bugs.webkit.org/show_bug.cgi?id=20397
        Bug 20397: Invalid webkit-border-bottom-left-radius property causes crash

        The function checkForOrphanedUnits() would change the length of a list whose size was
        was already determined before the call to checkForOrphanedUnits was made.  Later in
        the caller, the old size was being used for boundary management.

        This has been fixed by moving the call to checkForOrphanedUnits() earlier in the
        calling function, before the size of the list is determined.

        Test: fast/css/orphaned_units_crash.html

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):  Moved call to checkForOrphanedUnits() earlier in the function.

2008-09-02  Dirk Schulze  <vbs85@gmx.de>

        Reviewed by Darin Adler.

        Fallback on invalid fill or stroke styles in Canvas was
        transparent black. Changed it to last valid style.

        Canvas fillStyle() and strokeStyle() needs fallback
        https://bugs.webkit.org/show_bug.cgi?id=20474

        Tests: fast/canvas/canvas-invalid-fillstyle.html
               fast/canvas/canvas-invalid-strokestyle.html

        * html/CanvasStyle.cpp:
        (WebCore::CanvasStyle::applyStrokeColor):
        (WebCore::CanvasStyle::applyFillColor):

2008-09-02  Dirk Schulze  <vbs85@gmx.de>

        Reviewed by Darin Adler.

        Fix https://bugs.webkit.org/show_bug.cgi?id=20468
        Updated drawImage() in canvas to match the current specification.

        Test: fast/canvas/drawImage-with-negative-source-destination.html

        * html/CanvasRenderingContext2D.cpp:
        (WebCore::normalizeRect):
        (WebCore::CanvasRenderingContext2D::drawImage):

2008-08-26  Mark Rowe  <mrowe@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/5768210> Switch back to the system version of SQLite

        Use the system version of SQLite when it is new enough to provide the functionality
        that WebCore requires.

        * Configurations/Base.xcconfig:
        * Configurations/DebugRelease.xcconfig:
        * Configurations/WebCore.xcconfig:

2008-09-02  Dan Bernstein  <mitz@apple.com>

        - build fix

        * page/animation/AnimationBase.h:

2008-09-02  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Dave Hyatt.

        AnimationController.cpp should be split into separate files
        https://bugs.webkit.org/show_bug.cgi?id=20604

        Note: All makefiles, except WebCore.xcodeproj have been changed without testing, upon
        recommendation of Dave Hyatt.

        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
            Build files.

        * page/AnimationController.cpp: Removed.
        * page/AnimationController.h: Removed.
        * page/animation: Added.
        * page/animation/AnimationBase.cpp: Added.
        * page/animation/AnimationBase.h: Added.
        * page/animation/AnimationController.cpp: Copied from WebCore/page/AnimationController.cpp.
        * page/animation/AnimationController.h: Copied from WebCore/page/AnimationController.h.
        * page/animation/CompositeAnimation.cpp: Added.
        * page/animation/CompositeAnimation.h: Added.
        * page/animation/ImplicitAnimation.cpp: Added.
        * page/animation/ImplicitAnimation.h: Added.
        * page/animation/KeyframeAnimation.cpp: Added.
        * page/animation/KeyframeAnimation.h: Added.

2008-09-02  Dan Bernstein  <mitz@apple.com>

        - release build fix

        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::calculateDrawingMode):

2008-09-02  Timothy Hatcher  <timothy@apple.com>

        Make console functions log the correct resource URL and
        line number for where the call originated.

        https://bugs.webkit.org/show_bug.cgi?id=17234
        <rdar://problem/5732837>

        Reviewed by Kevin McCullough.

        Test: manual-tests/inspector/console-call-line-numbers.html

        * bindings/js/JSConsoleCustom.cpp:
        (WebCore::JSConsole::count): Call the impl.
        (WebCore::JSConsole::timeEnd): Ditto.
        * manual-tests/inspector/console-call-line-numbers.html: Added.
        * manual-tests/inspector/resources/script-console-calls.js: Added.
        * page/Console.cpp:
        (WebCore::retrieveLastCaller): Helper to get the URL and line.
        (WebCore::Console::error): Call retrieveLastCaller to get the URL and
        line number to pass to addMessageToConsole.
        (WebCore::Console::info): Ditto.
        (WebCore::Console::log): Ditto.
        (WebCore::Console::assertCondition): Ditto.
        (WebCore::Console::count): Ditto.
        (WebCore::Console::timeEnd): Ditto.
        (WebCore::Console::warn): Ditto.
        * page/Console.h:
        * page/Console.idl: Make count and timeEnd custom.

2008-09-02  Timothy Hatcher  <timothy@apple.com>

        Removed IDL files from WebCore's framework resources.

        * WebCore.xcodeproj/project.pbxproj:

2008-09-02  Dan Bernstein  <mitz@apple.com>

        Reviewed by Dave Hyatt.

        - <rdar://problem/5681647> pages at http://www.stendmarsofa.com/ are so slow to calculate style it seems like a hang

        * html/HTMLParser.cpp:
        (WebCore::HTMLParser::handleResidualStyleCloseTagAcrossBlocks): Added a
        cap on the number of consecutive identical residual style tags to
        reopen.
        (WebCore::HTMLParser::popBlock): Ditto.

2008-09-02  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Adam Roben.

        A little database quota management cleanup.

        * storage/OriginQuotaManager.cpp:
        (WebCore::OriginQuotaManager::OriginQuotaManager):
        (WebCore::OriginQuotaManager::lock):
        (WebCore::OriginQuotaManager::unlock):
        (WebCore::OriginQuotaManager::trackOrigin):
        (WebCore::OriginQuotaManager::tracksOrigin):
        (WebCore::OriginQuotaManager::addDatabase):
        (WebCore::OriginQuotaManager::removeDatabase):
        (WebCore::OriginQuotaManager::removeOrigin):
        (WebCore::OriginQuotaManager::markDatabase):
        (WebCore::OriginQuotaManager::diskUsage):
        * storage/OriginQuotaManager.h:
        Changed to assert that a lock is taken more directly and reliably. Removed comments about
        main/background threads, as this is likely to stop being true with synchronous Database calls
        being made on worker threads.

        * storage/OriginUsageRecord.cpp:
        (WebCore::OriginUsageRecord::OriginUsageRecord):
        (WebCore::OriginUsageRecord::addDatabase):
        (WebCore::OriginUsageRecord::removeDatabase):
        (WebCore::OriginUsageRecord::markDatabase):
        (WebCore::OriginUsageRecord::diskUsage):
        * storage/OriginUsageRecord.h:
        (WebCore::OriginUsageRecord::DatabaseEntry::DatabaseEntry):
        Don't use a magic value for unknown. It is totally unnecessary for DatabaseEntry, and
        can be replaced with a single boolean for OriginUsageRecord.
        Added assertions for string parameters being unshared.


2008-09-01  Adam Barth  <abarth@webkit.org>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=19760

        Make granting LoadLocalResources conditional on a policy.

        * WebCore.base.exp:
        * dom/Document.cpp:
        (WebCore::Document::initSecurityContext):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::setLocalLoadPolicy):
        (WebCore::FrameLoader::restrictAccessToLocal):
        * loader/FrameLoader.h:
        (WebCore::FrameLoader::):
        * platform/SecurityOrigin.cpp:
        (WebCore::SecurityOrigin::grantLoadLocalResources):
        * platform/SecurityOrigin.h:

2008-09-01  Dean Jackson  <dino@apple.com>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=20571
        Make sure Window object can assign Animation/Transition event
        listeners via attributes.

        Also added a bunch of transition event tests, although
        only transition-end-event-window is directly relevant to this patch.

        (WebCore::JSDOMWindowBase::put):

        Tests: transitions/transition-end-event-all-properties.html
               transitions/transition-end-event-attributes.html
               transitions/transition-end-event-container.html
               transitions/transition-end-event-left.html
               transitions/transition-end-event-multiple-01.html
               transitions/transition-end-event-multiple-02.html
               transitions/transition-end-event-multiple-03.html
               transitions/transition-end-event-multiple-04.html
               transitions/transition-end-event-nested.html
               transitions/transition-end-event-transform.html
               transitions/transition-end-event-window.html

2008-09-01  Dean Jackson  <dino@apple.com>

        Reviewed by Sam Weinig

        Code styling cleanup.

        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::getValueProperty):
        (WebCore::JSDOMWindowBase::put):

2008-09-01  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Darin Adler.

        First cut at inline caching for access to vanilla JavaScript properties.

        Updated for JavaScriptCore changes. Mostly mechanical addition of StructureIDs
        to WebCore classes, and PutPropertySlot& arguments to put functions.

        (WebCore::JSCSSStyleDeclaration::customPut): Be sure to play nice with
        inline caching for global properties, so global assignment can be optimized.

        * ForwardingHeaders/kjs/StructureID.h: Added.
        * bindings/js/JSDOMBinding.h:
        (WebCore::DOMObject::DOMObject):
        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::put):
        * bindings/js/JSDOMWindowBase.h:
        * bindings/js/JSDOMWindowCustom.h:
        (WebCore::JSDOMWindow::customPut):
        * bindings/js/JSDOMWindowShell.cpp:
        (WebCore::JSDOMWindowShell::JSDOMWindowShell):
        (WebCore::JSDOMWindowShell::put):
        * bindings/js/JSDOMWindowShell.h:
        * bindings/js/JSEventTargetBase.h:
        (WebCore::JSEventTargetBase::put):
        * bindings/js/JSEventTargetNode.h:
        (WebCore::JSEventTargetNode::put):
        * bindings/js/JSHTMLAppletElementCustom.cpp:
        (WebCore::JSHTMLAppletElement::customPut):
        * bindings/js/JSHTMLEmbedElementCustom.cpp:
        (WebCore::JSHTMLEmbedElement::customPut):
        * bindings/js/JSHTMLInputElementBase.cpp:
        (WebCore::JSHTMLInputElementBase::put):
        * bindings/js/JSHTMLInputElementBase.h:
        * bindings/js/JSHTMLObjectElementCustom.cpp:
        (WebCore::JSHTMLObjectElement::customPut):
        * bindings/js/JSHistoryCustom.cpp:
        (WebCore::JSHistory::customPut):
        * bindings/js/JSInspectedObjectWrapper.cpp:
        (WebCore::JSInspectedObjectWrapper::wrap):
        (WebCore::JSInspectedObjectWrapper::JSInspectedObjectWrapper):
        * bindings/js/JSInspectedObjectWrapper.h:
        * bindings/js/JSInspectorCallbackWrapper.cpp:
        (WebCore::JSInspectorCallbackWrapper::wrap):
        (WebCore::JSInspectorCallbackWrapper::JSInspectorCallbackWrapper):
        * bindings/js/JSInspectorCallbackWrapper.h:
        * bindings/js/JSLocationCustom.cpp:
        (WebCore::JSLocation::customPut):
        * bindings/js/JSPluginElementFunctions.cpp:
        (WebCore::runtimeObjectCustomPut):
        * bindings/js/JSPluginElementFunctions.h:
        * bindings/js/JSQuarantinedObjectWrapper.cpp:
        (WebCore::JSQuarantinedObjectWrapper::JSQuarantinedObjectWrapper):
        (WebCore::JSQuarantinedObjectWrapper::put):
        * bindings/js/JSQuarantinedObjectWrapper.h:
        * bindings/js/JSStorageCustom.cpp:
        (WebCore::JSStorage::customPut):
        * bindings/objc/WebScriptObject.mm:
        (-[WebScriptObject setValue:forKey:]):
        * bindings/scripts/CodeGeneratorJS.pm:
        * bridge/NP_jsobject.cpp:
        (_NPN_SetProperty):
        * bridge/jni/jni_jsobject.mm:
        (JavaJSObject::setMember):
        * bridge/objc/objc_class.mm:
        (KJS::Bindings::ObjcClass::fallbackObject):
        * bridge/objc/objc_runtime.h:
        * bridge/objc/objc_runtime.mm:
        (ObjcFallbackObjectImp::ObjcFallbackObjectImp):
        (ObjcFallbackObjectImp::put):
        * bridge/runtime.cpp:
        (KJS::Bindings::Instance::createRuntimeObject):
        * bridge/runtime_array.cpp:
        (RuntimeArray::put):
        * bridge/runtime_array.h:
        * bridge/runtime_object.cpp:
        (RuntimeObjectImp::RuntimeObjectImp):
        (RuntimeObjectImp::put):
        * bridge/runtime_object.h:

2008-09-01  Dirk Schulze  <vbs85@gmx.de>

        Reviewed by Eric Seidel.

        Fixed border-radius for Cairo.

        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::strokeArc):

2008-09-01  Dirk Schulze  <vbs85@gmx.de>

        Reviewed by Eric Seidel.

        Added canvas's globalAlpha to cairo.

        * platform/graphics/GraphicsContext.h:
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::fillPath):
        (WebCore::GraphicsContext::strokePath):
        (WebCore::GraphicsContext::setAlpha):
        (WebCore::GraphicsContext::getAlpha):
        * platform/graphics/cairo/GraphicsContextPlatformPrivateCairo.h:
        (WebCore::GraphicsContextPlatformPrivate::GraphicsContextPlatformPrivate):
        * platform/graphics/cairo/ImageCairo.cpp:
        (WebCore::BitmapImage::draw):

2008-08-31  Simon Hausmann  <hausmann@webkit.org>

        Unreviewed Qt build fix.

        * WebCore.pro: Add TextControlInnerElements.cpp to SOURCES instead of
        the .h file

2008-08-30  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - adopt some new JavaScriptCore functions where appropriate

        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::windowProtoFuncAToB): Adopted jsEmptyString.
        (WebCore::windowProtoFuncBToA): Ditto.
        * bindings/js/JSEventListener.cpp:
        (WebCore::JSLazyEventListener::eventParameterName): Adopted
        jsNontrivialString.
        * bindings/js/JSSVGLazyEventListener.cpp:
        (WebCore::JSSVGLazyEventListener::eventParameterName): Ditto.

2008-08-29  Brady Eidson  <beidson@apple.com>

        Reviewed by Anders' rubberstamp

        Style cleanup to match MediaTokenizer::writeRawData()

        * loader/PluginDocument.cpp:
        (WebCore::PluginTokenizer::writeRawData):

2008-08-29  Brady Eidson  <beidson@apple.com>

        Reviewed by Anders

        https://bugs.webkit.org/show_bug.cgi?id=20556
        <rdar://problem/6181817> REGRESSION (r35946): media/video-click-dlbclick-standalone.html [sic] fails because load never fires

        Fix regression I introducted in 35946
        Already covered by media/video-click-dlbclick-standalone.html

        * loader/MediaDocument.cpp:
        (WebCore::MediaTokenizer::createDocumentStructure): Don't cancel the load here - too early!
        (WebCore::MediaTokenizer::writeRawData): Call finish() here so onload() can be called.  Also add
          an ASSERT signifying that this method should only be called once, to more closely follow the
          PluginDocument case.

2008-08-29  Beth Dakin  <bdakin@apple.com>

        Reviewed by Sam Weinig.

        Fix for <rdar://problem/6181588>

        This patch makes hit testing take into account the new concept of a
        disconnected frame, in which some of the content may not be
        visible. The current hit testing mechanism starts at a target frame
        and drills down for a HitTestResult. In some cases, drilling down
        will find a non-visible result. When this happens, we need to try
        again, starting at a higher level -- namely, starting at the main
        frame.

        * editing/Editor.cpp:
        (WebCore::Editor::insideVisibleArea): New function that tests if a
        point is inside the visible area for a disconnected frame.
        * editing/Editor.h:
        * page/EventHandler.cpp:
        (WebCore::EventHandler::hitTestResultAtPoint):

2008-08-29  Adele Peterson  <adele@apple.com>

        Reviewed by Adam Roben.

        Rename HTMLTextFieldInnerElement.h/.cpp to TextControlInnerElements.h/.cpp

        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * html/HTMLTextFieldInnerElement.cpp: Removed.
        * html/HTMLTextFieldInnerElement.h: Removed.
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::createSubtreeIfNeeded):
        * rendering/RenderTextControl.h:
        * rendering/TextControlInnerElements.cpp: Copied from html/HTMLTextFieldInnerElement.cpp.
        (WebCore::TextControlInnerElement::TextControlInnerElement):
        (WebCore::TextControlInnerTextElement::TextControlInnerTextElement):
        (WebCore::TextControlInnerTextElement::defaultEventHandler):
        (WebCore::SearchFieldResultsButtonElement::SearchFieldResultsButtonElement):
        (WebCore::SearchFieldResultsButtonElement::defaultEventHandler):
        (WebCore::SearchFieldCancelButtonElement::SearchFieldCancelButtonElement):
        (WebCore::SearchFieldCancelButtonElement::defaultEventHandler):
        * rendering/TextControlInnerElements.h: Copied from html/HTMLTextFieldInnerElement.h.

2008-08-29  Eric Seidel  <eric@webkit.org>

        Rubber-stamped by aroben.

        Add GraphicsContext.h include to GraphcisContextPrivate.h

        GraphicsContextPrivate uses StrokeStyle which is defined
        in GraphicsContext.h but it doesn't include that header.
        CoreGraphics build doesn't fail here due to the order
        it happens to include files.

        * platform/graphics/GraphicsContextPrivate.h:

2008-08-29  Eric Seidel  <eric@webkit.org>

        Reviewed by hyatt.

        Fix GeneratedImage to respect Image's refcounting
        Fixing potential crashers (future if not current)
        https://bugs.webkit.org/show_bug.cgi?id=20567

        I don't know if it's possible to make the current code
        crash, thus I've not made a test.

        * css/CSSGradientValue.cpp:
        (WebCore::CSSGradientValue::image):
        * css/CSSImageGeneratorValue.cpp:
        (WebCore::CSSImageGeneratorValue::removeClient):
        (WebCore::CSSImageGeneratorValue::getImage):
        * css/CSSImageGeneratorValue.h:
        * platform/graphics/GeneratedImage.h:
        (WebCore::GeneratedImage::GeneratedImage):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::setContent):
        * rendering/style/RenderStyle.h:

2008-08-29  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Adele.

        Fix for <rdar://problem/6093767>
        https://bugs.webkit.org/show_bug.cgi?id=20526

        Don't allow video to render until unsupported track types have been disabled.

        * platform/graphics/win/QTMovieWin.cpp:
        (QTMovieWinPrivate::task):
        (QTMovieWinPrivate::drawingComplete):
        (QTMovieWinPrivate::clearGWorld):

2008-08-29  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Adele.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=20525
        <rdar://problem/6169301>

        Return the size of the movie data instead of 1000.

        Test: media/progress-event-total.html

        * platform/graphics/win/QTMovieWin.cpp:
        (QTMovieWin::dataSize):

2008-08-29  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Eric Seidel.

        [janitor/qt] Start replacing port specific getters with the generic native getter
        To get the native presentation of an image we currently have platform
        specific #ifdef's and a generic getter using NativeImagePtr. This patch
        extends this to the ImageBuffer and updates the Qt platform to get rid
        of the special #ifdefs.

        https://bugs.webkit.org/attachment.cgi?id=22861

        * platform/graphics/BitmapImage.h:
        * platform/graphics/Image.h:
        * platform/graphics/qt/ImageQt.cpp:
        * platform/graphics/qt/StillImageQt.cpp:
        * platform/graphics/qt/StillImageQt.h:
        * platform/qt/ClipboardQt.cpp:
        (WebCore::ClipboardQt::createDragImage):
        (WebCore::ClipboardQt::declareAndWriteDragImage):
        * platform/qt/CursorQt.cpp:
        * platform/qt/PasteboardQt.cpp:
        (WebCore::Pasteboard::writeImage):

2008-08-29  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Simon.

        [svg/qt] Stop crashing... when no RenderPath/RenderObject is given...

        * svg/graphics/qt/SVGPaintServerQt.cpp:
        (WebCore::SVGPaintServer::renderPath):
        * svg/graphics/qt/SVGPaintServerSolidQt.cpp:
        (WebCore::SVGPaintServerSolid::setup):

2008-08-29  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Simon.

        [network/qt] Implement defering of loading ResourceHandle's
        This is needed otherwise we end in an ASSERT in the MainResourceLoader. The
        implementation is simply not forwarding anything to the
        ResourceHandleClient until we are allowed to. This might lead to a deadlock
        in Qt as we do not empty the QNetworkReply input buffer and wait until we
        are allowed to read. If that happens we are forced to buffer the data
        within QNetworkReplyHandler, for now this is not done.

        Manual test:
        - Open http://acid3.acidtests.org
        - Wait for the test to complete
        - Click on the Reference Rendering link
        - Be fast and see the results of acid3
        => assert

        * platform/network/qt/QNetworkReplyHandler.cpp:
        (WebCore::QNetworkReplyHandler::QNetworkReplyHandler):
        (WebCore::QNetworkReplyHandler::setLoadMode):
        (WebCore::QNetworkReplyHandler::finish):
        (WebCore::QNetworkReplyHandler::sendResponseIfNeeded):
        (WebCore::QNetworkReplyHandler::forwardData):
        (WebCore::QNetworkReplyHandler::start):
        (WebCore::QNetworkReplyHandler::resetState):
        (WebCore::QNetworkReplyHandler::sendQueuedItems):
        * platform/network/qt/QNetworkReplyHandler.h:
        (WebCore::QNetworkReplyHandler::):
        * platform/network/qt/ResourceHandleQt.cpp:
        (WebCore::ResourceHandle::start):
        (WebCore::ResourceHandle::loadResourceSynchronously):
        (WebCore::ResourceHandle::setDefersLoading):

2008-08-29  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Holger.

        Don't crash when drawing patterns with the HTML canvas. Patterns
        remain unimplemented but at least they don't crash anymore. This is
        done by changing the PlatformPatternPtr to be a brush for the Qt
        platform.

        * platform/graphics/Pattern.h:
        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::GraphicsContext::fillPath):
        (WebCore::GraphicsContext::strokePath):
        (WebCore::GraphicsContext::fillRect):
        * platform/graphics/qt/PatternQt.cpp:
        (WebCore::Pattern::createPlatformPattern):

2008-08-29  Simon Hausmann  <hausmann@webkit.org>

        Fix the Qt build, fontSelector() is not used by the Qt port yet
        and we just return 0 in Font::fontSelector().

        * platform/graphics/Font.h:

2008-08-28  Alp Toker  <alp@nuanti.com>

        GTK+ dist/build fix. List newly added header files.

        * GNUmakefile.am:

2008-08-28  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dave Hyatt

        Various WebKitCSSTransformValue-related fixes
        https://bugs.webkit.org/show_bug.cgi?id=20562

        Test: css3/transform-value-types.html

        * bindings/js/JSCSSValueCustom.cpp:
        (WebCore::toJS):
        * css/CSSValue.h:
        * css/WebKitCSSTransformValue.cpp:
        (WebCore::WebKitCSSTransformValue::cssText):
        * css/WebKitCSSTransformValue.h:
        (WebCore::WebKitCSSTransformValue::):
        * css/WebKitCSSTransformValue.idl:

2008-08-28  Dan Bernstein  <mitz@apple.com>

        Reviewed by Steve Falkenburg.

        - do not let the "last chance" WM_TIMER trigger WebCore timers when they should be deferred

        * platform/win/SharedTimerWin.cpp:
        (WebCore::TimerWindowWndProc):

2008-08-28  David Hyatt  <hyatt@apple.com>

        RenderStyle cleanup.

        Break out StyleImage, StyleGeneratedImage, StyleCachedImage and NinePieceImage into separate files.

        Reviewed by Adam

        * css/CSSImageGeneratorValue.cpp:
        * css/CSSImageValue.cpp:
        * css/CSSStyleSelector.cpp:
        * rendering/RenderImageGeneratedContent.cpp:
        * rendering/style/NinePieceImage.cpp: Added.
        * rendering/style/NinePieceImage.h: Added.
        * rendering/style/RenderStyle.cpp:
        (WebCore::FillLayer::operator==):
        (WebCore::FillLayer::containsImage):
        (WebCore::StyleInheritedData::operator==):
        (WebCore::RenderStyle::contentDataEquivalent):
        * rendering/style/RenderStyle.h:
        * rendering/style/StyleCachedImage.cpp: Added.
        * rendering/style/StyleCachedImage.h: Added.
        * rendering/style/StyleGeneratedImage.cpp: Added.
        * rendering/style/StyleGeneratedImage.h: Added.
        * rendering/style/StyleImage.h: Added.

2008-08-28  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dave Hyatt

        Make all the 'isFoo()' methods on CSSValue const,
        and fix the subclasses.

        https://bugs.webkit.org/show_bug.cgi?id=20561

        * css/CSSTimingFunctionValue.h:
        * css/CSSValue.h:
        (WebCore::CSSValue::isFontValue):
        (WebCore::CSSValue::isImageGeneratorValue):
        (WebCore::CSSValue::isImageValue):
        (WebCore::CSSValue::isImplicitInitialValue):
        * css/CSSValueList.h:
        * css/FontValue.h:

2008-08-28  David Hyatt  <hyatt@apple.com>

        The great RenderStyle cleanup begins!

        Move LengthBox and LengthSize out of RenderStyle and into Length.

        Reviewed by Adam

        * rendering/Length.h:
        (WebCore::):
        (WebCore::Length::Length):
        (WebCore::Length::operator==):
        (WebCore::Length::operator!=):
        (WebCore::Length::value):
        (WebCore::Length::rawValue):
        (WebCore::Length::percent):
        (WebCore::Length::type):
        (WebCore::Length::quirk):
        (WebCore::Length::setValue):
        (WebCore::Length::setRawValue):
        (WebCore::Length::calcValue):
        (WebCore::Length::calcMinValue):
        (WebCore::Length::calcFloatValue):
        (WebCore::Length::isUndefined):
        (WebCore::Length::isZero):
        (WebCore::Length::isPositive):
        (WebCore::Length::isNegative):
        (WebCore::Length::isAuto):
        (WebCore::Length::isRelative):
        (WebCore::Length::isPercent):
        (WebCore::Length::isFixed):
        (WebCore::Length::isStatic):
        (WebCore::Length::isIntrinsicOrAuto):
        (WebCore::Length::blend):
        (WebCore::LengthBox::LengthBox):
        (WebCore::LengthBox::operator=):
        (WebCore::LengthBox::operator==):
        (WebCore::LengthBox::operator!=):
        (WebCore::LengthBox::nonZero):
        (WebCore::LengthSize::LengthSize):
        * rendering/style/RenderStyle.h:

2008-08-28  David Hyatt  <hyatt@apple.com>

        Reviewed by Darin

        https://bugs.webkit.org/show_bug.cgi?id=18091

        font-size should be animatable using -webkit-transition.

        * page/AnimationController.cpp:
        (WebCore::AnimationControllerPrivate::ensurePropertyMap):
        * rendering/style/RenderStyle.h:
        (WebCore::RenderStyle::setFontSize):

2008-08-28  Brad Garcia  <bgarcia@google.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=20549
        Correctly determine when cursor is over a resizable border within
        a nested frameset.

        * rendering/RenderFrameSet.cpp:
        (WebCore::RenderFrameSet::canResizeRow):
        (WebCore::RenderFrameSet::canResizeColumn):

2008-08-28  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Eric Seidel

        Add RuleTypes to CSSRule.idl for keyframes and keyframe rules.
        https://bugs.webkit.org/show_bug.cgi?id=20552

        Test: animations/animation-css-rule-types.html

        * css/CSSRule.idl:

2008-08-28  Anders Carlsson  <andersca@apple.com>

        Reviewed by Kevin and Darin.

        <rdar://problem/6182541>
        https://bugs.webkit.org/show_bug.cgi?id=20202
        Missing http status line from the http headers.

        Add a status line to the header string.

        * plugins/PluginStream.cpp:
        (WebCore::PluginStream::startStream):

2008-08-28  Holger Hans Peter Freyther  <zecke@selfish.org>

        Rubber-stamped by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=17261

        Make it possible to theme the default Url icon and enable this for
        the Qt port. To have a minimal usage of #ifdef in the code the setting
        of the icon was moved to a new method which comes in two flavors.

        * loader/icon/IconDatabase.cpp:
        (WebCore::loadDefaultIconRecord): Load or set the default icon
        (WebCore::IconDatabase::defaultIcon):

2008-08-28  Holger Hans Peter Freyther <zecke@selfish.org>

        Unreviewed compile fix

        * platform/graphics/qt/GraphicsContextQt.cpp: Remove redefinitions

2008-08-28  Adam Roben  <aroben@apple.com>

        Windows (and others?) build fix

        * page/Chrome.cpp: Added a missing #include.
        (WebCore::PageGroupLoadDeferrer::PageGroupLoadDeferrer): Fixed typo.

2008-08-27  Eric Seidel  <eric@webkit.org>

        Reviewed by Oliver Hunt.

        Qt and Cairo support from krit (and blind stab @ wx compile support)
        https://bugs.webkit.org/show_bug.cgi?id=20373

        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::fillPath):
        (WebCore::GraphicsContext::strokePath):
        (WebCore::GraphicsContext::drawPath):
        (WebCore::GraphicsContext::fillRect):
        (WebCore::GraphicsContext::setPlatformFillColor):
        (WebCore::GraphicsContext::setPlatformStrokeColor):
        (WebCore::GraphicsContext::setPlatformStrokeStyle):
        (WebCore::GraphicsContext::strokeRect):
        (WebCore::GraphicsContext::setImageInterpolationQuality):
        (WebCore::GraphicsContext::imageInterpolationQuality):
        (WebCore::GraphicsContext::setPlatformFillPattern):
        (WebCore::GraphicsContext::setPlatformStrokePattern):
        (WebCore::GraphicsContext::setPlatformFillGradient):
        (WebCore::GraphicsContext::setPlatformStrokeGradient):
        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::GraphicsContext::fillPath):
        (WebCore::GraphicsContext::strokePath):
        (WebCore::GraphicsContext::fillRect):
        (WebCore::GraphicsContext::strokeRect):
        (WebCore::GraphicsContext::clipToImageBuffer):
        (WebCore::GraphicsContext::setPlatformFillPattern):
        (WebCore::GraphicsContext::setPlatformStrokePattern):
        (WebCore::GraphicsContext::setPlatformFillGradient):
        (WebCore::GraphicsContext::setPlatformStrokeGradient):
        (WebCore::GraphicsContext::setImageInterpolationQuality):
        (WebCore::GraphicsContext::imageInterpolationQuality):
        * platform/graphics/wx/GraphicsContextWx.cpp:
        (WebCore::GraphicsContext::clipToImageBuffer):
        (WebCore::GraphicsContext::setImageInterpolationQuality):
        (WebCore::GraphicsContext::imageInterpolationQuality):
        (WebCore::GraphicsContext::fillPath):
        (WebCore::GraphicsContext::strokePath):
        (WebCore::GraphicsContext::drawPath):
        (WebCore::GraphicsContext::fillRect):
        (WebCore::GraphicsContext::setPlatformFillPattern):
        (WebCore::GraphicsContext::setPlatformStrokePattern):
        (WebCore::GraphicsContext::setPlatformFillGradient):

2008-08-27  Eric Seidel  <eric@webkit.org>

        Reviewed by Oliver Hunt.

        Add stroke/fill Gradient and Pattern support to GraphicsContext and update <canvas> to use it.
        https://bugs.webkit.org/show_bug.cgi?id=20373

        Changed pattern() to canvasPattern() on CanvasStyle to match canvasGradient()

        Made Generator (aka Gradient) RefCounted so that GraphicsContext didn't
        have to store large Gradient objects in the GraphicsContextState

        Made Pattern RefCounted for the same reason.

        Many updates to GraphicsContext to support easier drawing with
        Patterns and Gradients.

        * WebCore.xcodeproj/project.pbxproj: Add pre-existing GraphicsContextPrivate.h
        * bindings/js/JSCanvasRenderingContext2DCustom.cpp:
        (WebCore::toJS):
        * css/CSSGradientValue.cpp:
        (WebCore::CSSGradientValue::createGradient):
        * css/CSSGradientValue.h:
        * html/CanvasGradient.cpp:
        (WebCore::CanvasGradient::CanvasGradient):
        * html/CanvasGradient.h:
        (WebCore::CanvasGradient::gradient):
        (WebCore::CanvasGradient::addColorStop):
        (WebCore::CanvasGradient::getColor):
        * html/CanvasPattern.cpp:
        * html/CanvasPattern.h:
        (WebCore::CanvasPattern::pattern):
        (WebCore::CanvasPattern::originClean):
        * html/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::State::State):
        (WebCore::CanvasRenderingContext2D::setStrokeStyle):
        (WebCore::CanvasRenderingContext2D::setFillStyle):
        (WebCore::CanvasRenderingContext2D::fill):
        (WebCore::CanvasRenderingContext2D::stroke):
        (WebCore::CanvasRenderingContext2D::fillRect):
        (WebCore::CanvasRenderingContext2D::strokeRect):
        * html/CanvasRenderingContext2D.h:
        * html/CanvasStyle.cpp:
        (WebCore::CanvasStyle::applyStrokeColor):
        (WebCore::CanvasStyle::applyFillColor):
        * html/CanvasStyle.h:
        * platform/graphics/GeneratedImage.h:
        (WebCore::GeneratedImage::GeneratedImage):
        * platform/graphics/Generator.h:
        * platform/graphics/Gradient.h:
        (WebCore::Gradient::create):
        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::fillRule):
        (WebCore::GraphicsContext::setFillRule):
        (WebCore::GraphicsContext::setStrokePattern):
        (WebCore::GraphicsContext::setFillPattern):
        (WebCore::GraphicsContext::setStrokeGradient):
        (WebCore::GraphicsContext::setFillGradient):
        * platform/graphics/GraphicsContext.h:
        * platform/graphics/GraphicsContextPrivate.h:
        (WebCore::):
        (WebCore::GraphicsContextState::GraphicsContextState):
        * platform/graphics/GraphicsTypes.h:
        * platform/graphics/Path.h:
        * platform/graphics/Pattern.h:
        (WebCore::Pattern::create):
        (WebCore::Pattern::tileImage):
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::drawRect):
        (WebCore::GraphicsContext::drawEllipse):
        (WebCore::GraphicsContext::drawConvexPolygon):
        (WebCore::calculateDrawingMode):
        (WebCore::GraphicsContext::drawPath):
        (WebCore::fillPathWithFillRule):
        (WebCore::GraphicsContext::fillPath):
        (WebCore::GraphicsContext::strokePath):
        (WebCore::GraphicsContext::fillRect):
        (WebCore::GraphicsContext::fillRoundedRect):
        (WebCore::GraphicsContext::setPlatformStrokePattern):
        (WebCore::GraphicsContext::setPlatformFillPattern):
        (WebCore::GraphicsContext::setPlatformStrokeGradient):
        (WebCore::GraphicsContext::setPlatformFillGradient):

2008-08-20  Eric Seidel  <eric@webkit.org>

        Reviewed by Darin and Alexey.

        Close a leak of PausedTimeouts if the JavaScriptDebugServer was destroyed
        with timeouts paused.
        https://bugs.webkit.org/show_bug.cgi?id=20469

        I attempted to clean up the memory management of PausedTimeouts, I'm not
        sure the solution I came up with is "cleaner", but it's in some ways
        "safer", since it no longer uses raw pointers and manual new/delete.

        This also now prevents CachedPage from needlessly creating Window
        objects when caching pages which didn't already have one. :)

        I also made Chrome.cpp no longer depend on the JavaScript bindings
        (aka JSDOMWindowBase.h), since there was no real reason for it to.

        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::pauseTimeouts):
        (WebCore::JSDOMWindowBase::resumeTimeouts):
        * bindings/js/JSDOMWindowBase.h:
        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::pauseTimeouts):
        (WebCore::ScriptController::resumeTimeouts):
        * bindings/js/ScriptController.h:
        * history/CachedPage.cpp:
        (WebCore::CachedPage::CachedPage):
        (WebCore::CachedPage::restore):
        * page/Chrome.cpp:
        (WebCore::PageGroupLoadDeferrer::PageGroupLoadDeferrer):
        (WebCore::PageGroupLoadDeferrer::~PageGroupLoadDeferrer):
        * page/JavaScriptDebugServer.cpp:
        (WebCore::JavaScriptDebugServer::~JavaScriptDebugServer):
        (WebCore::JavaScriptDebugServer::setJavaScriptPaused):

2008-08-27  Holger Hans Peter Freyther <zecke@selfish.org>

        Unreviewed compile fix

        Add the stub for the Qt port.

        * WebCore.pro:
        * page/qt/AccessibilityObjectQt.cpp: Added.
        (WebCore::AccessibilityObject::accessibilityIgnoreAttachment):

2008-08-27  Alp Toker  <alp@nuanti.com>

        Reviewed by Eric.

        https://bugs.webkit.org/show_bug.cgi?id=20551
        [GTK] search popup crash

        * platform/gtk/SearchPopupMenuGtk.cpp:
        (WebCore::SearchPopupMenu::enabled):
        Fix a search popup crasher by disabling the history popup since we
        don't support this feature yet in the GTK+ port.

2008-08-27  Alp Toker  <alp@nuanti.com>

        Reviewed by Eric.

        https://bugs.webkit.org/show_bug.cgi?id=20551
        [GTK] curl crashers

        * platform/network/curl/ResourceHandleManager.cpp:
        (WebCore::ResourceHandleManager::startScheduledJobs):
        Remove the resource handle from the pending list before starting the
        job, not afterwards. Fixes crashers in the test suite.

        Test: fast/dom/clientWidthAfterDocumentIsRemoved.html
        Test: fast/encoding/char-encoding.html

2008-08-27  Dirk Schulze  <vbs85@gmx.de>

        Reviewed by eseidel.

        Fix canvas drawImage to support composite operations.
        Composite had no effect on canvas elements like these:
        http://philip.html5.org/tests/canvas/suite/tests/index.2d.composite.canvas.html

        [CAIRO] Canvas composite don't work on canvas-elements.
        https://bugs.webkit.org/show_bug.cgi?id=20548

        * html/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::drawImage): pass the current composite operator to the drawImage call

2008-08-27  Mario Bensi  <mbensi@pleyo.com>

        Reviewed by Eric Seidel.

        Fix the data content of an image with a base64.

        * platform/network/curl/ResourceHandleManager.cpp:
        (WebCore::parseDataUrl): Remove the String and use only the data
        Vector because the data.latin1().data() convert the data content and
        the image test ( https://bugs.webkit.org/attachment.cgi?id=21726 ) is
        not drawn correctly.

2008-08-27  Antti Koivisto  <antti@apple.com>

        Reviewed by Eric Seidel.

        Crash after OK in dialog box and reloading page in secure mode
        https://bugs.webkit.org/show_bug.cgi?id=20493

        The new run loop spawned by a modal dialog causes a timer in the loader to run
        synchronously inside didFinishLoading() deleting "this" object.

        Defer all WebCore timers when a modal dialog is up. They are not
        safe to execute.

        * page/Chrome.cpp:
        (WebCore::PageGroupLoadDeferrer::PageGroupLoadDeferrer):
        (WebCore::PageGroupLoadDeferrer::~PageGroupLoadDeferrer):

2008-08-27  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Dave Hyatt

        Memory leaks when animating transforms
        https://bugs.webkit.org/show_bug.cgi?id=20532

        * rendering/style/RenderStyle.cpp:
        (WebCore::ScaleTransformOperation::blend):
        (WebCore::RotateTransformOperation::blend):
        (WebCore::SkewTransformOperation::blend):
        (WebCore::TranslateTransformOperation::blend):
        (WebCore::MatrixTransformOperation::blend):
        * rendering/style/RenderStyle.h:

2008-08-27  Timothy Hatcher  <timothy@apple.com>

        Add support for support for -webkit-appearance: default-button on the Mac platform.

        <rdar://problem/6173530>

        Reviewed by Dave Hyatt.

        * WebCore.base.exp: Export new symbols.
        * platform/mac/WebCoreSystemInterface.h: Add wkAdvanceDefaultButtonPulseAnimation.
        * platform/mac/WebCoreSystemInterface.mm: Ditto.
        * rendering/RenderButton.cpp:
        (WebCore::RenderButton::RenderButton): Remove #if PLATFORM(WIN).
        (WebCore::RenderButton::setStyle): Ditto.
        * rendering/RenderButton.h: Ditto.
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::adjustRepaintRect): Add a case for DefaultButtonAppearance.
        (WebCore::RenderThemeMac::setButtonCellState): Set the key equivalent to the return
        key if the button is default, otherwise reset the key equivalent.
        (WebCore::RenderThemeMac::paintButton): If the button is default call setDefaultButtonCell:
        on the window, then wkAdvanceDefaultButtonPulseAnimation before painting. Restore
        the window's previous default button cell when finished.

2008-08-26  David Hyatt  <hyatt@apple.com>

        First cut at making form controls on OS X respect full page zoom.  There are lots of bugs.

        Reviewed by weinig

        Added fast/forms/zoomed-controls.html

        * css/CSSStyleSelector.cpp:
        (WebCore::addIntrinsicMargins):
        * rendering/RenderSlider.cpp:
        (WebCore::RenderSlider::calcPrefWidths):
        * rendering/RenderThemeMac.h:
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::adjustRepaintRect):
        (WebCore::RenderThemeMac::inflateRect):
        (WebCore::RenderThemeMac::baselinePosition):
        (WebCore::RenderThemeMac::setControlSize):
        (WebCore::RenderThemeMac::sizeForFont):
        (WebCore::RenderThemeMac::sizeForSystemFont):
        (WebCore::RenderThemeMac::setFontFromControlSize):
        (WebCore::RenderThemeMac::paintCheckbox):
        (WebCore::RenderThemeMac::setCheckboxCellState):
        (WebCore::RenderThemeMac::paintRadio):
        (WebCore::RenderThemeMac::setRadioCellState):
        (WebCore::RenderThemeMac::setButtonPaddingFromControlSize):
        (WebCore::RenderThemeMac::adjustButtonStyle):
        (WebCore::RenderThemeMac::setButtonCellState):
        (WebCore::RenderThemeMac::paintButton):
        (WebCore::RenderThemeMac::paintMenuList):
        (WebCore::RenderThemeMac::paintMenuListButton):
        (WebCore::RenderThemeMac::popupInternalPaddingLeft):
        (WebCore::RenderThemeMac::popupInternalPaddingRight):
        (WebCore::RenderThemeMac::popupInternalPaddingTop):
        (WebCore::RenderThemeMac::popupInternalPaddingBottom):
        (WebCore::RenderThemeMac::setPopupButtonCellState):
        (WebCore::RenderThemeMac::paintSliderTrack):
        (WebCore::RenderThemeMac::paintSliderThumb):
        (WebCore::RenderThemeMac::adjustSliderThumbSize):
        (WebCore::RenderThemeMac::paintSearchField):
        (WebCore::RenderThemeMac::adjustSearchFieldStyle):
        (WebCore::RenderThemeMac::paintSearchFieldCancelButton):
        (WebCore::RenderThemeMac::paintSearchFieldResultsButton):

2008-08-27  Brady Eidson  <beidson@apple.com>

        Reviewed by Anders

        <rdar://problem/6134133> - Crash when loading large movie as a standalone document

        We hand off these loads to Quicktime which manages and spools the data itself, but we also continued
        to load and buffer the data for the movie in WebCore.  With large media files, this results in blowing
        away the virtual address space and a crash.

        * loader/EmptyClients.h:
        (WebCore::EmptyFrameLoaderClient::pluginWillHandleLoadError):
        * loader/FrameLoaderClient.h:  Added client method to get platform specific error for
          "plugin will handle load"

        * loader/MediaDocument.cpp:
        (WebCore::MediaTokenizer::createDocumentStructure): Tell the MainResourceLoader to not buffer data,
          and cancel the WebCore-managed load
        (WebCore::MediaTokenizer::writeRawData):
        (WebCore::MediaTokenizer::finish):

2008-08-26  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Eric Seidel

        Linear timing functions should have control points 0, 0, 1, 1.
        https://bugs.webkit.org/show_bug.cgi?id=20535

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::mapAnimationTimingFunction):
        * rendering/style/RenderStyle.h:

2008-08-27  Adam Roben  <aroben@apple.com>

        Windows build fix

        * WebCore.vcproj/WebCore.vcproj: Fix file extension.

2008-08-26  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Beth Dakin.

        <rdar://problem/6069462> REGRESSION: webkit is returning flash objects as AXUnknown

        Added platform-specific accessibilityIgnoreAttachment, which allows the platform
        to determine if an attachment is ignored through accessibility. Added equivalent
        methods in Gtk, Win and Mac

        Test: accessibility/plugin.html

        * GNUmakefile.am:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * page/AccessibilityObject.h:
        * page/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::accessibilityIsIgnored):
        * page/gtk/AccessibilityObjectAtk.cpp: Added.
        (WebCore::AccessibilityObject::accessibilityIgnoreAttachment):
        * page/mac/AccessibilityObjectMac.mm: Added.
        (WebCore::AccessibilityObject::accessibilityIgnoreAttachment):
        * page/mac/AccessibilityObjectWrapper.h:
        * page/win/AccessibilityObjectWin.cpp: Added.
        (WebCore::AccessibilityObject::accessibilityIgnoreAttachment):

2008-08-26  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Beth Dakin.

        <rdar://problem/5817770> can't bring up contextual menu for embedded objects in WebText

        * page/mac/AccessibilityObjectWrapper.mm:
        (-[AccessibilityObjectWrapper accessibilityPerformShowMenuAction]):
        (-[AccessibilityObjectWrapper accessibilityShowContextMenu]):

2008-08-26  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/6176924> CrashTracer: [USER] 4 crashes in Safari at com.apple.WebCore: WebCore::RenderTableSection::numColumns

        Tests: accessibility/table-notbody.html

        * page/AccessibilityTable.cpp:
        (WebCore::AccessibilityTable::isTableExposableThroughAccessibility):

2008-08-26  Sam Weinig  <sam@webkit.org>

        Reviewed by Beth Dakin.

        Fix typo.

        * dom/DOMCoreException.h:

2008-08-26  Sam Weinig  <sam@webkit.org>

        Reviewed by Oliver Hunt.

        Fix https://bugs.webkit.org/show_bug.cgi?id=20479
        <rdar://problem/6167660>
        Take image redirects into account when tainting the canvas.

        Test: http/tests/security/canvas-remote-read-redirect-to-remote-image.html

        * html/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::drawImage):
        (WebCore::CanvasRenderingContext2D::drawImageFromRect):

2008-08-26  Sam Weinig  <sam@webkit.org>

        Reviewed by Darin Adler.

        Change canvas tainting logic to ask the image if it contains
        any resources outside of its own origin. Since there is no
        way to determine if SVG images contain any resources outside its
        origin, we always assume it does.

        * html/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::drawImage):
        (WebCore::CanvasRenderingContext2D::drawImageFromRect):
        * platform/graphics/BitmapImage.h:
        (WebCore::BitmapImage::hasSingleSecurityOrigin):
        * platform/graphics/GeneratedImage.h:
        (WebCore::GeneratedImage::hasSingleSecurityOrigin):
        * platform/graphics/Image.h:
        (WebCore::Image::hasSingleSecurityOrigin):
        * platform/graphics/cg/PDFDocumentImage.h:
        (WebCore::PDFDocumentImage::hasSingleSecurityOrigin):
        * svg/graphics/SVGImage.h:

2008-08-26  Maxime Britto  <britto@apple.com>

        Reviewed by Adele.

        <rdar://6159244> Pan-scrolling does not work on particular sites (starmagazine.com, nytimes.com)
        This patch fixes the issues and modify the behavior of the panscroll by allowing it to jump to a parent layer when it reaches the end of its scrollable area.
        This is matching the behavior of the mouse wheel when trying to scroll in a smaller layer of the page (div, textarea, ...) and when we reach the edge and keep scrolling then the whole page scrolls.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::updateAutoscrollRenderer): if we switch to the parent layer to do the scroll we want to change the renderer for the panning
        * page/EventHandler.h:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::panScrollFromPoint): now calls the scrollByRecursively method when it has computed the xDelta and yDelta
        (WebCore::RenderLayer::scrollByRecursively): try to scroll the current layer by the xDelta and yDelta provided, if it can't it ask its parent layer to do so.
        * rendering/RenderLayer.h:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::canBeProgramaticallyScrolled): a RenderObject must have a RenderLayer to be programatically scrolled
        (WebCore::RenderObject::autoscroll): No need to check for the layer anymore since we verify it's present in the upmentionned method
        (WebCore::RenderObject::panScroll): No need to check for the layer anymore too.

2008-08-25  Julien Chaffraix  <jchaffraix@webkit.org>

        Reviewed by Darin Adler.

        Bug 20247: setAttributeNode() does not work when attribute name has a capital letter in it
        https://bugs.webkit.org/show_bug.cgi?id=20247

        <rdar://problem/6118218>

        Add a boolean parameter to getAttributeItem to choose between case sensitive and case insensitive
        check. This keeps the behaviour for setAttribute / hasAttribute (case sensitive) and getAttribute
        (case insensitive for HTML elements).

        Test: fast/dom/Element/getAttribute-check-case-sensitivity.html

        * dom/Element.cpp:
        (WebCore::Element::getAttribute):
        * dom/NamedAttrMap.cpp:
        (WebCore::NamedAttrMap::getNamedItem):
        (WebCore::NamedAttrMap::getAttributeItem):
        * dom/NamedAttrMap.h:

2008-08-25  Sam Weinig  <sam@webkit.org>

        Reviewed by Oliver Hunt.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=20514
        <rdar://problem/6174096>
        Treat SVG images as dirty when drawing to a canvas.

        Test: http/tests/security/canvas-remote-read-svg-image.html

        * html/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::drawImage):
        (WebCore::CanvasRenderingContext2D::drawImageFromRect):
        * platform/graphics/Image.h:
        (WebCore::Image::isSVGImage):
        * svg/graphics/SVGImage.h:
        (WebCore::SVGImage::isSVGImage):

2008-08-25  Sam Weinig  <sam@webkit.org>

        Reviewed by Mark Rowe.

        Fix https://bugs.webkit.org/show_bug.cgi?id=20377
        Leak in XMLHttpRequest.

        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::makeCrossSiteAccessRequestWithPreflight):

2008-08-25  Brady Eidson  <beidson@apple.com>

        Reviewed by Anders

        Speculative fix for <rdar://problem/6173217>

        Moves the "clearArchivedResources()" call to exactly where it used to be in the old version of WebArchive code.
        Also, adds a null check for m_documentLoader since DocumentLoader::stopLoading() can end up clearing it, rendering
        the first null check invalid.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::stopAllLoaders):


2008-08-25  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Tim.

        <rdar://problem/6157711> Heavy/Tree view selector is not grayed out if
        there is no profile, can cause crash

        * page/inspector/ProfilesPanel.js:

2008-08-25  Dean Jackson  <dino@apple.com>

        Reviewed by Dave Hyatt

        Make sure 'inherit' is handled by transition property.
        https://bugs.webkit.org/show_bug.cgi?id=20513

        Test: transitions/inherit.html
        Test: transitions/inherit-other-props.html

        * css/CSSStyleSelector.cpp:
          fix macro to check existence of list before getting size

2008-08-25  Anders Carlsson  <andersca@apple.com>

        Reviewed by Mark.

        <rdar://problem/6149787> crash @ com.apple.JavaScriptCore: WTF::callOnMainThread + 37.

        Initialize threading in the call to WebCoreObjCFinalizeOnMainThread. We currently assume
        (safely) that any class that needs finalization on the main thread will also need to be deallocated
        on the main thread, and calling initializeThreading from WebCoreObjCFinalizeOnMainThread instead of
        calling it from WebCoreObjCScheduleDeallocateOnMainThread seems safer.

        * platform/mac/WebCoreObjCExtras.c:
        (WebCoreObjCFinalizeOnMainThread):

2008-08-25  Antti Koivisto  <antti@apple.com>

        Reviewed by Dan Bernstein.

        Rename CachedResource::referenced() to CachedResource::hasClients() to
        match previous ref() -> addClient() rename.

        * loader/Cache.cpp:
        (WebCore::Cache::pruneLiveResources):
        (WebCore::Cache::pruneDeadResources):
        (WebCore::Cache::remove):
        (WebCore::Cache::getStatistics):
        (WebCore::Cache::dumpLRULists):
        * loader/CachedResource.cpp:
        (WebCore::CachedResource::addClient):
        (WebCore::CachedResource::removeClient):
        (WebCore::CachedResource::setDecodedSize):
        (WebCore::CachedResource::setEncodedSize):
        * loader/CachedResource.h:
        (WebCore::CachedResource::hasClients):
        (WebCore::CachedResource::canDelete):

2008-08-25  Anthony Ricaud  <rik24d@gmail.com>

        Add a missing Inspector localized string for "other".

        https://bugs.webkit.org/show_bug.cgi?id=20509

        Reviewed by Tim Hatcher.

        * English.lproj/localizedStrings.js:

2008-08-22  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Geoff, Mark and Tim.

        <rdar://problem/6150623> JSProfiler: It would be nice if the profiles
        in the console said what file and line number they came from
        - Lay the foundation for getting line numbers and other data from the
        JavaScript engine.

        * ForwardingHeaders/VM: Added.
        * ForwardingHeaders/VM/Machine.h: Added.
        * page/Console.cpp: Gather the line number and file information when
        profileEnd has been called, but don't use it until didFinishProfiling is
        called.  We won't need to wait once we remove the profiler "zombie" mode
        which this patch helps pave the foundation for.
        (WebCore::Console::Console):
        (WebCore::Console::profileEnd):
        (WebCore::Console::finishedProfiling):
        * page/Console.h:
        * page/InspectorController.cpp: Modify calls to
        addProfileMessageToConsole to satisfy the new arguments it takes.
        (WebCore::InspectorController::finishedProfiling):
        (WebCore::InspectorController::addProfile):
        (WebCore::InspectorController::addProfileMessageToConsole):
        (WebCore::InspectorController::finishedProfiling):
        * page/InspectorController.h:

2008-08-25  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Simon.

        [inspector] Update the WebKit.qrc Qt resources file
        Catchup with the changes in the directory.

        * page/inspector/WebKit.qrc:

2008-08-25  Dirk Schulze  <vbs85@gmx.de>

        Reviewed by Simon.

        Transformed the radian to degree, to get rotate()
        in canvas work as expected.

        [Qt] Canvas.rotate() doesn't work
        https://bugs.webkit.org/show_bug.cgi?id=20496

        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::GraphicsContext::rotate):

2008-08-24  Steve Falkenburg  <sfalken@apple.com>

        Add a "last chance" WM_TIMER to the Windows shared timer.

        The last chance timer fires every 5 seconds to run any lost WM_TIMER based timers.
        Failure to fire a timer is fatal to the cross-platform Timer code, since it won't re-schedule
        timers if a timer with an earlier expiration is already pending. This results in no timers
        firing from that point on.

        We lose WM_TIMER messages occasionally (in the neighborhood of 1 per hour) probably due to a
        buggy window message hook.

        This timer will start when the first WM_TIMER is scheduled, and will
        fire every 5 seconds thereafter, causing any lost timers to be fired.

        Found this via one of its symptoms: leaking WebFrames. The fix prevents timers from stalling
        and prevents the WebFrame leak.

        Reviewed by Darin Adler, Geoff Garen.

        * platform/win/SharedTimerWin.cpp:
        (WebCore::):
        (WebCore::TimerWindowWndProc):
        (WebCore::setSharedTimerFireTime):

2008-08-24  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        - fix <rdar://problem/6065547> REGRESSION (r34879): "Subject" in unread emails in Yahoo mail is not shown in bold

        Test: fast/css/font-property-priority.html

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue): Changed to pass the 'important' flag
        to the font-property-parsing functions.
        (WebCore::CSSParser::parseFontStyle): Added an 'important' argument and
        changed to use it rather than the m_important member.
        (WebCore::CSSParser::parseFontVariant): Ditto.
        (WebCore::CSSParser::parseFontWeight): Ditto.
        * css/CSSParser.h:

2008-08-24  Timothy Hatcher  <timothy@apple.com>

        Fixes a bug where the Inspector's UI would not animate or
        fully function because JavaScript timeouts, intervals and
        CSS animation timers where not firing while paused at a
        a breakpoint in the inspected page.

        https://bugs.webkit.org/show_bug.cgi?id=20042

        Reviewed by Darin Adler.

        Test: manual-tests/inspector/forzen-ui-while-paused.html

        * page/JavaScriptDebugServer.cpp:
        (WebCore::JavaScriptDebugServer::pauseIfNeeded):
        Add a call to TimerBase::fireTimersInNestedEventLoop before
        spinning the EventLoop.

2008-08-24  Rob Buis  <buis@kde.org>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=20324
        A change in SVG Glyph wont show up

        Invalidate the glyph cache when the d attribute is set.

        Test: svg/custom/glyph-setting-d-attribute.svg

        * svg/SVGGlyphElement.cpp:
        (WebCore::SVGGlyphElement::invalidateGlyphCache):
        (WebCore::SVGGlyphElement::parseMappedAttribute):
        (WebCore::SVGGlyphElement::insertedIntoDocument):
        (WebCore::SVGGlyphElement::removedFromDocument):
        * svg/SVGGlyphElement.h:

2008-08-24  Dan Bernstein  <mitz@apple.com>

        Reviewed by Sam Weinig.

        - fix https://bugs.webkit.org/show_bug.cgi?id=13864
          <rdar://problem/5451470> REGRESSION: Uninitialized value in RenderBlock::calcInlinePrefWidths()

        * rendering/RenderText.cpp:
        (WebCore::RenderText::trimmedPrefWidths): Moved the assignment to
        beginWS and endWS before the early return to ensure that they are
        initialized in that case.

2008-08-23  Cameron Zwarich  <cwzwarich@uwaterloo.ca>

        Rubber-stamped by Mark Rowe.

        Remove modelines.

        * WebCore.pro:
        * bridge/testbindings.cpp:
        * dom/DocPtr.h:
        * loader/SubstituteData.h:
        * page/Chrome.cpp:
        * page/Chrome.h:
        * page/ChromeClient.h:
        * page/Frame.h:
        * page/FrameLoadRequest.h:
        * page/FrameTree.cpp:
        * page/FrameTree.h:
        * page/Page.h:
        * page/mac/ChromeMac.mm:
        * platform/network/HTTPHeaderMap.h:
        * platform/network/ResourceErrorBase.cpp:
        * platform/network/ResourceErrorBase.h:
        * platform/network/ResourceHandleInternal.h:
        * platform/network/ResourceRequestBase.cpp:
        * platform/network/ResourceRequestBase.h:
        * platform/network/ResourceResponseBase.cpp:
        * platform/network/ResourceResponseBase.h:
        * platform/network/cf/ResourceError.h:
        * platform/network/cf/ResourceRequest.h:
        * platform/network/cf/ResourceRequestCFNet.h:
        * platform/network/cf/ResourceResponse.h:
        * platform/network/cf/ResourceResponseCFNet.h:
        * platform/network/curl/ResourceError.h:
        * platform/network/curl/ResourceRequest.h:
        * platform/network/curl/ResourceResponse.h:
        * platform/network/mac/ResourceError.h:
        * platform/network/mac/ResourceErrorMac.mm:
        * platform/network/mac/ResourceRequest.h:
        * platform/network/mac/ResourceRequestMac.mm:
        * platform/network/mac/ResourceResponse.h:
        * platform/network/mac/ResourceResponseMac.mm:
        * platform/network/qt/ResourceError.h:
        * platform/network/qt/ResourceRequest.h:
        * platform/network/qt/ResourceResponse.h:
        * platform/network/soup/CookieJarSoup.cpp:
        * platform/network/soup/ResourceError.h:
        * platform/network/soup/ResourceRequest.h:
        * platform/network/soup/ResourceResponse.h:

2008-08-23  Dan Bernstein  <mitz@apple.com>

        Reviewed by Dave Hyatt.

        - fix <rdar://problem/6065143> Reflowed image in first line of table doesn't affect baseline

        Test: fast/table/vertical-align-baseline.html

        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::getBaselineOfFirstLineBox): Added. Returns the
        baseline of the first table row, if there is one, -1 otherwise.
        * rendering/RenderTable.h:
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::baselinePosition): Changed to follow the
        CSS2.1 definition of the baseline of a table cell.
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::getBaselineOfFirstLineBox): Added. Returns
        the baseline of the first row in the section.
        * rendering/RenderTableSection.h:

2008-08-18  Jon Honeycutt  <jhoneycutt@apple.com>

        Add SPI to make a Windows WebView transparent.

        Reviewed by Dan Bernstein.

        * platform/graphics/GraphicsContext.h: Add a parameter, hasAlpha, that
        determines whether the created context has an alpha channel.
        * platform/graphics/win/GraphicsContextCGWin.cpp:
        (WebCore::CGContextWithHDC):

2008-08-22  Timothy Hatcher  <timothy@apple.com>

        Rolls out r35834 because it caused a regression in the Inspector's
        Console where some expressions always threw a syntax error.

        https://bugs.webkit.org/show_bug.cgi?id=20487

        * page/inspector/Console.js:
        (Console.prototype._evalInInspectedWindow): Removes parenthesis
        around the expression.

2008-08-22  Timothy Hatcher  <timothy@apple.com>

        Makes getStyleProperty return a value for the overflow property
        when overflow-x and overflow-y are equal.

        https://bugs.webkit.org/show_bug.cgi?id=20485

        Reviewed by Dan Bernstein.

        Test: fast/css/overflow-property.html

        * css/CSSMutableStyleDeclaration.cpp:
        (WebCore::CSSMutableStyleDeclaration::getPropertyValue):

2008-08-22  Timothy Hatcher  <timothy@apple.com>

        Fixes a bug where while editing in the Inspector the
        sidebar scroll position would jump to the top.

        https://bugs.webkit.org/show_bug.cgi?id=20484

        Reviewed by Darin Adler.

        * page/inspector/treeoutline.js:
        (TreeOutline._removeChildren): Remove the offsetTop call that
        was forcing a layout, since layout causes scroll positions
        to be clamped to the new scrollHeight/Width. Layout will happen
        normally when needed.

2008-08-22  Kevin Ollivier  <kevino@theolliviers.com>

        wx build fix. Add AccessibilityTable sources.

        * WebCoreSources.bkl:

2008-08-21  Dan Bernstein  <mitz@apple.com>

        Reviewed by Jon Honeycutt and Alexey Proskuryakov.

        - fix <rdar://problem/6162701> WebKit should correct Geeza Pro's font metrics

        Test: platform/mac/fast/text/international/Geeza-Pro-vertical-metrics-adjustment.html

        * platform/graphics/mac/SimpleFontDataMac.mm:
        (WebCore::SimpleFontData::platformInit): Add 8% to Geeza Pro's reported
        ascent and 100% to its reported descent.

2008-08-21  Kalle Vahlman  <kalle.vahlman@movial.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=20267
        [GTK] Crash on some pages due to a plugin

        Fix handling of badly formatted and empty plugin mime descriptions

        * plugins/gtk/PluginPackageGtk.cpp:
        (WebCore::PluginPackage::fetchInfo):

2008-08-21  Kevin Watters  <kevinwatters@gmail.com>

        Reviewed by Darin Adler.

        Follow other ports (and IE) in ImageSourceWx.cpp never to return an
        animated GIF frame duration of less than 50ms.

        * platform/graphics/wx/ImageSourceWx.cpp:
        (WebCore::ImageSource::frameDurationAtIndex):

2008-08-21  Maxime Britto  <britto@apple.com>

        Reviewed by Kevin McCullough.

        Test: fast/events/autoscroll-nonscrollable-iframe-in-scrollable-div.html
        https://bugs.webkit.org/show_bug.cgi?id=20451

        rdar://problem/6166435 Inspector doesn't auto scroll when selecting text (20451)
        When we climb up the rendering tree looking for a scrollable renderer, we need to be able to jump outside of an iframe.
        This way we can see if what is embedding the iframe can be scrolled even if the iframe content can't.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleMouseDraggedEvent): when we reach the document node and it can't be scrolled we set the next parent as the document's owner element if it exists.

        (WebCore::EventHandler::handleMousePressEvent): ditto

2008-08-21  Anthony Ricaud  <rik24d@gmail.com>

        Small optimization for when the dividers in the Inspector's
        Resources panel are updated.

        Reviewed by Tim Hatcher.

        * page/inspector/ResourcesPanel.js:
        (WebInsector.ResourcesPanel.prototype._updateGraphDividersIfNeeded):
        Combind a for loop and clone the divider element.

2008-08-21  Chris Marrin  <cmarrin@apple.com>

        Allow 0 (without units) for Time eg. duration
        Fix for https://bugs.webkit.org/show_bug.cgi?id=20467

        Reviewed by Dave Hyatt.

        Test: css1/units/zero-duration-without-units.html

        * css/CSSParser.cpp:
        (WebCore::CSSParser::validUnit):

2008-08-21  Timothy Hatcher  <timothy@apple.com>

        Make deleting all text while editing a DOM attribute in
        the Inspector delete the attribute. This also fixes
        an exception that would happen before.

        https://bugs.webkit.org/show_bug.cgi?id=20472

        Reviewed by Kevin McCullough.

        * page/inspector/ElementsPanel.js:
        (WebInspector.DOMNodeTreeElement.prototype._attributeEditingCommitted):
        Don't check for hasAttributes on the parseElement, continuing
        through the function will correctly remove the attribute.
        If the parseElement is null, call _editingCancelled not
        editingCancelled, this fixes an exception.

2008-08-21  Timothy Hatcher  <timothy@apple.com>

        Update the Inspector's Metrics pane when editing in
        the Styles pane. This makes sure the metrics shown
        always match what the Styles pane shows.

        https://bugs.webkit.org/show_bug.cgi?id=20470

        Reviewed by Kevin McCullough.

        * page/inspector/ElementsPanel.js:
        (WebInspector.ElementsPanel): Add event listeners for
        the "style edited" and "style property toggled" events,
        so the Metrics pane is updated.
        (WebInspector.ElementsPanel.prototype._stylesPaneEdited):
        Update the Metrics pane.
        * page/inspector/StylesSidebarPane.js:
        (WebInspector.StylePropertyTreeElement.prototype.toggleEnabled):
        Dispatch the "style property toggled" event.
        (WebInspector.StylePropertyTreeElement.prototype.editingCancelled):
        Dispatch the "style edited" event when the CSS text is restored.
        (WebInspector.StylePropertyTreeElement.prototype.applyStyleText):
        Dispatch the "style edited" event.

2008-08-21  Timothy Hatcher  <timothy@apple.com>

        Make the Inspector's Metrics sidebar pane editable.

        https://bugs.webkit.org/show_bug.cgi?id=17218
        rdar://problem/5732818

        Reviewed by Kevin McCullough.

        * page/inspector/ElementsPanel.js:
        (WebInspector.ElementsPanel): Add an event listener for
        the "metrics edited" event, so the Styles pane is updated.
        * page/inspector/MetricsSidebarPane.js:
        (WebInspector.MetricsSidebarPane.prototype.update): Remember the node
        so future updates work. Add a double click event listener for the
        metric values to start editing.
        (WebInspector.MetricsSidebarPane.prototype.startEditing):
        Call WebInspector.startEditing with some context.
        (WebInspector.MetricsSidebarPane.prototype.editingCancelled):
        (WebInspector.MetricsSidebarPane.prototype.editingCommitted):
        Set the user input on the elements inline style. Fire the
        "metrics edited" event.

2008-08-21  Steve Falkenburg  <sfalken@apple.com>

        Fix a race condition in Windows timer code.
        Timer function could end up being called with a 0 timer, leading to a Windows exception.

        Don't post a timer message if one is already pending.

        Reviewed by Ada Chan.

        * platform/win/SharedTimerWin.cpp:
        (WebCore::TimerWindowWndProc):
        (WebCore::clearTimer):
        (WebCore::queueTimerProc):
        (WebCore::setSharedTimerFireTime):

2008-08-21  Anthony Ricaud  <rik24d@gmail.com>

        After trying to add the expression, try again with quotes for
        easier edition.

        https://bugs.webkit.org/show_bug.cgi?id=20466

        Reviewed by Tim Hatcher.

        * page/inspector/ObjectPropertiesSection.js: Added an
        evaluateExpression function.

2008-08-21  Anthony Ricaud  <rik24d@gmail.com>

        Perform Inspector searches on search event to clear results when
        clicking the cross to empty it. Delete the lastQuery when the field
        is emptied in order to perform the search if exactly the same query
        is entered next.

        https://bugs.webkit.org/show_bug.cgi?id=20462

        Reviewed by Tim Hatcher.

        * page/inspector/inspector.js:

2008-08-21  Marco Barisione  <marco.barisione@collabora.co.uk>

        Reviewed by Mark Rowe.

        http://bugs.webkit.org/show_bug.cgi?id=19656
        [SOUP] The gio code should call didFail() instead of
        didFinishLoading() in case of error

        In case of error call didFail() instead of didReceiveResponse() and
        didFinishLoading().

        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::networkErrorForFile):
        (WebCore::readCallback):
        (WebCore::openCallback):
        (WebCore::queryInfoCallback):

2008-08-20  Mark Rowe  <mrowe@apple.com>

        Reviewed by Jon Honeycutt.

        Fix build failure.

        * bridge/c/c_instance.cpp:
        (KJS::Bindings::CInstance::getPropertyNames): Declare count as uint32_t rather than unsigned
        as that is what NPEnumerationFunctionPtr is declared as accepting.

2008-08-20  Mark Rowe  <mrowe@apple.com>

        Reviewed by Dan Bernstein.

        Build fix.  Handle kCGInterpolationMedium in switch statements if it is available.

        * platform/graphics/GraphicsContext.h:
        (WebCore::):
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::setImageInterpolationQuality):
        (WebCore::GraphicsContext::imageInterpolationQuality):

2008-08-20  Dan Bernstein  <mitz@apple.com>

        Rubber-stamped by John Sullivan.

        - rename shouldUpdateWhileHidden to shouldUpdateWhileOffscreen and
          rename related methods and variables accordingly.

        * WebCore.base.exp:
        * page/FrameView.cpp:
        (WebCore::FrameViewPrivate::FrameViewPrivate):
        (WebCore::FrameView::shouldUpdateWhileOffscreen):
        (WebCore::FrameView::setShouldUpdateWhileOffscreen):
        * page/FrameView.h:
        * platform/ScrollView.h:
        * platform/mac/ScrollViewMac.mm:
        (WebCore::ScrollView::updateContents):

2008-08-20  Brady Eidson  <beidson@apple.com>

        Reviewed by Mitzpettel

        <rdar://problem/6153432> - Many images broken in Mail

        This can be traced back to the preload scanner.  With that change, CachedResources are created a lot
        sooner than before and confuse the WebArchive machinery.

        When referencing WebArchive subresources directly through the WebKit API it is appropriate to ignore
        such CachedResources since they are placeholders and have not been submitted to the ResourceLoadDelegate
        machinery and nothing is known about where the data will eventually come from.

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::subresource):  Ignore a CachedResource if its preloadResult is
          CachedResource::PreloadReferenced.

2008-08-20  Holger Hans Peter Freyther  <zecke@selfish.org>

        Unreviewed compile fix

        Catch up with the JSValue::type elimination.

        * bridge/qt/qt_instance.cpp:
        (KJS::Bindings::QtRuntimeObjectImp::construct):
        (KJS::Bindings::QtInstance::defaultValue):
        * bridge/qt/qt_runtime.cpp:
        (KJS::Bindings::QtRuntimeConnectionMethod::call):

2008-08-20  Chris Teague  <chris.teague@gmail.com>

        Reviewed by Mark Rowe.

        Fix https://bugs.webkit.org/show_bug.cgi?id=20449
        Bug 20449: Build fails if LOW_BANDWIDTH_DISPLAY is defined

        * ChangeLog:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::switchOutLowBandwidthDisplayIfReady):

2008-08-20  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dave Hyatt

        getComputedStyle() for webkitTransform should return a transform
        that does not have the transform origin baked into it.
        https://bugs.webkit.org/show_bug.cgi?id=20464

        Test: fast/css/getComputedStyle-transform.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::computedTransform):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::applyTransform):
        * rendering/style/RenderStyle.h:

2008-08-20  Josh Aas  <joshmoz@gmail.com>

        Reviewed and landed by Anders.

        <rdar://problem/6163636>
        rename NPCocoaEvent's "event" struct to "data" (20446)

        * bridge/npapi.h:
        (_NPCocoaEvent::):

2008-08-20  Beth Dakin  <bdakin@apple.com>

        Reviewed by Darin Adler.

        Fix for <rdar://problem/6145626>
        This patch fixes a number of remaining problems getting
        disconnected frames to work correctly with markAllMatchesForText()
        and findString(). Details inline.

        This was a static helper function in Frame, but this patch requires
        the same functionality in Editor, so I just added it as a function
        on Node.
        * dom/Node.cpp:
        (WebCore::Node::isInShadowTree):
        * dom/Node.h:

        * editing/Editor.cpp:
        (WebCore::Editor::insideVisibleArea): Returns false if
        excludeFromTextSearch() is true.

        In a normal (non-disconnected) frame, findString returns a range of
        the document node if the text is not found in the frame. I changed
        firstVisibleRange and lastVisibleRange to match that behavior when
        the text is not found
        (WebCore::Editor::firstVisibleRange):
        (WebCore::Editor::lastVisibleRange):

        Here are the bulk of the changes in the patch. A lot of text was
        not being found in disconnected frames because I failed to account
        for all of the possible problems associated with shadow trees. That
        is fixed here.
        (WebCore::Editor::nextVisibleRange):
        * editing/Editor.h:

        excludeFromTextSearch() is new. It allows a WebKit client to mark a
        frame as not-text-searchable through SPI.
        * WebCore.base.exp:
        * page/Frame.cpp:
        (WebCore::Frame::excludeFromTextSearch):
        (WebCore::Frame::setExcludeFromTextSearch):
        (WebCore::FramePrivate::FramePrivate):
        * page/Frame.h:
        * page/FramePrivate.h:

        (WebCore::Frame::findString):
        (WebCore::Frame::markAllMatchesForText):  I kept running into an
        assertion failure in paining code because of the forced paint on
        empty visible rects.

2008-08-20  Timothy Hatcher  <timothy@apple.com>

        Adds a positon box to the Inspector's Metrics sidebar
        pane. When an element is not statically positioned, there
        is now a position box that show top, right, bottom and
        left computed values.

        Reviewed by Kevin McCullough.

        * English.lproj/localizedStrings.js: Updated the strings.
        * page/inspector/MetricsSidebarPane.js:
        (WebInspector.MetricsSidebarPane.prototype.update):
        Renamed the boxPartValue function to createBoxPartElement
        and made it create the entire element. Made it understand
        how to get position style properties. Don't use the figure dash
        when 0px is used for positions, since the 0 is meaningful there.
        Instead use the figure dash when a position is auto.
        * page/inspector/inspector.css: Added a new rule for position.

2008-08-20  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Beth Dakin

        Qt build fix

        * WebCore.pro:

2008-08-20  Dan Bernstein  <mitz@apple.com>

        Reviewed by Anders Carlsson.

        - avoid using a deprecated NSScroller method on Leopard

        * platform/mac/PlatformScrollBarMac.mm:
        (WebCore::PlatformScrollbar::updateThumbPosition):
        (WebCore::PlatformScrollbar::updateThumbProportion):

2008-08-20  Jan Michael Alonzo  <jmalonzo@webkit.org>

        Reviewed by Oliver Hunt.

        Gtk build fix

        * GNUmakefile.am:
        * page/AccessibilityTable.cpp: Change nil to 0
        (WebCore::AccessibilityTable::cellForColumnAndRow):

2008-08-19  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Geoff Garen.

        Bring back shared JSGlobalData and implicit locking, because too many clients rely on it.

        * ForwardingHeaders/kjs/JSLock.h: Added.
        * WebCore.vcproj/WebCore.vcproj:
        * bindings/js/GCController.cpp:
        (WebCore::collect):
        (WebCore::GCController::gcTimerFired):
        (WebCore::GCController::garbageCollectNow):
        * bindings/js/JSCustomSQLStatementCallback.cpp:
        (WebCore::JSCustomSQLStatementCallback::handleEvent):
        * bindings/js/JSCustomSQLStatementErrorCallback.cpp:
        (WebCore::JSCustomSQLStatementErrorCallback::handleEvent):
        * bindings/js/JSCustomSQLTransactionCallback.cpp:
        (WebCore::JSCustomSQLTransactionCallback::handleEvent):
        * bindings/js/JSCustomSQLTransactionErrorCallback.cpp:
        (WebCore::JSCustomSQLTransactionErrorCallback::handleEvent):
        * bindings/js/JSCustomVoidCallback.cpp:
        (WebCore::JSCustomVoidCallback::handleEvent):
        * bindings/js/JSCustomXPathNSResolver.cpp:
        (WebCore::JSCustomXPathNSResolver::lookupNamespaceURI):
        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::DOMWindowTimer::~DOMWindowTimer):
        (WebCore::JSDOMWindowBase::clear):
        (WebCore::JSDOMWindowBase::timerFired):
        * bindings/js/JSEventCustom.cpp:
        (WebCore::toJS):
        * bindings/js/JSEventListener.cpp:
        (WebCore::JSAbstractEventListener::handleEvent):
        * bindings/js/JSNSResolver.cpp:
        (WebCore::JSNSResolver::lookupNamespaceURI):
        * bindings/js/JSNodeFilterCondition.cpp:
        (WebCore::JSNodeFilterCondition::acceptNode):
        * bindings/js/ScheduledAction.cpp:
        (WebCore::ScheduledAction::execute):
        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::evaluate):
        (WebCore::ScriptController::clearWindowShell):
        (WebCore::ScriptController::createHTMLEventHandler):
        (WebCore::ScriptController::createSVGEventHandler):
        (WebCore::ScriptController::initScript):
        (WebCore::ScriptController::updateDocument):
        (WebCore::ScriptController::bindingRootObject):
        (WebCore::ScriptController::windowScriptNPObject):
        (WebCore::ScriptController::createScriptObjectForPluginElement):
        (WebCore::ScriptController::clearScriptObjects):
        * bindings/js/ScriptControllerMac.mm:
        (WebCore::ScriptController::windowScriptObject):
        * bindings/objc/WebScriptObject.mm:
        (_didExecute):
        (-[WebScriptObject callWebScriptMethod:withArguments:]):
        (-[WebScriptObject evaluateWebScript:]):
        (-[WebScriptObject setValue:forKey:]):
        (-[WebScriptObject valueForKey:]):
        (-[WebScriptObject removeWebScriptKey:]):
        (-[WebScriptObject stringRepresentation]):
        (-[WebScriptObject webScriptValueAtIndex:]):
        (-[WebScriptObject setWebScriptValueAtIndex:value:]):
        (+[WebScriptObject _convertValueToObjcValue:originRootObject:rootObject:]):
        * bridge/NP_jsobject.cpp:
        (_NPN_InvokeDefault):
        (_NPN_Invoke):
        (_NPN_Evaluate):
        (_NPN_GetProperty):
        (_NPN_SetProperty):
        (_NPN_RemoveProperty):
        (_NPN_HasProperty):
        (_NPN_HasMethod):
        (_NPN_Enumerate):
        * bridge/c/c_class.cpp:
        (KJS::Bindings::CClass::~CClass):
        (KJS::Bindings::CClass::methodsNamed):
        (KJS::Bindings::CClass::fieldNamed):
        * bridge/c/c_instance.cpp:
        (KJS::Bindings::CInstance::invokeMethod):
        (KJS::Bindings::CInstance::invokeDefaultMethod):
        (KJS::Bindings::CInstance::getPropertyNames):
        * bridge/c/c_runtime.cpp:
        (KJS::Bindings::CField::valueFromInstance):
        (KJS::Bindings::CField::setValueToInstance):
        * bridge/c/c_utility.cpp:
        (KJS::Bindings::convertValueToNPVariant):
        (KJS::Bindings::convertNPVariantToValue):
        * bridge/jni/jni_class.cpp:
        (JavaClass::JavaClass):
        (JavaClass::~JavaClass):
        * bridge/jni/jni_instance.cpp:
        (JavaInstance::stringValue):
        * bridge/jni/jni_jsobject.mm:
        (JavaJSObject::call):
        (JavaJSObject::eval):
        (JavaJSObject::getMember):
        (JavaJSObject::setMember):
        (JavaJSObject::removeMember):
        (JavaJSObject::getSlot):
        (JavaJSObject::setSlot):
        (JavaJSObject::toString):
        (JavaJSObject::convertValueToJObject):
        (JavaJSObject::convertJObjectToValue):
        * bridge/jni/jni_objc.mm:
        (KJS::Bindings::dispatchJNICall):
        * bridge/jni/jni_runtime.cpp:
        (appendClassName):
        (JavaMethod::signature):
        * bridge/jni/jni_runtime.h:
        (KJS::Bindings::JavaString::JavaString):
        (KJS::Bindings::JavaString::_commonInit):
        (KJS::Bindings::JavaString::~JavaString):
        (KJS::Bindings::JavaString::UTF8String):
        * bridge/jni/jni_utility.cpp:
        (KJS::Bindings::convertValueToJValue):
        * bridge/npruntime.cpp:
        (_NPN_GetStringIdentifier):
        * bridge/objc/objc_instance.mm:
        (ObjcInstance::moveGlobalExceptionToExecState):
        (ObjcInstance::invokeMethod):
        (ObjcInstance::invokeDefaultMethod):
        (ObjcInstance::setValueOfUndefinedField):
        (ObjcInstance::getValueOfUndefinedField):
        * bridge/objc/objc_runtime.mm:
        (ObjcField::valueFromInstance):
        (ObjcField::setValueToInstance):
        * bridge/objc/objc_utility.mm:
        (KJS::Bindings::convertValueToObjcValue):
        (KJS::Bindings::convertNSStringToString):
        (KJS::Bindings::convertObjcValueToValue):
        * bridge/qt/qt_instance.cpp:
        (KJS::Bindings::QtRuntimeObjectImp::removeFromCache):
        (KJS::Bindings::QtInstance::~QtInstance):
        (KJS::Bindings::QtInstance::getQtInstance):
        (KJS::Bindings::QtInstance::getRuntimeObject):
        * bridge/qt/qt_runtime.cpp:
        (KJS::Bindings::convertValueToQVariant):
        (KJS::Bindings::convertQVariantToValue):
        (KJS::Bindings::QtRuntimeMetaMethod::call):
        (KJS::Bindings::QtRuntimeConnectionMethod::call):
        (KJS::Bindings::QtConnectionObject::QtConnectionObject):
        (KJS::Bindings::QtConnectionObject::execute):
        * bridge/runtime.cpp:
        (KJS::Bindings::Instance::createRuntimeObject):
        * bridge/testbindings.cpp:
        (main):
        * bridge/testbindings.mm:
        (main):
        * bridge/testqtbindings.cpp:
        (main):
        * dom/Document.cpp:
        (WebCore::Document::~Document):
        * dom/Node.cpp:
        (WebCore::Node::setDocument):
        * history/CachedPage.cpp:
        (WebCore::CachedPage::CachedPage):
        (WebCore::CachedPage::restore):
        (WebCore::CachedPage::clear):
        * loader/FrameLoader.cpp:
        (WebCore::getString):
        * page/InspectorController.cpp:
        (WebCore::ConsoleMessage::ConsoleMessage):
        (WebCore::XMLHttpRequestResource::XMLHttpRequestResource):
        (WebCore::XMLHttpRequestResource::~XMLHttpRequestResource):
        (WebCore::getResourceDocumentNode):
        (WebCore::search):
        (WebCore::inspectedWindow):
        (WebCore::wrapCallback):
        (WebCore::currentCallFrame):
        (WebCore::profiles):
        (WebCore::InspectorController::focusNode):
        (WebCore::InspectorController::inspectedWindowScriptObjectCleared):
        (WebCore::InspectorController::addDatabaseScriptResource):
        (WebCore::InspectorController::addScriptProfile):
        * page/JavaScriptCallFrame.cpp:
        (WebCore::JavaScriptCallFrame::evaluate):
        * page/JavaScriptProfileNode.cpp:
        (WebCore::getTotalTime):
        (WebCore::getSelfTime):
        (WebCore::getTotalPercent):
        (WebCore::getSelfPercent):
        (WebCore::getNumberOfCalls):
        (WebCore::getChildren):
        (WebCore::getVisible):
        * page/Page.cpp:
        * page/mac/FrameMac.mm:
        * plugins/PluginView.cpp:
        (WebCore::PluginView::start):
        (WebCore::getString):
        (WebCore::PluginView::performRequest):
        (WebCore::PluginView::bindingInstance):
        * plugins/gtk/PluginViewGtk.cpp:
        (WebCore::PluginView::paint):
        (WebCore::PluginView::handleKeyboardEvent):
        (WebCore::PluginView::handleMouseEvent):
        (WebCore::PluginView::setNPWindowRect):
        (WebCore::PluginView::stop):
        (WebCore::PluginView::init):
        * plugins/qt/PluginViewQt.cpp:
        (WebCore::PluginView::setNPWindowRect):
        (WebCore::PluginView::stop):
        (WebCore::PluginView::init):
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginView::dispatchNPEvent):
        (WebCore::PluginView::handleKeyboardEvent):
        (WebCore::PluginView::handleMouseEvent):
        (WebCore::PluginView::setNPWindowRect):
        (WebCore::PluginView::stop):
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::clearResponse):
        (WebCore::XMLHttpRequest::didFinishLoading):
        (WebCore::XMLHttpRequest::didReceiveData):

2008-08-19  Eric Seidel  <eric@webkit.org>

        Reviewed by Geoff Garen.

        Add the beginnings of Skia graphics support to WebCore
        as I try to begin the long process of un-forking the changes
        needed to WebCore to make Andriod's WebCore build.

        I'll follow this up with actual *Skia.cpp files in a separate patch.

        * platform/graphics/AffineTransform.h:
        * platform/graphics/FloatPoint.h:
        * platform/graphics/FloatRect.h:
        * platform/graphics/Gradient.h:
        * platform/graphics/GraphicsContext.h:
        * platform/graphics/Image.h:
        * platform/graphics/ImageBuffer.h:
        * platform/graphics/ImageSource.h:
        * platform/graphics/IntPoint.h:
        * platform/graphics/IntRect.h:
        * platform/graphics/Path.h:
        * platform/graphics/Pattern.h:
        * svg/graphics/SVGPaintServerPattern.h:
        * svg/graphics/SVGPaintServerSolid.h:

2008-08-19  Steve Falkenburg  <sfalken@apple.com>

        Fix Windows build more.

        * WebCore.vcproj/WebCore.vcproj:

2008-08-19  Steve Falkenburg  <sfalken@apple.com>

        Fix Windows build.

        * page/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::canSetFocusAttribute):

2008-08-19  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Beth Dakin.

        <rdar://problem/4003764> Expose tables as AXTables

        Tests: accessibility/table-attributes.html
               accessibility/table-cell-spans.html
               accessibility/table-cells.html
               accessibility/table-detection.html
               accessibility/table-sections.html
               accessibility/table-with-rules.html

        * WebCore.xcodeproj/project.pbxproj:
        * page/AXObjectCache.cpp:
        (WebCore::AXObjectCache::get):
        * page/AccessibilityObject.h:
        (WebCore::):
        (WebCore::AccessibilityObject::isDataTable):
        (WebCore::AccessibilityObject::isTableRow):
        (WebCore::AccessibilityObject::isTableColumn):
        (WebCore::AccessibilityObject::isTableCell):
        * page/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::canSetFocusAttribute):
        * page/AccessibilityTable.cpp: Added.
        (WebCore::AccessibilityTable::AccessibilityTable):
        (WebCore::AccessibilityTable::~AccessibilityTable):
        (WebCore::AccessibilityTable::create):
        (WebCore::AccessibilityTable::isTableExposableThroughAccessibility):
        (WebCore::AccessibilityTable::clearChildren):
        (WebCore::AccessibilityTable::addChildren):
        (WebCore::AccessibilityTable::headerContainer):
        (WebCore::AccessibilityTable::columns):
        (WebCore::AccessibilityTable::rows):
        (WebCore::AccessibilityTable::rowHeaders):
        (WebCore::AccessibilityTable::columnHeaders):
        (WebCore::AccessibilityTable::cells):
        (WebCore::AccessibilityTable::columnCount):
        (WebCore::AccessibilityTable::rowCount):
        (WebCore::AccessibilityTable::cellForColumnAndRow):
        (WebCore::AccessibilityTable::roleValue):
        (WebCore::AccessibilityTable::accessibilityIsIgnored):
        (WebCore::AccessibilityTable::title):
        (WebCore::AccessibilityTable::isDataTable):
        * page/AccessibilityTable.h: Added.
        * page/AccessibilityTableCell.cpp: Added.
        (WebCore::AccessibilityTableCell::AccessibilityTableCell):
        (WebCore::AccessibilityTableCell::~AccessibilityTableCell):
        (WebCore::AccessibilityTableCell::create):
        (WebCore::AccessibilityTableCell::accessibilityIsIgnored):
        (WebCore::AccessibilityTableCell::rowIndexRange):
        (WebCore::AccessibilityTableCell::columnIndexRange):
        * page/AccessibilityTableCell.h: Added.
        (WebCore::AccessibilityTableCell::isTableCell):
        (WebCore::AccessibilityTableCell::roleValue):
        * page/AccessibilityTableColumn.cpp: Added.
        (WebCore::AccessibilityTableColumn::AccessibilityTableColumn):
        (WebCore::AccessibilityTableColumn::~AccessibilityTableColumn):
        (WebCore::AccessibilityTableColumn::create):
        (WebCore::AccessibilityTableColumn::setParentTable):
        (WebCore::AccessibilityTableColumn::elementRect):
        (WebCore::AccessibilityTableColumn::size):
        (WebCore::AccessibilityTableColumn::children):
        (WebCore::AccessibilityTableColumn::headerObject):
        (WebCore::AccessibilityTableColumn::headerObjectForSection):
        (WebCore::AccessibilityTableColumn::addChildren):
        * page/AccessibilityTableColumn.h: Added.
        (WebCore::AccessibilityTableColumn::parentObject):
        (WebCore::AccessibilityTableColumn::roleValue):
        (WebCore::AccessibilityTableColumn::accessibilityIsIgnored):
        (WebCore::AccessibilityTableColumn::isTableColumn):
        (WebCore::AccessibilityTableColumn::setColumnIndex):
        (WebCore::AccessibilityTableColumn::columnIndex):
        * page/AccessibilityTableHeaderContainer.cpp: Added.
        (WebCore::AccessibilityTableHeaderContainer::AccessibilityTableHeaderContainer):
        (WebCore::AccessibilityTableHeaderContainer::~AccessibilityTableHeaderContainer):
        (WebCore::AccessibilityTableHeaderContainer::create):
        (WebCore::AccessibilityTableHeaderContainer::children):
        (WebCore::AccessibilityTableHeaderContainer::elementRect):
        (WebCore::AccessibilityTableHeaderContainer::size):
        (WebCore::AccessibilityTableHeaderContainer::addChildren):
        * page/AccessibilityTableHeaderContainer.h: Added.
        (WebCore::AccessibilityTableHeaderContainer::roleValue):
        (WebCore::AccessibilityTableHeaderContainer::setParentTable):
        (WebCore::AccessibilityTableHeaderContainer::parentObject):
        (WebCore::AccessibilityTableHeaderContainer::accessibilityIsIgnored):
        * page/AccessibilityTableRow.cpp: Added.
        (WebCore::AccessibilityTableRow::AccessibilityTableRow):
        (WebCore::AccessibilityTableRow::~AccessibilityTableRow):
        (WebCore::AccessibilityTableRow::create):
        (WebCore::AccessibilityTableRow::accessibilityIsIgnored):
        (WebCore::AccessibilityTableRow::headerObject):
        * page/AccessibilityTableRow.h: Added.
        (WebCore::AccessibilityTableRow::isTableRow):
        (WebCore::AccessibilityTableRow::roleValue):
        (WebCore::AccessibilityTableRow::setRowIndex):
        (WebCore::AccessibilityTableRow::rowIndex):
        * page/mac/AccessibilityObjectWrapper.mm:
        (-[AccessibilityObjectWrapper accessibilityAttributeNames]):
        (RoleEntry::):
        (-[AccessibilityObjectWrapper roleDescription]):
        (-[AccessibilityObjectWrapper accessibilityAttributeValue:]):
        (-[AccessibilityObjectWrapper accessibilityParameterizedAttributeNames]):
        (-[AccessibilityObjectWrapper accessibilityAttributeValue:forParameter:]):

2008-08-19  Steve Falkenburg  <sfalken@apple.com>

        Build fix.
        Add buildfailed support to stop builds early (preventing inaccurate error messages).
        Add missing post-build rule to Release.

        * WebCore.vcproj/QTMovieWin.vcproj:

2008-08-19  Keishi Hattori  <casey.hattori@gmail.com>

        Added support for console.count in the inspector.

        Reviewed by Geoff Garen.

        * page/Console.cpp:
        (WebCore::Console::count):
        * page/Console.h:
        * page/Console.idl: Added console.count.
        * page/InspectorController.cpp:
        (WebCore::InspectorController::didCommitLoad): Clears m_counts.
        (WebCore::InspectorController::count): Updates the count number
        sing "title@source:line" as the identifier, and adds a
        message to the console.
        * page/InspectorController.h: Added m_counts.

2008-08-19  Keishi Hattori  <casey.hattori@gmail.com>

        Clear console.time timers when changing page.

        Reviewed by Geoff Garen.

        * page/InspectorController.cpp:
        (WebCore::InspectorController::didCommitLoad):

2008-08-19  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Adele.

        Fix for <rdar://problem/6154695> Full-page movies flicker while playing
        https://bugs.webkit.org/show_bug.cgi?id=20404

        Ignore setVisible() when visibility doesn't change.

        * platform/graphics/mac/MediaPlayerPrivateQTKit.h:
        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivate::MediaPlayerPrivate):
        (WebCore::MediaPlayerPrivate::setVisible):

2008-08-19  Timothy Hatcher  <timothy@apple.com>

        Fixes a bug in the Profile view where switching sort order, then
        switching from heavy to tree mode would show the tree in the
        previous sort order.

        https://bugs.webkit.org/show_bug.cgi?id=20441

        Reviewed by Kevin McCullough.

        * page/inspector/ProfileView.js:
        (WebInspector.ProfileView.prototype._changeView): Call _sortProfile
        on the next profile before assigning it to this.profile.
        (WebInspector.ProfileView.prototype._sortData): Call _sortProfile.
        (WebInspector.ProfileView.prototype._sortProfile): Moves from
        _sortData and takes a profile argument. If the profile passed in
        matches the this.profile, then call refresh.

2008-08-18  Timothy Hatcher  <timothy@apple.com>

        Changed the default sort order now that heavy view is the default.
        Also fixes a bug where the heavy profile was not sorted at first.

        https://bugs.webkit.org/show_bug.cgi?id=20440

        Reviewed by Kevin McCullough.

        * page/inspector/ProfileView.js:
        (WebInspector.ProfileView): Changed the default sort column. Also assign
        heavyProfile to profile, so the sortSelfTimeDescending call happens
        on the heavy profile before assigning to this.profile.

2008-08-18  Timothy Hatcher  <timothy@apple.com>

        Add support for editing DOM properties and scope variables by double
        clicking a property to enter edit mode.

        https://bugs.webkit.org/show_bug.cgi?id=20415

        Reviewed by Kevin McCullough.

        * page/inspector/ObjectPropertiesSection.js:
        (WebInspector.ObjectPropertiesSection): Set editable to true by default.
        (WebInspector.ObjectPropertiesSection.prototype.onpopulate):
        Factored out code into update, and calls update.
        (WebInspector.ObjectPropertiesSection.prototype.update): Moved from onpopulate.
        Call removeChildren since this method can be called multiple times now.
        (WebInspector.ObjectPropertyTreeElement): Pass an empty title, the title
        gets made later in onattach.
        (WebInspector.ObjectPropertyTreeElement.prototype.onpopulate): Don't return early
        if shouldRefreshChildren is true. Call removeChildren since this method can be
        called multiple times now.
        (WebInspector.ObjectPropertyTreeElement.prototype.ondblclick): Call startEditing.
        (WebInspector.ObjectPropertyTreeElement.prototype.onattach): Call update.
        (WebInspector.ObjectPropertyTreeElement.prototype.update): Update the title for
        this element (code moved from the constructor.)
        (WebInspector.ObjectPropertyTreeElement.prototype.updateSiblings): Recreate all
        sibling property elements.
        (WebInspector.ObjectPropertyTreeElement.prototype.startEditing): Call
        WebInspector.startEditing after rememebring some context.
        (WebInspector.ObjectPropertyTreeElement.prototype.editingEnded): Reset the scrollLeft
        for the list element, since it might have scrolled during editing.
        (WebInspector.ObjectPropertyTreeElement.prototype.editingCancelled): Call editingEnded
        then restore the state from the context. Then call update to restore the title.
        (WebInspector.ObjectPropertyTreeElement.prototype.editingCommitted): Call editingCancelled
        if the user input and the previous input are the same. Call editingEnded, then call applyExpression
        to commit the user input.
        (WebInspector.ObjectPropertyTreeElement.prototype.applyExpression): Evaluates the input expression
        and stores the result on the object for the property name of this element. If the expression is
        empty, delete the property and remove the tree element.
        * page/inspector/ScopeChainSidebarPane.js:
        (WebInspector.ScopeChainSidebarPane.prototype.update): Set the editInSelectedCallFrameWhenPaused
        property on each ObjectPropertiesSection.
        (WebInspector.ScopeVariableTreeElement.prototype.onattach): Call ObjectPropertyTreeElement's onattach
        since it is now implemented.
        * page/inspector/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype.evaluateInSelectedCallFrame): Added an updateInterface argument
        that defaults to true if omitted. It specifies whether to call update on the scope chain.
        * page/inspector/inspector.css: New styles.
        * page/inspector/treeoutline.js:
        (TreeElement.prototype._attach): Fixed an exception that fired when handling the shouldRefreshChildren
        change. The nextSibling would exist but have a _listItemNode that didn't match the new parent.

2008-08-18  Timothy Hatcher  <timothy@apple.com>

        Surround the expression to be evaluated in parenthesis so the
        result of the eval is the result of the whole expression not
        the last potential sub-expression. So evaluating {x: 123}
        will show the Object not 123.

        https://bugs.webkit.org/show_bug.cgi?id=20428

        Reviewed by Kevin McCullough.

        * page/inspector/Console.js:
        (Console.prototype._evalInInspectedWindow): Add parenthesis
        around the expression. And add couple comments.

2008-08-19 Kevin McCullough <kmccullough@apple.com>

        Reviewed by Geoff.

        -Implement a page() function to extract a common code pattern.

        * WebCore.xcodeproj/project.pbxproj:
        * page/Console.cpp:
        (WebCore::Console::addMessage):
        (WebCore::Console::error):
        (WebCore::Console::info):
        (WebCore::Console::log):
        (WebCore::Console::dir):
        (WebCore::Console::assertCondition):
        (WebCore::Console::time):
        (WebCore::Console::timeEnd):
        (WebCore::Console::group):
        (WebCore::Console::groupEnd):
        (WebCore::Console::finishedProfiling):
        (WebCore::Console::warn):
        (WebCore::Console::framePage):
        * page/Console.h:

2008-08-12  Darin Adler  <darin@apple.com>

        Reviewed by Geoff.

        - eliminate JSValue::type()

        * bridge/c/c_instance.cpp:
        (KJS::Bindings::CInstance::defaultValue): Take PreferredPrimitiveType
        argument instead of JSType argument. Removed unneeded code to handle
        boolean, since that's never passed.
        * bridge/c/c_instance.h: Ditto.

        * bridge/c/c_utility.cpp:
        (KJS::Bindings::convertValueToNPVariant): Use JSValue::is functions
        instead of JSValue::type(). Removed unneeded code to handle
        "unspecified".

        * bridge/jni/jni_instance.cpp:
        (JavaInstance::defaultValue): Take PreferredPrimitiveType argument
        instead of JSType argument. Removed unneeded code to handle boolean.
        * bridge/jni/jni_instance.h: Ditto.

        * bridge/jni/jni_jsobject.mm:
        (JavaJSObject::convertValueToJObject): Use JSValue::is functions
        instead of JSValue::type().

        * bridge/objc/objc_instance.h: Take PreferredPrimitiveType argument
        instead of JSType argument. Removed unused argument.
        * bridge/objc/objc_instance.mm:
        (ObjcInstance::getValueOfUndefinedField): Removed unused argument.
        (ObjcInstance::defaultValue): Take PreferredPrimitiveType argument
        instead of JSType argument. Removed unneeded code to handle boolean
        and another dead code path for unknown types.

        * bridge/objc/objc_runtime.h: Take PreferredPrimitiveType argument
        instead of JSType argument. Removed override of type() that caused
        the fallback object to return "UndefinedType" when there is no
        invokeUndefinedMethodFromWebScript:withArguments: method defined.
        That didn't accomplish much, since most checks for undefined don't
        ever call type().
        * bridge/objc/objc_runtime.mm:
        (ObjcFallbackObjectImp::defaultValue): Ditto.

        * bridge/qt/qt_instance.cpp:
        (KJS::Bindings::QtInstance::defaultValue): Take PreferredPrimitiveType
        argument instead of JSType argument. Removed unneeded code to handle
        boolean.
        * bridge/qt/qt_instance.h: Ditto.

        * bridge/runtime.h:
        (KJS::Bindings::Instance::getValueOfUndefinedField): Removed
        unsed argument.
        * bridge/runtime_object.cpp:
        (RuntimeObjectImp::defaultValue): Take PreferredPrimitiveType
        argument instead of JSType argument.
        * bridge/runtime_object.h: Ditto.

2008-08-18  Maxime Britto  <britto@apple.com>

        Reviewed by Adele.

        <rdar://6157207> Mouse pointer does not change when new window is opened after pan-scrolling original window
        Related to the discussion from rdar://6102511 , we should disable every key event (except for the esc key which stops the panning).
        We shouldn't be able to create another window while we are in pan scrolling.
        Other browsers behaviors :
          FF3 : Most of the keys are disabled, there is no way to create another window while in panscroll mode
          IE7 : Keys are not disabled but stops immediately the panning.
        This patch matches FF3 behavior by disabling every key but the esc key.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::stopAutoscrollTimer): Change the cursor back to the regular arrow cursor when the pannning is stopped.
        (WebCore::EventHandler::keyEvent): When a key event is received while in panning or autoscroll we swallow the event early.

2008-08-18  Dan Bernstein  <mitz@apple.com>

        Reviewed by Dave Hyatt.

        - fix <rdar://problem/5862634> REGRESSION (3.1.1): In iChat, inline image not resizable past current size after another IM is received

        Test: fast/replaced/max-width-percent.html

        Added an includeMaxWidth boolean to RenderBox::calcReplaedWidth().
        When false, max-width is not factored into the
        calculation.
        Changed RenderReplaced and subclasses' calcPrefWidths() to call
        calcReplacedWidth(false) and then apply max-width only if it has a
        fixed, positive value.

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::calcReplacedWidth):
        * rendering/RenderBox.h:
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::calcReplacedWidth):
        (WebCore::RenderImage::calcPrefWidths):
        * rendering/RenderImage.h:
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::calcPrefWidths):
        * rendering/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::calcPrefWidths):
        * rendering/RenderVideo.cpp:
        (WebCore::RenderVideo::calcReplacedWidth):
        (WebCore::RenderVideo::calcPrefWidths):
        * rendering/RenderVideo.h:

2008-08-18  Daniel Macks  <dmacks@netspace.org>

        Reviewed by Mark Rowe.

        https://bugs.webkit.org/show_bug.cgi?id=20410
        More portable/self-documenting replacement for SIZE_MAX.

        * platform/network/curl/FormDataStreamCurl.cpp:
        (WebCore::FormDataStream::read):

2008-08-18  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dave Hyatt

        Need to make sure we have an Animation in the AnimationList
        before setting the initial value.
        https://bugs.webkit.org/show_bug.cgi?id=20408

        Test: fast/css/transition_shorthand_parsing.html

        * css/CSSStyleSelector.cpp:

2008-08-18  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Tim.

        <rdar://problem/6150593> JSProfiler: Empty profiles disappear when there
        is another profile.

        * page/inspector/ProfilesPanel.js:

2008-08-18  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Geoff.

        <rdar://problem/6150642> REGRESSION: Closing the Web Inspector clears
        all console messages

        * page/inspector/Console.js:

2008-08-18  Dirk Schulze  <vbs85@gmx.de>

        Reviewed by Eric Seidel.

        Fixed Canvas for Cairo. Stroke and fill colors didn't work after
        the canvas clean up.

        https://bugs.webkit.org/show_bug.cgi?id=20405

        * html/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::fill):
        (WebCore::CanvasRenderingContext2D::stroke):
        (WebCore::CanvasRenderingContext2D::fillRect):

2008-08-17  Timothy Hatcher  <timothy@apple.com>

        Complete in scope variables in the Console when paused.

        https://bugs.webkit.org/show_bug.cgi?id=19115

        Reviewed by Geoffrey Garen.

        * page/inspector/Console.js:
        (WebInspector.Console.prototype.completions): If the expressionString
        is null or empty and the debugger is paused, call variablesInScopeForSelectedCallFrame
        to get an object that declares all the in scope variables. That way
        "top level" expressions are completed.
        * page/inspector/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype.variablesInScopeForSelectedCallFrame):
        Return an object that has all the variables that are in scope for the
        selected call frame. The value of each property is just true.
        The return object is useful for quick lookups or auto completion.

2008-08-17  Cameron Zwarich  <cwzwarich@uwaterloo.ca>

        Not reviewed.

        Speculative Qt build fix.

        * bridge/qt/qt_runtime.cpp:
        (KJS::Bindings::convertValueToQVariant):
        (KJS::Bindings::QtRuntimeMethod::QtRuntimeMethod):

2008-08-17  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Cameron Zwarich.

        Updated project files to XCode 3.1.

        * manual-tests/NPN_Invoke/NPN_Invoke.xcodeproj/project.pbxproj:

2008-08-17  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Cameron Zwarich.

        Made room for a free word in JSCell.

        Changed JSDOMWindowBase to store its auxiliary data in a subclass of
        JSGlobalData, so the two could share a pointer.

        Added a bunch of ASSERTs, to help catch over-sized objects.

2008-08-15  Mark Rowe  <mrowe@apple.com>

        Reviewed by Dan Bernstein.

        Disable dead code stripping in debug builds.

        * Configurations/Base.xcconfig:
        * WebCore.xcodeproj/project.pbxproj:

2008-08-15  Mark Rowe  <mrowe@apple.com>

        Rubber-stamped by Geoff Garen.

        <rdar://problem/6139914> Please include a _debug version of JavaScriptCore framework

        * Configurations/Base.xcconfig: Factor out the debug-only settings so that they can shared
        between the Debug configuration and debug Production variant.
        * WebCore.xcodeproj/project.pbxproj: Enable the debug variant.

2008-08-15  Antti Koivisto  <antti@apple.com>

        Reviewed by Anders.

        Don't start preloading body resources before the head is complete. This prevents
        body preloads from slowing down initial display when there is limited amount
        of bandwidth available.

        Works by queuing up found body preloads to DocLoader and only issuing them
        after document has rendering.

        With bandwidth capped to 300kbit/s this speeds up cnn.com initial display by ~25% or 5s
        without affecting complete load time.

        * html/PreloadScanner.cpp:
        (WebCore::PreloadScanner::PreloadScanner):
        (WebCore::PreloadScanner::scanningBody):
        (WebCore::PreloadScanner::emitTag):
        (WebCore::PreloadScanner::emitCSSRule):
        * html/PreloadScanner.h:
        * loader/DocLoader.cpp:
        (WebCore::DocLoader::preload):
        (WebCore::DocLoader::checkForPendingPreloads):
        (WebCore::DocLoader::requestPreload):
        * loader/DocLoader.h:
        * loader/loader.cpp:
        (WebCore::Loader::Host::didFinishLoading):
        (WebCore::Loader::Host::didFail):

2008-08-15  Ada Chan  <adachan@apple.com>

        Use item's computed style if the render style is 0 before falling back to the <select>'s style.
        This way style set on an <hr> within a <select> will be honored.

        Reviewed by Dave Hyatt and Dan Bernstein.

        * rendering/RenderMenuList.cpp:
        (WebCore::RenderMenuList::itemStyle):

2008-08-15  Antti Koivisto  <antti@apple.com>

        Reviewed by Oliver.

        Some loader performance tweaks:
        - Make stylesheets highest priority instead of scripts. We block script execution on stylesheets.
          Especially if a stylesheet @imports other stylesheets it is important to get them to the front of the queue
          to not delay rendering.
        - Issue the first resource load for a host immediately even if the resource is low priority. TCP connection setup
          can take long time when latency is high so it is good to get started early.
        - When the document is fully parsed and stylesheets have been loaded there is no need to keep managing the
          load queues. Issue remaining loads to the network layer.

        * loader/loader.cpp:
        (WebCore::Loader::determinePriority):
        (WebCore::Loader::load):
        (WebCore::Loader::Host::servePendingRequests):
        * loader/loader.h:

2008-08-15  Timothy Hatcher  <timothy@apple.com>

        Detach the script debugger when the Web Inspector's window closes.
        This has always been the intended design, but never fully implemented.

        https://bugs.webkit.org/show_bug.cgi?id=20402

        Reviewed by Adam Roben.

        * page/InspectorController.cpp:
        (WebCore::InspectorController::setWindowVisible): Call stopDebugging()
        if the window is no longer visible.

2008-08-15  Håvard Wall  <hwall@trolltech.com>

        Reviewed by Simon.

        Fixes:    compile with QT_NO_CONTEXTMENU

        * platform/qt/PlatformMouseEventQt.cpp:
        (WebCore::PlatformMouseEvent::PlatformMouseEvent):
        * platform/qt/PlatformScrollBarQt.cpp:
        (WebCore::PlatformScrollbar::handleMouseMoveEvent):
        (WebCore::PlatformScrollbar::handleContextMenuEvent):

2008-08-15  Håvard Wall  <hwall@trolltech.com>

        Reviewed by Simon.

        Fixes: compile with QT_NO_WHEELEVENT

        * platform/qt/WheelEventQt.cpp:
        (WebCore::PlatformWheelEvent::PlatformWheelEvent):

2008-08-15  Keishi Hattori  <casey.hattori@gmail.com>

        Fixed Bug 20210: Console groups are incorrect when closing and reopening the Inspector

        https://bugs.webkit.org/show_bug.cgi?id=20210

        Reviewed by Tim Hatcher.

        * page/Console.cpp:
        (WebCore::Console::group):
        (WebCore::Console::groupEnd):
        * page/Console.h:
        (WebCore::): Removed GroupTitleMessageLevel. Added StartGroupMessaageLevel and EndGroupMessageLevel.
        * page/InspectorController.cpp:
        (WebCore::InspectorController::startGroup): Increments group level by
        one and adds console message with StartGroupMessaageLevel.
        (WebCore::InspectorController::endGroup): Decrements group level by one
        and adds console message with EndGroupMessaageLevel.
        * page/InspectorController.h:
        * page/inspector/Console.js:
        (WebInspector.Console.prototype.addMessage): Creates new ConsoleGroup
        if the message is StartGroupMessaageLevel.
        (WebInspector.ConsoleMessage.prototype.toMessageElement):
        (WebInspector.ConsoleGroup.prototype.addMessage):
        * page/inspector/inspector.js:

2008-08-15  Keishi Hattori  <casey.hattori@gmail.com>

        Adds support for console.dir to the Inspector

        https://bugs.webkit.org/show_bug.cgi?id=19155

        Reviewed by Tim Hatcher.

        * bindings/js/JSConsoleCustom.cpp:
        (WebCore::JSConsole::dir):
        * page/Console.cpp:
        (WebCore::Console::dir):
        * page/Console.h: Added ObjectMessageLevel.
        * page/Console.idl: Added console.dir.
        * page/inspector/Console.js:
        (WebInspector.ConsoleMessage.prototypet.toMessageElement): Creates an
        ObjectPropertiesSection if the MessageLevel is Object.
        * page/inspector/ObjectPropertiesSection.js: "in" operator can't be
        used on primitive data types.
        * page/inspector/inspector.css:

2008-08-15  Keishi Hattori  <casey.hattori@gmail.com>

        Adds support for clear() in the Inspector console.

        https://bugs.webkit.org/show_bug.cgi?id=19873

        Reviewed by Tim Hatcher.

        * page/inspector/Console.js:

2008-08-15  Anthony Ricaud  <rik24d@gmail.com>

        Cmd-F on Mac or Ctrl-F on other platforms now focus the search field.

        Platform distinction and modifier key matching adjusted
        by Daniel Jalkut <jalkut@red-sweater.com>

        Bug 16313: text search (find) keybindings should work in the Web Inspector
        https://bugs.webkit.org/show_bug.cgi?id=16313

        Reviewed by Tim Hatcher.

        * page/inspector/inspector.js: Added a case for the F key

2008-08-15  Keishi Hattori  <casey.hattori@gmail.com>

        Fix for error when the string doesn't contain a webkit-profile link.

        https://bugs.webkit.org/show_bug.cgi?id=20399

        Reviewed by Tim Hatcher.

        * page/inspector/inspector.js:

2008-08-15  Timothy Hatcher  <timothy@apple.com>

        Fixes two bugs where JavaScript could be executed from the page
        while the debugger is paused.

        The first issue was JSLazyEventListener not checking the paused
        state before parsing the code.

        The second issue was with the PageGroup version of
        JavaScriptDebugServer::setJavaScriptPaused always passing false
        to the Page version of JavaScriptDebugServer::setJavaScriptPaused,
        and not the paused argument.

        https://bugs.webkit.org/show_bug.cgi?id=20284

        Reviewed by Adam Roben.

        * bindings/js/JSEventListener.cpp:
        (WebCore::JSLazyEventListener::parseCode): Check the paused
        state of the ScriptController. Return early if paused.
        * manual-tests/inspector/debugger-execution-while-paused.html: Added.
        * page/JavaScriptDebugServer.cpp:
        (WebCore::JavaScriptDebugServer::setJavaScriptPaused):
        Pass the paused argument to the Page version of setJavaScriptPaused.

2008-08-15  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Geoff Garen.

        JSStringRef is created context-free, but can get linked to one via an identifier table,
        breaking an implicit API contract.

        * page/InspectorController.cpp:
        (WebCore::jsStringRef):
        (WebCore::InspectorController::didParseSource):
        (WebCore::InspectorController::failedToParseSource):
        * page/JavaScriptProfile.cpp:
        (WebCore::getTitleCallback):
        Updated for JavaScriptCore changes.

2008-08-14  Kevin Ollivier  <kevino@theolliviers.com>

        wx !USE(WXGC) build fix. This is necessary until we find a way to replace GDI with
        an alternative that performs reasonably well. (GDI+ is too slow in many cases.)

        * platform/graphics/AffineTransform.h:

2008-08-14  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Adele.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=20388
        <video> elements on Windows never becomes visible when a page is restored from the cache

        Always pass "set" calls down to MediaPlayerPrivate instead of only when the
        value is different from the cached value. Let the implementation decide when
        to avoid work because nothing has changed.

        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::setVolume):
        (WebCore::MediaPlayer::setRate):
        (WebCore::MediaPlayer::setRect):
        (WebCore::MediaPlayer::setVisible):

2008-08-14  Keishi Hattori  <casey.hattori@gmail.com>

        Make Firebug command line API respect predefined variables.

        https://bugs.webkit.org/show_bug.cgi?id=20385

        Reviewed by Tim Hatcher.

        * page/inspector/Console.js:

2008-08-14  Sam Weinig  <sam@webkit.org>

        Reviewed by Geoffrey Garen and Timothy Hatcher.

        Allow programatically setting the HTMLTokenizers time delay and chunk size
        which are used for determining how aggressively we yield.

        * WebCore.base.exp:
        * html/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::begin):
        (WebCore::HTMLTokenizer::continueProcessing):
        * html/HTMLTokenizer.h:
        * page/Page.cpp:
        (WebCore::Page::Page):
        (WebCore::Page::setCustomHTMLTokenizerTimeDelay):
        (WebCore::Page::setCustomHTMLTokenizerChunkSize):
        * page/Page.h:
        (WebCore::Page::hasCustomHTMLTokenizerTimeDelay):
        (WebCore::Page::customHTMLTokenizerTimeDelay):
        (WebCore::Page::hasCustomHTMLTokenizerChunkSize):
        (WebCore::Page::customHTMLTokenizerChunkSize):

2008-08-14  Eric Seidel  <eric@webkit.org>

        Reviewed by Beth.

        Move us one step closer to cross-platform svg/graphics code

        * WebCore.xcodeproj/project.pbxproj:
        * html/CanvasStyle.cpp:
        * platform/graphics/Color.cpp:
        (WebCore::colorWithOverrideAlpha):
        * platform/graphics/Color.h:
        * svg/graphics/cg/CgSupport.cpp:
        (WebCore::applyStrokeStyleToContext):
        (WebCore::strokeBoundingBox):
        * svg/graphics/cg/SVGPaintServerSolidCg.cpp:
        (WebCore::SVGPaintServerSolid::setup):

2008-08-14  Eric Seidel  <eric@webkit.org>

        Reviewed by Alexey.

        Remove un-need includes from HTMLCanvas and use the
        Gradient platform abstraction in one place in CanvasStyle

        * html/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::fillRect):
        * html/CanvasStyle.cpp:
        * html/HTMLCanvasElement.cpp:

2008-08-14  Eric Seidel  <eric@webkit.org>

        Reviewed by Alexey.

        Clean up GlyphBuffer.h, removing more #ifdefs

        * platform/graphics/GlyphBuffer.h:
        (WebCore::GlyphBuffer::glyphAt):
        (WebCore::GlyphBuffer::advanceAt):
        (WebCore::GlyphBuffer::add):

2008-08-14  Eric Seidel  <eric@webkit.org>

        Reviewed by Sam.

        Clean up AffineTransform.h, removing #ifdefs

        * platform/graphics/AffineTransform.h:
        * platform/graphics/cairo/AffineTransformCairo.cpp:
        * platform/graphics/cg/AffineTransformCG.cpp:
        * platform/graphics/qt/AffineTransformQt.cpp:
        * platform/graphics/wx/AffineTransformWx.cpp:

2008-08-14  Dan Bernstein  <mitz@apple.com>

        - fix non-CG builds by adding an ImageSource::frameSizeAtIndex() that returns size().

        * platform/graphics/cairo/ImageSourceCairo.cpp:
        (WebCore::ImageSource::frameSizeAtIndex):
        * platform/graphics/qt/ImageSourceQt.cpp:
        (WebCore::ImageSource::frameSizeAtIndex):
        * platform/graphics/wx/ImageSourceWx.cpp:
        (WebCore::ImageSource::frameSizeAtIndex):

2008-08-14  Dan Bernstein  <mitz@apple.com>

        Reviewed by Brady Eidson.

        - fix <rdar://problem/5993323> REGRESSION (r34210): Apple.com favicon appears stretched/clipped

        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::BitmapImage): Added initialization of
        m_hasUniformFrameSize.
        (WebCore::BitmapImage::cacheFrame): Added code to get the size of the
        cached frame for use in decoded size computation and for setting
        m_hasUniformFrameSize.
        (WebCore::BitmapImage::currentFrameSize): Added.
        (WebCore::BitmapImage::dataChanged): Added code to reset
        m_hasUniformFrameSize.
        * platform/graphics/BitmapImage.h: Added currentFrameSize() and
        m_hasUniformFrameSize.
        * platform/graphics/ImageSource.h: Added frameSizeAtIndex().
        * platform/graphics/cg/ImageCG.cpp:
        (WebCore::BitmapImage::draw): Changed to use currentFrameSize(). This
        fixes the bug, which resulted from assuming that the frame being drawn
        was the same size as the first frame.
        * platform/graphics/cg/ImageSourceCG.cpp:
        (WebCore::ImageSource::frameSizeAtIndex): Renamed size() to this and
        changed to get the size of the frame at the given index.
        (WebCore::ImageSource::size): Added. Returns frameSizeAtIndex(0).

2008-08-13  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Eric Seidel

        Fix @font-face inside @media rule crash.
        https://bugs.webkit.org/show_bug.cgi?id=20367

        Test: fast/css/font-face-in-media-rule.html

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSRuleSet::addRulesFromSheet):

2008-08-14  Kevin Ollivier  <kevino@theolliviers.com>

        wx build fixes after recent changes to Canvas and Image classes.

        * platform/graphics/Pattern.h:
        * platform/graphics/wx/GradientWx.cpp:
        (WebCore::Gradient::fill):
        * platform/graphics/wx/GraphicsContextWx.cpp:
        (WebCore::GraphicsContext::applyFillPattern):
        (WebCore::GraphicsContext::applyStrokePattern):
        * platform/graphics/wx/ImageBufferWx.cpp:
        (WebCore::ImageBuffer::image):
        * platform/graphics/wx/ImageWx.cpp:
        (WebCore::Image::loadPlatformResource):

2008-08-14  Maxime Britto  <britto@apple.com>

        Reviewed by Sam Weinig.

        rdar://6102511
        When pan-scrolling, typing on the keyboard should either stop the pan scroll or be ignored
        IE and FF are both preventing the keyboard event to interact with the page while scrolling.
        Some differences exist between them concerning the kind of key which is pressed :
        IE7 : every key leads to a stop of the panning
        FF3 : the ESC and TAB keys leads to a stop, the other keys are inactive.
        For WebKit this patch is adopting the FF3 behavior except for the TAB key which is inactive too.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::keyEvent): Verifies which key has been hit and decide either to stop the pan scroll or to swallow the key event.

2008-08-14  Christian Dywan  <christian@twotoasts.de>

        Gtk+/ Cairo build fix, patch by Dirk Schulze.

        * html/CanvasStyle.cpp:
        * platform/graphics/cairo/PatternCairo.cpp:
        (WebCore::Pattern::createPlatformPattern):
        * svg/graphics/cairo/SVGResourceMaskerCairo.cpp:

2008-08-14  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Tim.

        <rdar://problem/6115819> Notify of profile in console

        * page/InspectorController.cpp:
        (WebCore::InspectorController::addProfile):
        (WebCore::InspectorController::addProfileMessageToConsole): Called by
        addProfile this is the function that adds a message to the console that
        a profile finished.
        * page/InspectorController.h:
        * page/JavaScriptProfile.cpp: Expose the profiler's unique ID to match
        the console log to the profile in the web inspector.
        (WebCore::getUniqueIdCallback):
        (WebCore::ProfileClass):
        * page/inspector/ProfilesPanel.js: Created a map of all the profiles by
        Id to bring up the requested profile.  Also select and reveal the
        profile in the profile panel.  And created displayTitleForProfileLink()
        which formats a title taking into account if it's user initiated or if
        there are multiples. Lasty, I put the user initiated profile in a
        variable.
        * page/inspector/inspector.js: Make the profile title be a clickable
        link that will take the user to the identified profile.  Also expose
        the count of user initiated profiles so they can be displayed in the
        console with the correct count.

2008-08-14  Timothy Hatcher  <timothy@apple.com>

        Avoid formating ConsoleMessages twice unless the message will be
        displayed in bubbles of a SourceFrame.

        Reviewed by Kevin McCullough.

        * page/inspector/Console.js:
        (WebInspector.ConsoleMessage): Only format the plain text message
        if the URL and line are valid and the level is error or warning.
        (WebInspector.ConsoleMessage.prototype.isErrorOrWarning): Added.
        Helper to test for error or warning level.
        * page/inspector/SourceFrame.js:
        (WebInspector.SourceFrame.prototype.addMessage): Don't add the
        message if there is no message or valid line or if the msg
        isn't an error or warning.

2008-08-14  Jan Michael Alonzo  <jmalonzo@webkit.org>

        partial Gtk build fix, not reviewed

        * platform/graphics/cairo/PatternCairo.cpp:

2008-08-13  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Fix style issue.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::pickMedia):

2008-08-13  Nikolas Zimmermann  <zimmermann@kde.org>

        Build fix for Cairo, not reviewed. (exposed by gtk build slave)
        Continue Erics build fixes, after the Image cleanup.

        * platform/graphics/cairo/ImageBufferCairo.cpp:
        (WebCore::ImageBuffer::image):

2008-08-13  Nikolas Zimmermann  <zimmermann@kde.org>

        Build fix for Qt, not reviewed.
        Don't declare eventuallyMarkAsParserCreated in a block wrapped by !USE_QXMLSTREAM.

        * dom/XMLTokenizer.cpp:
        (WebCore::eventuallyMarkAsParserCreated): Was erre

2008-08-13  Nikolas Zimmermann  <zimmermann@kde.org>

        Build fix, not reviewed.
        Add ScriptElement.cpp to Gtk build.

        * GNUmakefile.am:

2008-08-13  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Eric.

        Fixes: https://bugs.webkit.org/show_bug.cgi?id=20372

        Refactor HTMLScriptElement's code into a common base class: ScriptElement.
        SVGScriptElement will be converted to use ScriptElement in a follow-up patch.

        This resolves code duplications and allows us to completly replace the old
        SVGScriptElement (which doesn't use CachedScript, no dynamic injected scripts etc..)

        As ScriptElement, doesn't actually inherit from Element, we may want to rename
        it, though StyleElement uses the same naming convention, so I left it as is for now.
        Eventually we'll rename both files in future.

        No functional changes yet, as SVGScriptElement doesn't yet use the new base class.

        * WebCore.pro: Add new ScriptElement.cpp to build.
        * WebCore.vcproj/WebCore.vcproj: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * WebCoreSources.bkl: Dutto.
        * dom/ScriptElement.cpp: Added. 1:1 based on HTMLScriptElement
        (WebCore::ScriptElement::insertedIntoDocument):
        (WebCore::ScriptElement::removedFromDocument):
        (WebCore::ScriptElement::childrenChanged):
        (WebCore::ScriptElement::finishParsingChildren):
        (WebCore::ScriptElement::handleSourceAttribute):
        (WebCore::isSupportedJavaScriptLanguage):
        (WebCore::ScriptElementData::ScriptElementData):
        (WebCore::ScriptElementData::~ScriptElementData):
        (WebCore::ScriptElementData::requestScript):
        (WebCore::ScriptElementData::evaluateScript):
        (WebCore::ScriptElementData::stopLoadRequest):
        (WebCore::ScriptElementData::notifyFinished):
        (WebCore::ScriptElementData::ignoresLoadRequest):
        (WebCore::ScriptElementData::shouldExecuteAsJavaScript):
        (WebCore::ScriptElementData::scriptCharset):
        (WebCore::ScriptElementData::scriptContent):
        * dom/ScriptElement.h: Added.
        (WebCore::ScriptElement::ScriptElement):
        (WebCore::ScriptElement::~ScriptElement):
        (WebCore::ScriptElementData::element):
        (WebCore::ScriptElementData::createdByParser):
        (WebCore::ScriptElementData::setCreatedByParser):
        * dom/XMLTokenizer.cpp:
        (WebCore::isScriptElement):
        (WebCore::castToScriptElement):
        (WebCore::eventuallyMarkAsParserCreated):
        (WebCore::XMLTokenizer::startElementNs):
        (WebCore::XMLTokenizer::endElementNs):
        (WebCore::createXHTMLParserErrorHeader):
        (WebCore::XMLTokenizer::insertErrorMessageBlock):
        * html/HTMLScriptElement.cpp: Refactored code, pushed most code down to ScriptElement.
        (WebCore::HTMLScriptElement::HTMLScriptElement):
        (WebCore::HTMLScriptElement::~HTMLScriptElement):
        (WebCore::HTMLScriptElement::isURLAttribute):
        (WebCore::HTMLScriptElement::setCreatedByParser):
        (WebCore::HTMLScriptElement::shouldExecuteAsJavaScript):
        (WebCore::HTMLScriptElement::childrenChanged):
        (WebCore::HTMLScriptElement::parseMappedAttribute):
        (WebCore::HTMLScriptElement::finishParsingChildren):
        (WebCore::HTMLScriptElement::insertedIntoDocument):
        (WebCore::HTMLScriptElement::removedFromDocument):
        (WebCore::HTMLScriptElement::text):
        (WebCore::HTMLScriptElement::setText):
        (WebCore::HTMLScriptElement::setHtmlFor):
        (WebCore::HTMLScriptElement::setEvent):
        (WebCore::HTMLScriptElement::charset):
        (WebCore::HTMLScriptElement::src):
        (WebCore::HTMLScriptElement::type):
        (WebCore::HTMLScriptElement::scriptCharset):
        (WebCore::HTMLScriptElement::scriptContent):
        (WebCore::HTMLScriptElement::sourceAttributeValue):
        (WebCore::HTMLScriptElement::charsetAttributeValue):
        (WebCore::HTMLScriptElement::typeAttributeValue):
        (WebCore::HTMLScriptElement::languageAttributeValue):
        (WebCore::HTMLScriptElement::dispatchLoadEvent):
        (WebCore::HTMLScriptElement::dispatchErrorEvent):
        * html/HTMLScriptElement.h:
        * svg/SVGScriptElement.cpp: Inherit from ScriptElement, don't actually use it yet.
        * svg/SVGScriptElement.cpp:
        (WebCore::SVGScriptElement::SVGScriptElement):
        (WebCore::SVGScriptElement::scriptContent):
        (WebCore::SVGScriptElement::sourceAttributeValue):
        (WebCore::SVGScriptElement::charsetAttributeValue):
        (WebCore::SVGScriptElement::typeAttributeValue):
        (WebCore::SVGScriptElement::languageAttributeValue):
        (WebCore::SVGScriptElement::dispatchLoadEvent):
        (WebCore::SVGScriptElement::dispatchErrorEvent):
        * svg/SVGScriptElement.h:
        (WebCore::SVGScriptElement::setCreatedByParser):

2008-08-13  Eric Seidel  <eric@webkit.org>

        Attempt to fix the Gtk build, no review.

        I removed the bogus GraphicsContext::translatePoint() hack for Gtk in the process.

        * platform/graphics/GraphicsContext.h:
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        * platform/graphics/qt/GradientQt.cpp:
        * platform/graphics/qt/GraphicsContextQt.cpp:
        * platform/gtk/RenderThemeGtk.cpp:
        (WebCore::paintMozWidget):

2008-08-13  Eric Seidel  <eric@webkit.org>

        Yet another attempt to fix the Qt build, no review.

        * platform/graphics/qt/GradientQt.cpp:
        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::GraphicsContext::applyStrokePattern):
        (WebCore::GraphicsContext::applyFillPattern):

2008-08-13  Eric Seidel  <eric@webkit.org>

        Attempt to fix the Windows build, no review.

        * platform/win/CursorWin.cpp:
        (WebCore::loadCursorByName):
        * platform/win/ScrollViewWin.cpp:
        (WebCore::ScrollView::paint):

2008-08-13  Eric Seidel  <eric@webkit.org>

        Attempt to fix the Windows build, no review.

        * platform/win/CursorWin.cpp:
        (WebCore::loadCursorByName):
        * platform/win/ScrollViewWin.cpp:
        (WebCore::ScrollView::paint):

2008-08-13  Eric Seidel  <eric@webkit.org>

        Attempt to fix the Qt build, no review.

        * platform/graphics/qt/ImageBufferQt.cpp:
        (WebCore::ImageBuffer::image):

2008-08-13  Eric Seidel  <eric@webkit.org>

        Attempt to fix the Windows build, no review.

        * platform/graphics/win/ImageWin.cpp:
        (WebCore::Image::loadPlatformResource):
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginView::paintMissingPluginIcon):

2008-08-13  Eric Seidel  <eric@webkit.org>

        Another attempt to fix the Qt build, no review.

        * platform/graphics/qt/ImageQt.cpp:
        * platform/graphics/qt/StillImageQt.h:

2008-08-13  Eric Seidel  <eric@webkit.org>

        No review, build fix only.

        Fix mac build, due to change in new code since my patch was written.

        * svg/graphics/cg/SVGResourceMaskerCg.mm:
        (WebCore::SVGResourceMasker::applyMask):

2008-08-13  Eric Seidel  <eric@webkit.org>

        Build fix only, no review.

        Attempt to fix the Qt build.

        * platform/graphics/qt/ImageBufferQt.cpp:
        * platform/graphics/qt/StillImageQt.h:
        (WebCore::StillImage::create):
        (WebCore::StillImage::destroyDecodedData):
        (WebCore::StillImage::decodedSize):

2008-08-13  Eric Seidel  <eric@webkit.org>

        Build fix only, no review.

        Attempt to fix the Qt build.

        * html/CanvasStyle.cpp:
        (WebCore::CanvasStyle::applyStrokeColor):
        (WebCore::CanvasStyle::applyFillColor):

2008-08-13  Eric Seidel  <eric@webkit.org>

        Reviewed by Sam.

        Match HTML5 spec by throwing INVALID_STATE_ERR when
        createPattern is called and the HTMLImageElement is not
        yet done loading the image (!isComplete)
        https://bugs.webkit.org/show_bug.cgi?id=20351

        Test: http/misc/canvas-pattern-from-incremental-image.html

        * html/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::createPattern):

2008-08-13  Eric Seidel  <eric@webkit.org>

        Reviewed by Niko.

        Split out a Pattern class from CanvasPattern
        and remove all the Pattern-related #ifdefs
        (This will break non-mac platforms!  I will fix them.)
        https://bugs.webkit.org/show_bug.cgi?id=20351

        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * html/CanvasPattern.cpp:
        (WebCore::CanvasPattern::parseRepetitionType):
        (WebCore::CanvasPattern::CanvasPattern):
        * html/CanvasPattern.h:
        (WebCore::CanvasPattern::create):
        (WebCore::CanvasPattern::pattern):
        (WebCore::CanvasPattern::originClean):
        * html/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::createPattern):
        (WebCore::CanvasRenderingContext2D::applyStrokePattern):
        (WebCore::CanvasRenderingContext2D::applyFillPattern):
        * html/CanvasRenderingContext2D.h:
        * html/HTMLCanvasElement.cpp:
        * html/HTMLCanvasElement.h:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::createHistoryItem):
        * platform/graphics/GraphicsContext.h:
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::applyStrokePattern):
        (WebCore::GraphicsContext::applyFillPattern):
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::clipToImageBuffer):
        (WebCore::GraphicsContext::applyStrokePattern):
        (WebCore::GraphicsContext::applyFillPattern):

2008-08-13  Eric Seidel  <eric@webkit.org>

        Reviewed by Niko.

        Make Images RefCounted (and clean up callers)
        https://bugs.webkit.org/show_bug.cgi?id=20351

        * editing/DeleteButtonController.cpp:
        (WebCore::DeleteButtonController::createDeletionUI):
        * loader/CachedImage.cpp:
        (WebCore::CachedImage::CachedImage):
        (WebCore::brokenImage):
        (WebCore::nullImage):
        (WebCore::CachedImage::image):
        (WebCore::CachedImage::notifyObservers):
        (WebCore::CachedImage::createImage):
        * loader/CachedImage.h:
        * loader/icon/IconRecord.cpp:
        (WebCore::IconRecord::setImageData):
        (WebCore::IconRecord::loadImageFromResource):
        * loader/icon/IconRecord.h:
        * platform/graphics/BitmapImage.h:
        (WebCore::BitmapImage::create):
        * platform/graphics/GeneratedImage.h:
        * platform/graphics/Gradient.cpp:
        * platform/graphics/Gradient.h:
        * platform/graphics/Image.cpp:
        (WebCore::Image::nullImage):
        * platform/graphics/Image.h:
        * platform/graphics/ImageBuffer.h:
        * platform/graphics/cairo/ImageBufferCairo.cpp:
        (WebCore::ImageBuffer::image):
        * platform/graphics/cg/ImageBufferCG.cpp:
        (WebCore::ImageBuffer::image):
        (WebCore::ImageBuffer::getImageData):
        (WebCore::ImageBuffer::putImageData):
        * platform/graphics/cg/PDFDocumentImage.h:
        (WebCore::PDFDocumentImage::create):
        (WebCore::PDFDocumentImage::destroyDecodedData):
        (WebCore::PDFDocumentImage::decodedSize):
        * platform/graphics/gtk/ImageGtk.cpp:
        (WebCore::Image::loadPlatformResource):
        * platform/graphics/mac/ImageMac.mm:
        (WebCore::Image::loadPlatformResource):
        * rendering/RenderImage.cpp:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paintOverflowControls):
        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::nativeImageForCurrentFrame):
        * svg/graphics/SVGImage.h:
        (WebCore::SVGImage::create):
        (WebCore::SVGImage::destroyDecodedData):
        (WebCore::SVGImage::decodedSize):
        (WebCore::SVGImage::frameAtIndex):
        * svg/graphics/cairo/SVGPaintServerPatternCairo.cpp:
        (WebCore::SVGPaintServerPattern::setup):
        * svg/graphics/cairo/SVGResourceMaskerCairo.cpp:
        (WebCore::SVGResourceMasker::applyMask):
        * svg/graphics/cg/SVGPaintServerPatternCg.cpp:
        (WebCore::patternCallback):
        * svg/graphics/cg/SVGResourceMaskerCg.mm:
        (WebCore::SVGResourceMasker::applyMask):

2008-08-13  Eric Seidel  <eric@webkit.org>

        Reviewed by Niko.

        Remove #ifdefs from CanvasStyle by using platform/Color.h
        https://bugs.webkit.org/show_bug.cgi?id=20351

        There are some down-sides to this commit.
        This commit limits us to 255 levels of grey for calls like:
        context.setStrokeStyle(.37, 1.0)
        previously CG might have used up to 32bits to store the grey level
        Since setStrokeStyle is not part of HTML5, I don't suspect the web will notice.

        Likewise, setStrokeStyle/setFillStyle calls which used float colors are now limited
        to RGBA32 (like all the rest of colors in WebCore), thus:
        context.setStrokStyle(.37, .24, .456, .99) will now have the same precision as:
        context.strokeStyle = "rgba(.37, .24, .456, .99)", which is to say RGBA32

        If this is a problem for Dashboard, we can either roll out this commit
        or add a beefier Color abstraction, which can be used internally by GraphicsContext
        when keeping state, and then GraphicsContext can grow some additional set* routines
        for setting the a grey/float/whatever fill and stroke.

        * html/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::setFillStyle):
        * html/CanvasStyle.cpp:
        (WebCore::CanvasStyle::CanvasStyle):
        (WebCore::colorWithOverrideAlpha):
        (WebCore::CanvasStyle::applyStrokeColor):
        (WebCore::CanvasStyle::applyFillColor):
        * html/CanvasStyle.h:
        * platform/graphics/Color.cpp:
        (WebCore::colorFloatToRGBAByte):
        (WebCore::makeRGBA32FromFloats):
        * platform/graphics/Color.h:

2008-08-13  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Adele Peterson.

        Fix for <rdar://problem/6137931>
        https://bugs.webkit.org/show_bug.cgi?id=20360
        Remove all parameters from the MIME type before checking with the MIME type registry

        Tests: media/video-source-type-params.html

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::pickMedia): only pass the portion before the first ';'
        to isSupportedMediaMIMEType()

2008-08-13  Beth Dakin  <bdakin@apple.com>

        Reviewed by Sam Weinig.

        Fix for <rdar://problem/6141345>

        This patch refines findString and markAllMatchesForText functions'
        interactions with disconnected frames. They no longer rely on
        knowing where a range is relative to the visible region and work
        with disconnected frames that contain frames.

        * editing/Editor.cpp:
        (WebCore::Editor::insideVisibleArea): Now returns a bool instead of
        the visiblity enum.
        (WebCore::Editor::firstVisibleRange): This now returns the very
        first visible range in the document. It's no longer dependent on
        searching forward.
        (WebCore::Editor::lastVisibleRange): This now returns the very last
        visible range in the document. It's no longer dependent on
        searching backwards.
        (WebCore::Editor::nextVisibleRange): This returns the next visible
        range in the appropriate direction from the current range.
        * editing/Editor.h:
        * page/Frame.cpp:
        (WebCore::Frame::findString):
        (WebCore::Frame::markAllMatchesForText):

2008-08-13  Kevin Ollivier  <kevino@theolliviers.com>

        wx build fix for case-sensitive platforms, like Linux.

        * WebCoreSources.bkl:

2008-08-13  Marco Barisione  <marco.barisione@collabora.co.uk>

        Reviewed by Holger Freyther.

        http://bugs.webkit.org/show_bug.cgi?id=16881
        [GTK] PlatformScreenGtk is unimplemented

        Original patch by Christian Dywan.

        * platform/gtk/PlatformScreenGtk.cpp:
        (WebCore::screenDepth):
        (WebCore::screenDepthPerComponent):
        (WebCore::screenIsMonochrome):
        (WebCore::screenRect):
        (WebCore::screenAvailableRect):

2008-08-13  Jan Michael Alonzo  <jmalonzo@webkit.org>

        Reviewed by Holger Freyther.

        http://bugs.webkit.org/show_bug.cgi?id=20318
        SharedTimerGtk should use G_PRIORITY_DEFAULT_IDLE for g_idle_add

        g_idle_add is the same as g_idle_add_full with a priority of
        G_PRIORITY_DEFAULT_IDLE, so we can safely use that.

        * platform/gtk/SharedTimerGtk.cpp:
        (WebCore::setSharedTimerFireTime):

2008-08-13  Timothy Hatcher  <timothy@apple.com>

        Changed the InspectorController so it can be notified when the
        attached state of the Inspector changes in WebKit.

        Reviewed by Kevin McCullough.

        * WebCore.base.exp: Updated the symbol for setWindowVisible.
        * page/InspectorController.cpp:
        (WebCore::InspectorController::setWindowVisible): Added an attached argument,
        that defaults to false.Call setAttachedWindow with the attached argument.
        (WebCore::InspectorController::setAttachedWindow): Call the script version
        of setAttachedWindow.
        * page/InspectorController.h:
        * page/inspector/inspector.js:
        (WebInspector.setAttachedWindow): Set the attached property.

2008-08-12  Timothy Hatcher  <timothy@apple.com>

        Added a close button to the Inspector's toolbar when docked.

        https://bugs.webkit.org/show_bug.cgi?id=14270

        Reviewed by Kevin McCullough.

        * page/InspectorController.cpp:
        (WebCore::closeWindow): Call InspectorController::closeWindow.
        (WebCore::InspectorController::windowScriptObjectAvailable):
        Added closeWindow to the script class.
        * page/InspectorController.h:
        * page/inspector/Images/closeButtons.png: Added.
        * page/inspector/inspector.css: Added and changed styles.
        * page/inspector/inspector.html: Added the close button.
        * page/inspector/inspector.js:
        (WebInspector.loaded): Added click event listener to the close button.
        (WebInspector.close): Call InspectorController.closeWindow.

2008-08-12  Timothy Hatcher  <timothy@apple.com>

        Make the docked Web Inspector resizable. This is the cross platform
        portion of the code. Each InspectorClient needs to implement the
        real resize code.

        https://bugs.webkit.org/show_bug.cgi?id=14282

        Reviewed by Kevin McCullough.

        * loader/EmptyClients.h: Added an empty setAttachedWindowHeight.
        * page/InspectorClient.h: Added setAttachedWindowHeight.
        * page/InspectorController.cpp:
        (WebCore::setAttachedWindowHeight): Call setAttachedWindowHeight
        on the InspectorController.
        (WebCore::InspectorController::setAttachedWindowHeight): Call
        setAttachedWindowHeight on the client.
        (WebCore::InspectorController::windowScriptObjectAvailable):
        Added setAttachedWindowHeight to the script class.
        * page/InspectorController.h:
        * page/inspector/inspector.css: Make the cursor on the toolbar be
        row-resize when docked.
        * page/inspector/inspector.js:
        (WebInspector.loaded): Always add the toolbarDragStart event listener.
        (WebInspector.toolbarDragStart): Return early if we are not attached
        and not on Leopard. Call WebInspector.elementDragStart.
        (WebInspector.toolbarDragEnd): Call WebInspector.elementDragEnd.
        (WebInspector.toolbarDrag): When attached call setAttachedWindowHeight,
        otherwise call moveByUnrestricted.

2008-08-13  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Holger.

        Initialize m_zoomsTextOnly in the Settings constructor.

        * page/Settings.cpp:
        (WebCore::Settings::Settings):

2008-08-13  Brad Hughes <bhughes@trolltech.com>

        Reviewed by Simon.

        Fix compiling of QtWebKit in release mode with the Intel C++ Compiler for Linux

        The latest upgrade of the intel compiler allows us to compile all of
        Qt with optimizations enabled (yay!).

        * WebCore.pro:

2008-08-13  Prasanth Ullattil  <prasanth.ullattil@trolltech.com>

        Reviewed by Simon.

        Fix QtWebKit not displaying content on 403 HTTP responses

        Just like with 404 responses also display content with 403, as
        used by http://audiio.ejamming.proteus-tech.com/audiio/profile/original_signup/

        * platform/network/qt/QNetworkReplyHandler.cpp:
        (WebCore::QNetworkReplyHandler::finish):

2008-08-13  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Holger.

        Qt part of https://bugs.webkit.org/show_bug.cgi?id=18994

        Make the formatting of String::format() locale independent through the use of QString::vsprintf.

        * platform/text/String.cpp:
        (WebCore::String::format):

2008-08-13  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Lars.

        Fix QWebFrame::setHtml() not setting the new contents immediately.

        Added a setter to the DocumentLoader to toggle the deferred loading of the main
        resource when it comes from substitute data.

        Disable deferred loading of the main resource when we have valid substitute data,
        as used by QWebFrame::setHtml.

        * loader/DocumentLoader.h:

2008-08-13  Mark Rowe  <mrowe@apple.com>

        Speculative GTK build fix.

        * GNUmakefile.am:  Add dependency info for JSSVGElementWrapperFactory.cpp.

2008-08-13  Thiago Macieira  <tjmaciei@trolltech.com>

        Reviewed by Simon.

        Fix encoding of [ and ] in the host part of the URL

        Until QUrl is fixed (making QUrl's tolerant parser more tolerant), we have to
        add this workaround to the QUrl <> WebCore::KURL conversion operator so that it
        doesn't encode [ and ] when they are found in the host part. That is, the
        following URL:
        http://[::1]/
        is valid and should not be reencoded to:
        http://%5b::1%5d/

        * platform/qt/KURLQt.cpp:
        (WebCore::KURL::operator QUrl):

2008-08-12  Mihnea Ovidenie  <mihnea@adobe.com>

        Fix for https://bugs.webkit.org/show_bug.cgi?id=19891
        Broken HTML object elements cause de-reference of pointer to freed memory.
        If we fail to load an image for an object tag and we no longer believe the object tag points at
        an image, then clear m_imageLoader in the HTMLObjectElement so that we attempt to render the
        fall back content.

        Reviewed by Dave Hyatt and Alexey Proskuryakov.

        Test: http/tests/misc/object-image-error-with-onload.html

        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::renderFallbackContent):
        * page/Frame.cpp:
        (WebCore::Frame::Frame):

2008-08-12  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Dave.

        Fixes: https://bugs.webkit.org/show_bug.cgi?id=19798
        Masks are translated, and the mask images are swapped on the y-axis.

        Turned out that http://trac.webkit.org/changeset/31830/trunk/WebCore/svg/graphics/cg/SVGResourceMaskerCg.mm
        is guilty. GraphicsContext::clipToImageBuffer() does some extra transformations that SVGResourcesMaskerCg does not want.

        Long term goal is to remove the SVGResource*/SVGPaintServer* classes anyway, so it's okay to duplicate
        the "clip to image buffer" functionality, in the CG specific SVGResourceMaskerCg class - as it was before.

        * svg/graphics/cg/SVGResourceMaskerCg.mm:
        (WebCore::SVGResourceMasker::applyMask): Changed back to use CG clipping again.

2008-08-12  Dan Bernstein  <mitz@apple.com>

        - WebCore part of <rdar://problem/6121636>
          Make fast*alloc() abort() on failure and add "try" variants that
          return NULL on failure.

        Reviewed by Darin Adler.

        * platform/Arena.cpp:
        (WebCore::ArenaAllocate): Removed null checking of fastMalloc()'s
        result.
        * platform/graphics/cg/ImageBufferCG.cpp:
        (WebCore::ImageBuffer::create): Changed to use tryFastCalloc().

2008-08-12  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        - fix https://bugs.webkit.org/show_bug.cgi?id=19348
          <rdar://problem/5978447> REGRESSION (r34193): Setting the size of a frame with javascript document.body.row no longer works

        Test: fast/frames/frameset-style-recalc.html

        * html/HTMLFrameSetElement.cpp:
        (WebCore::HTMLFrameSetElement::recalcStyle): Changed to call the base
        class implementation after marking for layout.

2008-08-12  Dan Bernstein  <mitz@apple.com>

        Reviewed by John Sullivan.

        - move shouldUpdateWhenOffscreen from Settings to FrameView and rename it shouldUpdateWhileHidden

        * WebCore.base.exp:
        * page/FrameView.cpp:
        (WebCore::FrameViewPrivate::FrameViewPrivate):
        (WebCore::FrameView::shouldUpdateWhileHidden):
        (WebCore::FrameView::setShouldUpdateWhileHidden):
        * page/FrameView.h:
        * page/Settings.cpp:
        * page/Settings.h:

2008-08-12  Adam Roben  <aroben@apple.com>

        Windows build fix

        * bindings/js/JSSVGPODTypeWrapper.h: Align
        JSSVGDynamicPODTypeWrapper's and JSSVGStaticPODTypeWrapperWithParent's
        members on 16-byte boundaries to avoid an alignment warning.

2008-08-12  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Oliver.

        Add new dynamice-update layout tests covering SVGMarkerElement.
        Fix bug: SVGMarkerElement's SVG DOM function calls don't update rendering.
        Fix orientAngle/orientType confusion: "auto" orient should always return "0" as angle.

        Tests: svg/dynamic-updates/SVGMarkerElement-dom-markerHeight-attr.html
               svg/dynamic-updates/SVGMarkerElement-dom-markerUnits-attr.html
               svg/dynamic-updates/SVGMarkerElement-dom-markerWidth-attr.html
               svg/dynamic-updates/SVGMarkerElement-dom-orient-attr.html
               svg/dynamic-updates/SVGMarkerElement-dom-refX-attr.html
               svg/dynamic-updates/SVGMarkerElement-dom-refY-attr.html
               svg/dynamic-updates/SVGMarkerElement-svgdom-markerHeight-prop.html
               svg/dynamic-updates/SVGMarkerElement-svgdom-markerUnits-prop.html
               svg/dynamic-updates/SVGMarkerElement-svgdom-markerWidth-prop.html
               svg/dynamic-updates/SVGMarkerElement-svgdom-orientAngle-prop.html
               svg/dynamic-updates/SVGMarkerElement-svgdom-orientType-prop.html
               svg/dynamic-updates/SVGMarkerElement-svgdom-refX-prop.html
               svg/dynamic-updates/SVGMarkerElement-svgdom-refY-prop.html
               svg/dynamic-updates/SVGMarkerElement-svgdom-setOrientToAngle-call.html
               svg/dynamic-updates/SVGMarkerElement-svgdom-setOrientToAuto-call.html

        * svg/SVGMarkerElement.cpp:
        (WebCore::SVGMarkerElement::SVGMarkerElement):
        (WebCore::SVGMarkerElement::parseMappedAttribute):
        (WebCore::SVGMarkerElement::svgAttributeChanged):
        (WebCore::SVGMarkerElement::childrenChanged):
        (WebCore::SVGMarkerElement::setOrientToAuto):
        (WebCore::SVGMarkerElement::setOrientToAngle):
        (WebCore::SVGMarkerElement::canvasResource):

2008-08-12  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Oliver.

        Add new dynamic-update layout tests covering SVGImageElement.
        Fix bug: SVGImageElement doesn't react on 'preserveAspectRatio' changes.

        Tests: svg/dynamic-updates/SVGImageElement-dom-height-attr.html
               svg/dynamic-updates/SVGImageElement-dom-preserveAspectRatio-attr.html
               svg/dynamic-updates/SVGImageElement-dom-width-attr.html
               svg/dynamic-updates/SVGImageElement-dom-x-attr.html
               svg/dynamic-updates/SVGImageElement-dom-y-attr.html
               svg/dynamic-updates/SVGImageElement-svgdom-height-prop.html
               svg/dynamic-updates/SVGImageElement-svgdom-preserveAspectRatio-prop.html
               svg/dynamic-updates/SVGImageElement-svgdom-width-prop.html
               svg/dynamic-updates/SVGImageElement-svgdom-x-prop.html
               svg/dynamic-updates/SVGImageElement-svgdom-y-prop.html

        * svg/SVGImageElement.cpp:
        (WebCore::SVGImageElement::svgAttributeChanged):

2008-08-11  Anthony Ricaud  <rik24d@gmail.com>

        Changed Option/Alt-Up or Down in CSS editing when the value is
        near zero to jump to the next integer.

        Reviewed by Tim Hatcher.

        https://bugs.webkit.org/show_bug.cgi?id=20326

        * page/inspector/StylesSidebarPane.js:

2008-08-11  Anthony Ricaud  <rik24d@gmail.com>

        Changed the line highlight transition for an easier animation.

        Reviewed by Tim Hatcher.

        * page/inspector/SourceFrame.js:

2008-08-11  Keishi Hattori  <casey.hattori@gmail.com>

        Added support for some Firebug Command Line APIs.

        Reviewed by Tim Hatcher.

        https://bugs.webkit.org/show_bug.cgi?id=19867
        https://bugs.webkit.org/show_bug.cgi?id=19868
        https://bugs.webkit.org/show_bug.cgi?id=19869
        https://bugs.webkit.org/show_bug.cgi?id=19875
        https://bugs.webkit.org/show_bug.cgi?id=19876
        https://bugs.webkit.org/show_bug.cgi?id=19880

        * page/inspector/Console.js:
        (WebInspector.Console.prototype._evalInInspectedWindow):
        Create an object on the inspected window that holds the console
        command line API functions. This object is used in a with statement
        around the typed expression.

2008-08-11  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Antti.

        Fixes: http://bugs.webkit.org/show_bug.cgi?id=17736

        JS wrapper objects around SVG POD types, that contain other SVG POD types with writable properties
        failed to update. Modification of the values were completly ignored (ie. transform.matrix.a = 50, didn't take any effect)

        Added tests: svg/custom/svg-modify-currentTranslate.html
                     svg/custom/tearoffs-with-tearoffs.html
                     svg/custom/immutable-properties.html

        Fixed tests: svg/dynamic-updates/SVGLinearGradientElement-svgdom-gradientTransform-prop.html

        * bindings/js/JSSVGPODTypeWrapper.h:
        (WebCore::JSSVGDynamicPODTypeWrapper::commitChange):
        (WebCore::JSSVGStaticPODTypeWrapperWithPODTypeParent::create):
        (WebCore::JSSVGStaticPODTypeWrapperWithPODTypeParent::commitChange):
        (WebCore::JSSVGStaticPODTypeWrapperWithPODTypeParent::JSSVGStaticPODTypeWrapperWithPODTypeParent):
        (WebCore::JSSVGStaticPODTypeWrapperWithParent::create):
        (WebCore::JSSVGStaticPODTypeWrapperWithParent::operator PODType):
        (WebCore::JSSVGStaticPODTypeWrapperWithParent::commitChange):
        (WebCore::JSSVGStaticPODTypeWrapperWithParent::JSSVGStaticPODTypeWrapperWithParent):
        * bindings/scripts/CodeGenerator.pm:
        * bindings/scripts/CodeGeneratorJS.pm:
        * svg/SVGSVGElement.idl: Add [Immutable] markers to SVG POD attributes, that contain POD types with writable attributes.
        * svg/SVGZoomEvent.idl:  SVG specification explicitely demands these attributes to be readonly, even its content.

2008-08-11  Brady Eidson  <beidson@apple.com>

        Reviewed by John and Anders

        Fix for <rdar://problem/6141797>

        When WebArchives were entirely a WebKit concept, there was a guarantee that a WebResource
        would never have nil data.

        When they were pushed down into WebCore, that guarantee was lost, subtly changing a few
        semantics with some WebKit applications.

        The guarantee was a good one and should be restored.

        Note that ApplicationCacheResource doesn't need any updates to follow this rule as it already
        creates an empty data object in the case of null data for its own purposes.

        * loader/SubstituteResource.h:
        (WebCore::SubstituteResource::SubstituteResource): ASSERT that the data is not null.  This
          well help any future subclassers not make this mistake.

        * loader/archive/ArchiveResource.cpp:
        (WebCore::ArchiveResource::create): Return 0 if the data is null.

2008-08-11  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dave Hyatt

        https://bugs.webkit.org/show_bug.cgi?id=20328
        Fix a problem when an 'all' transition transition with more than
        one property changing is interrupted, and did some AnimationController
        cleanup.

        Test: transitions/interrupted-all-transition.html

        * page/AnimationController.cpp:
        (WebCore::ImplicitAnimation::ImplicitAnimation):
        (WebCore::AnimationControllerPrivate::blendProperties):
        (WebCore::CompositeAnimation::updateTransitions):
        (WebCore::CompositeAnimation::cleanupFinishedAnimations):
        (WebCore::CompositeAnimation::setTransitionStartTime):
        (WebCore::CompositeAnimation::overrideImplicitAnimations):
        (WebCore::CompositeAnimation::resumeOverriddenImplicitAnimations):
        (WebCore::ImplicitAnimation::animate):
        (WebCore::ImplicitAnimation::onAnimationEnd):
        (WebCore::ImplicitAnimation::sendTransitionEvent):
        (WebCore::ImplicitAnimation::affectsProperty):
        (WebCore::KeyframeAnimation::endAnimation):
        (WebCore::KeyframeAnimation::onAnimationEnd):

2008-08-11  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Tim.

        - Because console messages have group levels now, newly created messages
        that do not specify the level lose their message since the number of
        arguments is wrong.

        * page/inspector/Console.js:
        * page/inspector/Resource.js:

2008-08-11  Alp Toker  <alp@nuanti.com>

        Build fix. Add new files from r35666 (WebKitAnimationEvent). Also take
        the opportunity to sort the sources lists.

        * GNUmakefile.am:

2008-08-11  Timothy Hatcher  <timothy@apple.com>

        Speed up the the JavaScript syntax highlighter by generating
        the finders only once per script instead of per line.

        https://bugs.webkit.org/show_bug.cgi?id=20346

        Reviewed by Adam Roben.

        * page/inspector/SourceFrame.js:
        (WebInspector.SourceFrame.prototype._syntaxHighlightJavascriptLine):
        Removed, factored into syntaxHighlightJavascript as an inline function.
        (WebInspector.SourceFrame.prototype.syntaxHighlightJavascript):
        Pulled in the _syntaxHighlightJavascriptLine so it will create a closure.
        Generate the finders before iterating the lines.

2008-08-11  Adam Roben  <aroben@apple.com>

        Windows build fix

        * WebCore.vcproj/WebCore.vcproj: Added JSWebKitAnimationEvent.cpp and
        JSWebKitTransitionEvent.cpp to the project. Let VS reformat the file,
        too.

2008-08-11  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        - fix <rdar://problem/6131096> Reproducible crash in CounterNode::isReset under guard malloc

        Test: fast/css/counters/invalidate-cached-counter-node.html

        * rendering/RenderContainer.cpp:
        (WebCore::RenderContainer::invalidateCounters): Added. Invalidates all
        RenderCounters in :before and :after content.
        * rendering/RenderContainer.h:
        * rendering/RenderCounter.cpp:
        (WebCore::RenderCounter::isCounter): Renamed isRenderCounter() to this
        to match the RenderObject method.
        (WebCore::RenderCounter::invalidate): Added. Resets the cached
        CounterNode and invalidates the object's layout and preferred widths.
        (WebCore::destroyCounterNodeChildren): Added a call to
        invalidateCounters().
        * rendering/RenderCounter.h:
        * rendering/RenderObject.h:
        (WebCore::RenderObject::invalidateCounters):

2008-08-11  Dean Jackson  <dino@apple.com>

        Implement CSS Animation and Transition Events
        https://bugs.webkit.org/show_bug.cgi?id=20337

        Implement the events defined in the CSS Animations
        and Transitions specifications so code can react
        to animations and transitions.

        Reviewed by Tim Hatcher and Dave Hyatt.

        * DerivedSources.make:
        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
            Build configs for new files

        * bindings/js/JSDOMWindowBase.cpp:
        * bindings/js/JSDOMWindowBase.h:
        * bindings/js/JSEventCustom.cpp:
        * dom/Document.h:
        * dom/Event.cpp:
        * dom/Event.h:
        * dom/EventTarget.cpp:
        * dom/EventTargetNode.cpp:
        * dom/EventTargetNode.h:
        * html/HTMLElement.cpp:
        * page/AnimationController.cpp:
            do all the new event stuff

        * html/HTMLAttributeNames.in:
            the onwebkitanimation* and onwebkittransitionend attrs

        * dom/WebKitAnimationEvent.cpp: Added.
        * dom/WebKitAnimationEvent.h: Added.
        * dom/WebKitAnimationEvent.idl: Added.
        * dom/WebKitTransitionEvent.cpp: Added.
        * dom/WebKitTransitionEvent.h: Added.
        * dom/WebKitTransitionEvent.idl: Added.
            New files for the events

        * manual-tests/transition-events.html: Added.
            New testfile

2008-08-11  Adam Roben  <aroben@apple.com>

        Add a ForwardingHeader for wtf/NotFound.h

        Rubberstamped by Darin Adler.

        * ForwardingHeaders/wtf/NotFound.h: Added.

2008-08-11  Timothy Hatcher  <timothy@apple.com>

        Fixes a bug where error bubbles in JavaScript resources would
        be clobbered by the syntax highlighter.

        https://bugs.webkit.org/show_bug.cgi?id=20345

        Reviewed by Adam Roben.

        * manual-tests/inspector/resources/script-error.js: Added.
        * manual-tests/inspector/styled-error-bubbles-in-scripts.html: Added.
        * page/inspector/SourceFrame.js:
        (WebInspector.SourceFrame.prototype._addMessageToSource):
        Check the nodeType and not the nodeName, this is less fragile.
        (WebInspector.SourceFrame.prototype._syntaxHighlightJavascriptLine):
        Check if the lastChild is an error bubble, if so remove it before
        getting the line's textContent. Add the error bubble back at the end.

== Rolled over to ChangeLog-2008-08-10 ==
